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/15 04:50] 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 (inmediato)====+==== mov ==== 
 + 
 + 
 +La instrucción **mov (inmediato)** escribe un valor inmediato <const> en el registro destino <Rd>
  
 **MOVS <Rd>, #<const>** **MOVS <Rd>, #<const>**
  
-La instrucción MOV (inmediatoescribe un valor inmediato <const> en el registro destino <Rd>+El registro de flags (Registro CPSRes actualizado según el resultado
  
-Los flags son actualizados según el resultado.  
  
 #<const> es un valor en el rango 0-255 #<const> es un valor en el rango 0-255
Línea 18: Línea 20:
 ==== MOV (registro)==== ==== MOV (registro)====
  
-En ciertas circunstancias, el ensamblador puede sustituir MVN por Mov, o Mov por Mvn, hay que tenerlo en cuenta cuando debuggeamos.+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 Ejemplos
  
-     mov  r0, r1       // Copia en el registro r0 el contenido del registro r1 +     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+     MOVS  r0, r3      // Copia en el registro r0 el contenido del registro r3 y actualiza cpsr
            
 +==== ldr y str ====
  
-**MOV{S}{cond}**: +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 desde memorialuego procesamos el valor de estos registros con el amplio abanico de instrucciones del ARM, para finalmente volcar los resultados desde registros a memoria
-{S} Es un sufijo opcional. Si se especificase actualiza el registro de flags (Registro CPSR) de acuerdo al  resultado de la operación+Existen otras arquitecturas como la Intel x86, donde 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ño. Normalmente se opta por direccionamiento a memoria en instrucciones de procesado en arquitecturas con un número reducido de registros, donde se emplea la memoria como almacén temporal.
- +
-N Z C +
- +
-{cond} es condicional optativoen general no lo usamos +
- +
-#inmediato: es un valor en el rango 0-255.+
  
 +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.
  
 ==== PUSH y POP ==== ==== 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.+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.
  
-Pop: desapila una palabra, indicada por sp.+**PUSH <listreg>**
  
-[[arquitectura_arm:componentes_fisicos._registros_flags_pila._direcciones_de_memoria_logicas_y_fisicas#El Stack o pila y las instrucciones ldm y stm| 
-Más info sobre el funcionamiento del stack, click acá]] 
  
 +Pop desapila uno ó una lista de registros <listreg> almacenados en el stack, para acceder a ello usa el registro sp.
  
- +**POP <listreg>**
-PUSH{cond} listreg +
- +
-POP{cond} listreg+
  
 Ejemplos: Ejemplos:
Línea 64: 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 75: 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.1589518235.txt.gz · Última modificación: 2020/05/15 04:50 (editor externo)