Herramientas de usuario

Herramientas del sitio


arm_inst_mov

¡Esta es una revisión vieja del documento!


Instrucciones de movimientos de datos

MOV (inmediato)

MOVS <Rd>, #<const>

La instrucción MOV (inmediato) escribe un valor inmediato <const> en el registro destino <Rd>.

Los flags son actualizados según el resultado.

#<const> es un valor en el rango 0-255

Ejemplo

   movs  r0, #2      // Carga en el registro r0 la constante 2

MOV (registro)

En ciertas circunstancias, el ensamblador puede sustituir MVN por Mov, o Mov por Mvn, hay que tenerlo en cuenta cuando debuggeamos.

Ejemplos

   mov  r0, r1       // Copia en el registro r0 el contenido del registro r1
   mov  r0, #2      // Carga en el registro r0 constante 2 en decimal por defecto
   

MOV{S}{cond}:

{S} Es un sufijo opcional. Si se especifica, se actualiza el registro de flags (Registro CPSR) de acuerdo al resultado de la operación.

N Z C

{cond} es condicional optativo, en general no lo usamos

#inmediato: es un valor en el rango 0-255.

PUSH y POP

Push: Guarda registro/registros en el stack. El puntero a la pila, es el reg r13, por convencion lo llamamos SP (stack pointer). Este registro siempre apunta a la palabra del tope de la pila, última palabra ingresada en el stack.

Pop: desapila una palabra, indicada por sp.

Más info sobre el funcionamiento del stack, click acá

PUSH{cond} listreg

POP{cond} listreg

Ejemplos:

   push r1
   push r2
   push r4
   /* código que modifica los registro r1, r2 y r4 */
   pop  r4
   pop  r2
   pop  r1
   

Observemos que el orden de recuperación de registros es inverso a como lo guardamos. En ARM es mucho más fácil que otros procesadores (por ejemplo 8086). Gracias a las instrucciones de carga/escritura múltiple podemos poner los registros en una lista, empleando una única instrucción. :-D

   push {r1, r2, r4}
   /* código que modifica los registros r1, r2 y r4 */
   pop {r1, r2, r4}
   

En este caso el orden no es relevante, el procesador siempre usa el orden ascendente para el push y el descendente para el pop, aunque nosotros por legibilidad siempre escribiremos los registros en orden ascendente.


Mariano

Volver

(2199)

× iphelper toolbox

you see this when javscript or css is not working correct

Untested
IP Address:
First usable:
Subnet:
Last usable:
CIDR:
Amount of usable:
Network address:
Reverse address:
Broadcast address:

arm_inst_mov.1589518235.txt.gz · Última modificación: 2020/05/15 04:50 (editor externo)