Está en la página 1de 9

Montaje - Instrucciones Lógicas

El conjunto de instrucciones del procesador proporciona las instrucciones AND, OR, XOR,
TEST y NOT de la lógica booleana, que prueba, establece y borra los bits según las
necesidades del programa.
El formato de estas instrucciones:

Sr.No. Instrucción Formato


1 AND AND operand1, operand2
2 OR OR operand1, operand2
3 XOR XOR operand1, operand2
4 TEST TEST operand1, operand2
5 NOT NOT operand1
El primer operando en todos los casos podría estar en el registro o en la memoria. El segundo
operando podría estar en registro/memoria o un valor inmediato (constante). Sin embargo, las
operaciones de memoria a memoria no son posibles. Estas instrucciones comparan o hacen
coincidir los bits de los operandos y establecen las banderas CF, OF, PF, SF y ZF.
La instrucción AND

La instrucción AND se utiliza para admitir expresiones lógicas mediante la realización de una
operación AND bit a bit. La operación AND bit a bit devuelve 1, si los bits coincidentes de
ambos operandos son 1; de lo contrario, devuelve 0. Por ejemplo

Operand1: 0101
Operand2: 0011
------------------------------------------
After AND -> Operand1: 0001

La operación AND se puede utilizar para borrar uno o más bits. Por ejemplo, supongamos
que el registro BL contiene 0011 1010. Si necesita borrar los bits de orden superior a cero,
haga AND con 0FH.

AND BL, 0FH ; This sets BL to 0000 1010

Tomemos otro ejemplo. Si desea verificar si un número dado es impar o par, una prueba
simple sería verificar el bit menos significativo del número. Si esto es 1, el número es impar,
de lo contrario el número es par.
Suponiendo que el número está en el registro AL, podemos escribir −
AND AL, 01H ; ANDing with 0000 0001
JZ EVEN_NUMBER

El siguiente programa ilustra esto:

Ejemplo

section . text
global _start ;must be declared for
using gcc

_start: ;tell linker entry


point
mov ax, 8h ;getting 8 in the
ax
y hacha , 1 ;y hacha
con 1 jz evnn
mov eax , 4 ; número de llamada del sistema ( sys_write )

mov ebx , 1 ;descriptor de


archivo ( stdout )

mov ecx , mensaje_impar ; Mensaje


para escribe
mov edx , _ len2 ; longitud de mensaje

int 0x80 ; Llamar


kernel jmp outprog

incluso :

mueve ah , 09h

mov eax , 4 ; número de llamada del sistema ( sys_write )

mov ebx , 1 ; descriptor de


archivo ( stdout ) mov ecx ,
incluso_msg ; Mensaje para
escribe
movedx , _ len1 ; longitud de mensaje

int 0x80 ; llamar núcleo

superación :

mov eax , 1 ; número de llamada del sistema ( salida del sistema )

int 0x80 ; llamar núcleo

sección _ datos

even_msg db '¡Número par!' ; mensaje que


muestra el número par len1 equ $ - even_msg

impar_msg db 'Extraño ¡Número!' ;


mensaje que muestra un número impar len2
equ $ - mensaje_impar

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

Even Number!
Cambie el valor en el registro del hacha con un dígito impar, como −

mov ax, 9h ; getting 9 in the ax

El programa mostraría:

Odd Number!

De manera similar, para borrar todo el registro, puede Y con 00H.


La instrucción OR

La instrucción OR se utiliza para admitir expresiones lógicas mediante la realización de una


operación OR bit a bit. El operador OR bit a bit devuelve 1, si los bits coincidentes de uno o
ambos operandos son uno. Devuelve 0, si ambos bits son cero.
Por ejemplo,

Operand1:0101
Operand2:0011

After OR -> Operand1: 0111

La operación OR se puede utilizar para establecer uno o más bits. Por ejemplo, supongamos
que el registro AL contiene 0011 1010, necesita establecer los cuatro bits de orden inferior,
puede realizar operaciones OR con un valor 0000 1111, es decir, FH.

OR BL, 0FH ; This sets BL to 0011 1111

Ejemplo

El siguiente ejemplo demuestra la instrucción OR. Almacenemos el valor 5 y 3 en los registros

OR AL, BL
section .text
global _start: ;must be declared for using gcc

_start: ;tell linker entry point

mov al, ;getting 5 in the al


5
mov bl, ;getting 3 in the bl
3
or al, bl ;or al and bl registers, result should
be 7
add al, byte ;converting decimal to ascii
'0'
mov [result],
al
mov eax, 4
mov ebx, 1
mov ecx,
result
mov edx, 1
int 0x80
outprog:
mov eax,1 ;system call number (sys_exit)

int 0x80 ;call kernel

section .bss
result resb 1

AL y BL, respectivamente, luego la instrucción, bebe almacenar 7 en el registro AL −


Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

La instrucción XOR

La instrucción XOR implementa la operación XOR bit a bit. La operación XOR establece el bit
resultante en 1, si y solo si los bits de los operandos son diferentes. Si los bits de los
operandos son iguales (ambos 0 o ambos 1), el bit resultante se borra a 0.
Por ejemplo:

Operand1:0101
Operand2:0011

After XOR -> Operand1:0110

XORing un operando consigo mismo cambia el operando a 0. Esto se utiliza para borrar un
registro.

XOR EAX, EAX

La instrucción PRUEBA

La instrucción TEST funciona igual que la operación AND, pero a diferencia de la instrucción
AND, no cambia el primer operando. Entonces, si necesitamos verificar si un número en un
registro es par o impar, también podemos hacerlo usando la instrucción TEST sin cambiar el
número original.
TEST AL, 01H
JZ EVEN_NUMBER

La instrucción NOT

La instrucción NOT implementa la operación NOT bit a bit. La operación NOT invierte los bits
en un operando. El operando puede estar en un registro o en la memoria.
Por ejemplo:

Operand1: 0101 0011


After NOT -> Operand1: 1010 1100

También podría gustarte