¿Cuál es la primera dirección de ARM DA (Decremento Después) modo de dirección?
-
20-09-2019 - |
Pregunta
Tengo dos preguntas sobre Da modo de direccionamiento. Por ejemplo:
STMDA R0!, {R1-R7}
La dirección inicial será R0 - (7 * 4) + 4
, es decir, R0-24
, de acuerdo con el manual de referencia arquitectura ARM y end_address será R0
.
Así que:
- ¿Se va a almacenar el valor de
R1
aR0-24
oR0
? - Si
R1
se almacena aR0-24
, a continuación, almacena posteriores crecerá hacia la parte superior de la memoria (deR0-24
aR0
)?
Solución 3
parte del pseudocódigo se muestra a continuación:
address = start_address para i = 0 a 15 si register_list [i] == 1 entonces Memoria [dirección, 4] = Ri address = dirección + 4
parece que el método de crecimiento de STM no tiene nada que ver con el modo de direccionamiento para el almacenamiento de datos? siempre almacena los datos de dirección de menor a mayor, el modo de direccionamiento sólo se decide la dirección de inicio basada en R0?
Otros consejos
Cuando se utiliza ARM varios almacenes y cargas, regístrese valores siempre se cargan / almacenado en orden ascendente en la memoria. Por lo tanto, cuando se utiliza un almacén de múltiples descendente, los registros se escriben en la memoria hacia atrás. Su instrucción STMDA
rompe de manera efectiva en los siguientes pasos:
- Tienda
R7
enR0
- Tienda
R6
enR0 - 4
- Tienda
R5
enR0 - 8
- Tienda
R4
enR0 - 12
- Tienda
R3
enR0 - 16
- Tienda
R2
enR0 - 20
- Tienda
R1
enR0 - 24
- restar 28 de
R0
(debido a reescritura - la!
).
Por lo tanto, para responder a sus preguntas:
-
El valor de
R1
se almacenará enR0 - 24
. (. En este caso, me refiero al valor deR0
antes de ejecutar la instrucción, no después Usted está utilizando reescritura - la!
-. Así que después de la instrucción,R0
habrá tenido 28 resta de ella) -
R1
se almacena enR0 - 24
, pero como se explicó anteriormente,R1
es el último registro ha de tener el valor almacenado en la memoria.R7
se almacena primero, y almacena posteriores de allí crecen hacia abajo en la memoria.
Tengo que admitir que no sé de cualquier documentación que apoye esta respuesta. Además, se ha pasado un tiempo desde la última vez hice ningún tipo de codificación ARM. Sin embargo, definitivamente recuerdo preguntando cómo se almacenan en ARM registra en un almacén de múltiples descendente. Me di cuenta de esto escribiendo un programa corto de averiguar.
Búsqueda de brazo del brazo El manual de referencia de arquitectura ARM ...
La primera dirección formada es el, y es el valor del registro de base de menos de cuatro veces el número de registros especificados en, además de 4. direcciones posteriores están formados por incrementar la dirección anterior por cuatro. Una dirección se produce para cada registro que se especifica en.