arm_inst_logicas
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_logicas [2020/05/22 05:20] – andrew | arm_inst_logicas [2020/05/23 21:53] (actual) – mariano | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== Instrucciones Lógicas ==== | ====== Instrucciones Lógicas ==== | ||
- | ==== AND, ORR, EOR, BIC, and 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 |
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, |
- | + | ||
- | En ciertas circunstancias, | + | |
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: | + | **Ejercicio: |
+ | |||
+ | |||
+ | ==== ORR ==== | ||
- | ==== ORR ==== (pagina 234) | ||
ORR (OR lógico) realiza un OR bit a bit (inclusive) entre dos valores. El primer valor proviene de un registro. El segundo valor puede ser un valor inmediato, un registro ó un registro con shift. ORR puede actualizar opcionalmente los flags en función del resultado | ORR (OR lógico) realiza un OR bit a bit (inclusive) entre dos valores. El primer valor proviene de un registro. El segundo valor puede ser un valor inmediato, un registro ó un registro con shift. ORR puede actualizar opcionalmente los flags en función del resultado | ||
Línea 102: | Línea 101: | ||
**Ejercicio: | **Ejercicio: | ||
+ | ==== EOR ==== | ||
+ | EOR (OR exclusivo) realiza un OR exclusivo bit a bit entre dos valores. El primer valor proviene de un registro. El segundo valor puede ser un valor inmediato, un registro ó un registro con shift. EOR puede actualizar opcionalmente los flags en función del resultado | ||
+ | |||
+ | |||
+ | Sintaxis | ||
+ | |||
+ | | ||
+ | |||
+ | Donde los operandos y los componentes opcionales de la instrucción se comportan como en la instrucción AND. Los flags se modifican igual que en la instrucción AND. | ||
+ | |||
+ | |||
+ | **Uso:** | ||
+ | Se usa EOR para invertir los bits seleccionados en un registro. Para cada bit, EOR con 1 invierte ese bit, y EOR con 0 lo deja sin cambios. | ||
+ | |||
+ | Se puede usar para encriptar el contenido de un registro. Para desencriptar el contenido del registro basta aplicar xor nuevamente. | ||
+ | |||
+ | **Ejemplo: | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | ldr r1, =valor | ||
+ | ldr r1, [r1] // | ||
+ | |||
+ | ldr r0, =clave | ||
+ | ldr r0, [r0] // r0=0xf0f0f0f0 | ||
+ | |||
+ | eors r2, r1, r0 //r2 = r1 xor r0 = 0xe2c4a688 (r1 encriptado) | ||
+ | |||
+ | eors r3, r2, r0 //r3 = r1 | ||
+ | fin: | ||
+ | mov r7, #1 // Salida al sistema | ||
+ | swi 0 | ||
+ | |||
+ | |||
+ | |||
+ | **Ejercicio: | ||
+ | |||
+ | |||
+ | ==== BIC ==== | ||
+ | BIC (Bit Clear) realiza un AND a nivel de bit entre un valor con el complemento de un segundo valor. El primer valor proviene de un registro. El segundo valor puede ser un valor inmediato, un registro ó un registro con shift. BIC puede actualizar opcionalmente los flags en función del resultado | ||
+ | |||
+ | |||
+ | Sintaxis | ||
+ | |||
+ | | ||
+ | |||
+ | Donde los operandos y los componentes opcionales de la instrucción se comportan como en la instrucción AND. Los flags se modifican igual que en la instrucción AND. | ||
+ | |||
+ | |||
+ | **Uso:** | ||
+ | |||
+ | Se usa BIC para borrar los bits seleccionados en un registro. Para cada bit, BIC con 1 borra el bit y BIC con 0 lo deja sin cambios. | ||
+ | |||
+ | |||
+ | **Ejemplo: | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | ldr r1, =valor | ||
+ | ldr r1, [r1] // | ||
+ | |||
+ | ldr r0, =borrar | ||
+ | ldr r0, [r0] // r0=0xff0000ff | ||
+ | |||
+ | bics r2, r1, r0 //r2 = borrar en r1 los bits marcados en r0 | ||
+ | //r2 = 0x00345600 | ||
+ | fin: | ||
+ | mov r7, #1 // Salida al sistema | ||
+ | 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). | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | El desplazamiento aritmético hace lo mismo, pero manteniendo el signo. Veamos la siguiente figura | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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). | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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/ | ||
+ | {{ : |
×
iphelper toolbox
you see this when javscript or css is not working correct
Untested
arm_inst_logicas.1590124813.txt.gz · Última modificación: 2020/05/22 05:20 (editor externo)