Herramientas de usuario

Herramientas del sitio


arm_inst_mov

¡Esta es una revisión vieja del documento!


Instrucciones de movimientos de datos

MOV

La instrucción MOV copia el valor de Op2 en Op1. En ciertas circunstancias, el ensamblador puede sustituir MVN por Mov, o Mov por Mvn, hay que tenerlo en cuenta cuando debuggeamos.

mov{s}{cond} op1, op2

mov {cond} Rd, #inmediato

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.1589342211.txt.gz · Última modificación: 2020/05/13 03:56 (editor externo)