¡Esta es una revisión vieja del documento!
Tabla de Contenidos
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.
push {r1, r2, r4} /* código que modifica los registros r1, r2 y r4 */ pop {r1, r2, r4}
— Mariano
(2199)
you see this when javscript or css is not working correct