¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Instrucciones de movimientos de datos
MOV (inmediato)
La instrucción MOV (inmediato) escribe un valor inmediato <const> en el registro destino <Rd>.
MOVS <Rd>, #<const>
El registro de flags (Registro CPSR) es actualizado 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)
Copia un registro fuente <Rm> al registro destino <Rd> En ciertas circunstancias, el ensamblador puede sustituir MOV por MVN, hay que tenerlo en cuenta cuando debuggeamos.
MOV{S} <Rd>, <Rm>
{S} Es un sufijo opcional. Si se especifica, se actualiza el registro de flags (Registro CPSR) de acuerdo al resultado de la operación.
<Rd> Es el registro destino. Puede ser PC ó SP. Si es PC entonces la instrucción causa un salto a la dirección contenida en <Rm>
<Rm> Es el registro fuente. Puede ser PC ó SP.
Ejemplos
MOV r0, r1 // Copia en el registro r0 el contenido del registro r1 MOVS r0, r3 // Copia en el registro r0 el contenido del registro r3 y actualiza cpsr
PUSH y POP
Push guarda/almacena uno ó una lista de registros <listreg> 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.
PUSH <listreg>
Pop desapila uno ó una lista de registros <listreg> almacenados en el stack, para acceder a ello usa el registro sp.
POP <listreg>
Ejemplos:
push r1 push r2 push r4 /* código que modifica los registro r1, r2 y r4 */ pop r4 pop r2 pop r1
Más info sobre el funcionamiento del stack, click acá
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}
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
(2199)
you see this when javscript or css is not working correct