arm_inst_mov
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
arm_inst_mov [2020/05/13 06:56] – [MOV] andrew | arm_inst_mov [2020/05/27 03:04] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 2: | Línea 2: | ||
===== Instrucciones de movimientos de datos ===== | ===== Instrucciones de movimientos de datos ===== | ||
- | ==== MOV ==== | + | ==== mov ==== |
- | La instrucción MOV copia el valor de Op2 en Op1. En ciertas circunstancias, | ||
- | |||
- | mov{s}{cond} op1, op2 | ||
- | mov {cond} Rd, #inmediato | + | La instrucción **mov (inmediato)** escribe un valor inmediato < |
+ | **MOVS <Rd>, #< | ||
- | Ejemplos | + | El registro de flags (Registro CPSR) es actualizado según el resultado. |
- | | ||
- | | ||
- | |||
- | **MOV{S}{cond}**: | + | #< |
+ | |||
+ | Ejemplo | ||
+ | | ||
+ | |||
+ | |||
+ | ==== MOV (registro)==== | ||
+ | |||
+ | Copia un registro fuente <Rm> al registro destino < | ||
+ | En ciertas circunstancias, | ||
+ | |||
+ | **MOV{S} | ||
{S} Es un sufijo opcional. Si se especifica, se actualiza el registro de flags (Registro CPSR) de acuerdo al resultado de la operación. | {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 | + | <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> |
- | {cond} es condicional optativo, en general no lo usamos | + | <Rm> Es el registro fuente. Puede ser PC ó SP. |
- | #inmediato: es un valor en el rango 0-255. | ||
+ | Ejemplos | ||
- | ==== PUSH y POP ==== | + | |
+ | | ||
+ | |||
+ | ==== ldr y str ==== | ||
- | Push: Guarda registro/registros | + | En la arquitectura ARM los accesos a memoria se hacen mediante instrucciones específicas ldr y str (luego veremos las variantes ldm, stm y las preprocesadas push y pop). El resto de instrucciones toman operandos desde registros o valores inmediatos, sin excepciones. En este caso la arquitectura nos fuerza a que trabajemos de |
+ | un modo determinado: primero cargamos los registros | ||
+ | Existen otras arquitecturas como la Intel x86, donde las instrucciones de procesado nos permiten leer o escribir directamente de memoria. Ningún método | ||
- | Pop: desapila una palabra, indicada | + | En nuestro caso disponemos de suficientes registros, por lo que podemos hacer el procesamiento sin necesidad de interactuar con la memoria, lo que por otro lado también es más rápido. |
- | [[arquitectura_arm: | + | ==== PUSH y POP ==== |
- | Más info sobre el funcionamiento del stack, click acá]] | + | |
+ | Push guarda/ | ||
+ | **PUSH < | ||
- | PUSH{cond} listreg | ||
- | POP{cond} | + | Pop desapila uno ó una lista de registros < |
+ | |||
+ | **POP <listreg>** | ||
Ejemplos: | Ejemplos: | ||
Línea 52: | Línea 65: | ||
| | ||
| | ||
- | + | ||
+ | |||
+ | |||
+ | [[arquitectura_arm: | ||
+ | |||
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/ | 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/ | ||
Línea 63: | Línea 81: | ||
+ | ***Observación***: | ||
+ | |||
+ | Aunque no usemos las instrucciones stm y ldm, les dejamos como es la sintaxis: | ||
+ | ldm{ modo_direc }{ cond } rn {!} , lista_reg | ||
+ | stm{ modo_direc }{ cond } rn {!} , lista_reg | ||
+ | |||
×
iphelper toolbox
you see this when javscript or css is not working correct
Untested
arm_inst_mov.1589352976.txt.gz · Última modificación: 2020/05/13 06:56 por andrew