Herramientas de usuario

Herramientas del sitio


arm_inst_logicas

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_logicas [2020/05/22 06:08] – [EOR] andrewarm_inst_logicas [2020/05/23 21:53] (actual) mariano
Línea 1: Línea 1:
 ====== Instrucciones Lógicas ==== ====== Instrucciones Lógicas ====
  
-==== Resumen de AND, ORR, EOR, BIC, ORN ====+==== Resumen de AND, ORR, EOR y BIC ====
  
-Instrucciones Lógicas AND, OR, Exclusive OR, Bit Clear, and OR NOT.  Las instrucciones AND, EOR y ORR realizan operaciones AND, OR exclusivas y OR a nivel de bits en los valores de Rn y Operando 2+Las instrucciones AND, EOR y ORR realizan operaciones AND, OR exclusivas y OR a nivel de bits en los valores de Rn y Operando 2
  
 La instrucción BIC (Bit Clear) realiza una operación AND en los bits en Rn con los complementos de los bits correspondientes en el valor de Operando 2. La instrucción BIC (Bit Clear) realiza una operación AND en los bits en Rn con los complementos de los bits correspondientes en el valor de Operando 2.
  
-La instrucción ORN Thumb realiza una operación OR en los bits en Rn con los complementos de los bits correspondientes en el valor de Operando 2. +En ciertas circunstancias, el ensamblador puede sustituir BIC por AND, AND por BIC. Tengamos esto en cuenta al leer vuelco de memoria.
- +
-En ciertas circunstancias, el ensamblador puede sustituir BIC por AND, AND por BIC, ORN por ORR u ORR por ORN. Tengamos esto en cuenta al leer vuelco de memoria.+
  
 Sintaxis General: Sintaxis General:
Línea 21: Línea 19:
   * EOR (O Lógico exclusivo).   * EOR (O Lógico exclusivo).
   * BIC (Y Lógico negado).   * BIC (Y Lógico negado).
-  * ORN (O Lógico negado). 
            
            
Línea 77: Línea 74:
  
  
-**Ejercicio:** Repetir el código anterior partiendo de un registro cpsr con los bits NZCV en 0. Verificar que el valor del carry flag C se mantiene después de la instrucción AND.+**Ejercicio:** Repetir el código anterior partiendo de un registro cpsr con los bits NZCV en 0. Verificar que el valor del carry flag C se mantiene después de la instrucción AND. Modificar la mascara para extraer del registro r1 los dos bytes mas significativos y los dos bits menos significativos.
  
  
Línea 135: Línea 132:
        ldr r0, [r0] // r0=0xf0f0f0f0        ldr r0, [r0] // r0=0xf0f0f0f0
             
-       eors r2, r1, r0 //r2 = r1 xor r0 = 0xa0000000 (r1 encriptado)+       eors r2, r1, r0 //r2 = r1 xor r0 = 0xe2c4a688 (r1 encriptado)
             
        eors r3, r2, r0         //r3 = r1         eors r3, r2, r0         //r3 = r1 
Línea 178: Línea 175:
        ldr r0, [r0] // r0=0xff0000ff        ldr r0, [r0] // r0=0xff0000ff
             
-              bics r2, r1, r0 //r2 = borrar en r1 los bits marcados en r0+       bics r2, r1, r0 //r2 = borrar en r1 los bits marcados en r0
                          //r2 = 0x00345600                          //r2 = 0x00345600
       fin:       fin:
Línea 184: Línea 181:
        swi 0        swi 0
  
 +==== Rotaciones y desplazamientos ====
 +
 +Veremos el funcionamiento de las instrucciones de desplazamiento y rotación. Las instrucciones de desplazamiento pueden ser lógicas o aritméticas. Los desplazamientos lógicos desplazan los bit del registro fuente introduciendo ceros (uno o más de uno). El último bit que sale del registro fuente se almacena en el
 +flag C (en la siguiente figura).
 +
 +{{ :instlogicas1.png?400 |}}
 +
 +El desplazamiento aritmético hace lo mismo, pero manteniendo el signo. Veamos la siguiente figura
 +
 +{{ :instlogicas2.png?450 |}}
 +
 +Las instrucciones de rotación también desplazan, pero el bit que sale del valor se realimenta. No existe ninguna instrucción para rotar hacia la izquierda ROL, ya que puede simularse con la de rotación a la derecha **ROR** que sí existe. En estas instrucciones el bit desplazado fuera es el mismo que el que entra, además de dejar
 +una copia en el flag C (Ver abajo).
 +
 +{{ :instlogicas3.png?500 |}}
  
 +Las instrucciones de rotación con el carry funcionan de manera similar, pero el bit que entra es el que había en el flag C y el que sale va a parar al flag C.
 +Estas instrucciones sólo rotan un bit, al contrario que las anteriores que podían rotar/desplazar varios. La rotación con carry a la derecha es RRX, no existe la contrapartida RLX porque se puede sintetizar con otra instrucción ya existente adcs. Con adcs podemos sumar un registro consigo mismo, que es lo mismo que multiplicar por 2 o desplazar 1 bit hacia la izquierda. Si a esto le añadimos el bit de carry como entrada y actualizamos los flags a la salida, tendremos exactamente el mismo comportamiento que tendría la instrucción RLX.
  
 +{{ :instlogicas4.png?450 |}}
× 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_logicas.1590127696.txt.gz · Última modificación: 2020/05/22 06:08 por andrew