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-65535.

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.

— Mariano

Volver

()