Herramientas de usuario

Herramientas del sitio


arm_inst_mov

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
arm_inst_mov [2020/05/13 06:56] – [MOV] andrewarm_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, 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+La instrucción **mov (inmediato)** escribe un valor inmediato <const> en el registro destino <Rd>
  
 +**MOVS <Rd>, #<const>**
  
-Ejemplos+El registro de flags (Registro CPSR) es actualizado según el resultado. 
  
-     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}**:+#<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. {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 POP ====+     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 
 +      
 +==== ldr str ====
  
-PushGuarda registro/registros en el stack. El puntero a la pila, es el reg r13por convencion lo llamamos SP (stack pointer)Este registro siempre apunta la palabra del tope de la pila, última palabra ingresada en el stack.+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 determinadoprimero cargamos los registros desde memoria, luego procesamos el valor de estos registros con el amplio abanico de instrucciones del ARM, para finalmente volcar los resultados desde registros memoria. 
 +Existen otras arquitecturas como la Intel x86donde las instrucciones de procesado nos permiten leer o escribir directamente de memoria. Ningún método es mejor que otrotodo es cuestión de diseñoNormalmente se opta por direccionamiento memoria en instrucciones de procesado en arquitecturas con un número reducido de registros, donde se emplea la memoria como almacén temporal.
  
-Pop: desapila una palabraindicada por sp.+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:componentes_fisicos._registros_flags_pila._direcciones_de_memoria_logicas_y_fisicas#El Stack o pila las instrucciones ldm y stm| +==== PUSH POP ====
-Más info sobre el funcionamiento del stack, click acá]]+
  
 +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>**
  
-PUSH{cond} listreg 
  
-POP{cond} listreg+Pop desapila uno ó una lista de registros <listreg> almacenados en el stack, para acceder a ello usa el registro sp. 
 + 
 +**POP <listreg>**
  
 Ejemplos: Ejemplos:
Línea 52: Línea 65:
      pop  r2      pop  r2
      pop  r1      pop  r1
-     + 
 + 
 + 
 +[[arquitectura_arm:componentes_fisicos._registros_flags_pila._direcciones_de_memoria_logicas_y_fisicas#El Stack o Pila| 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. :-D 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
  
Línea 63: Línea 81:
  
  
 +***Observación***: Tenemos las instrucciones stm y ldm que son mucho más potentes que las instrucciones push y pop. El ensamblador de forma transparente traducirá a stm y ldm las instrucciones push y pop.
 +
 +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
IP Address:
First usable:
Subnet:
Last usable:
CIDR:
Amount of usable:
Network address:
Reverse address:
Broadcast address:

arm_inst_mov.1589352976.txt.gz · Última modificación: 2020/05/13 06:56 por andrew