En este tema, aprenderemos sobre las instrucciones lógicas en el lenguaje ensamblador. Estas instrucciones son fundamentales para realizar operaciones bit a bit, que son esenciales en la manipulación de datos a nivel de hardware. Las instrucciones lógicas más comunes incluyen AND, OR, XOR y NOT.

Conceptos Clave

  1. AND: Realiza una operación lógica AND bit a bit entre dos operandos.
  2. OR: Realiza una operación lógica OR bit a bit entre dos operandos.
  3. XOR: Realiza una operación lógica XOR bit a bit entre dos operandos.
  4. NOT: Realiza una operación lógica NOT bit a bit en un operando.

Tabla de Operaciones Lógicas

Operación Símbolo Descripción Ejemplo (A = 1010, B = 1100) Resultado
AND AND Bit a bit AND 1010 AND 1100 1000
OR OR Bit a bit OR 1010 OR 1100 1110
XOR XOR Bit a bit XOR 1010 XOR 1100 0110
NOT NOT Bit a bit NOT NOT 1010 0101

Ejemplos Prácticos

Instrucción AND

La instrucción AND se utiliza para realizar una operación AND bit a bit entre dos registros o entre un registro y un valor inmediato.

section .data
    val1 db 1010b
    val2 db 1100b

section .text
    global _start

_start:
    mov al, [val1]    ; Cargar val1 en el registro AL
    and al, [val2]    ; Realizar AND bit a bit con val2
    ; Resultado en AL: 1000b

Instrucción OR

La instrucción OR se utiliza para realizar una operación OR bit a bit entre dos registros o entre un registro y un valor inmediato.

section .data
    val1 db 1010b
    val2 db 1100b

section .text
    global _start

_start:
    mov al, [val1]    ; Cargar val1 en el registro AL
    or al, [val2]     ; Realizar OR bit a bit con val2
    ; Resultado en AL: 1110b

Instrucción XOR

La instrucción XOR se utiliza para realizar una operación XOR bit a bit entre dos registros o entre un registro y un valor inmediato.

section .data
    val1 db 1010b
    val2 db 1100b

section .text
    global _start

_start:
    mov al, [val1]    ; Cargar val1 en el registro AL
    xor al, [val2]    ; Realizar XOR bit a bit con val2
    ; Resultado en AL: 0110b

Instrucción NOT

La instrucción NOT se utiliza para realizar una operación NOT bit a bit en un registro.

section .data
    val1 db 1010b

section .text
    global _start

_start:
    mov al, [val1]    ; Cargar val1 en el registro AL
    not al            ; Realizar NOT bit a bit en AL
    ; Resultado en AL: 0101b

Ejercicios Prácticos

Ejercicio 1: AND y OR

Escribe un programa en ensamblador que realice las siguientes operaciones:

  1. Cargar el valor 1101b en el registro AL.
  2. Realizar una operación AND con el valor 1011b.
  3. Guardar el resultado en el registro BL.
  4. Realizar una operación OR entre BL y 0110b.
  5. Guardar el resultado final en el registro CL.

Solución

section .data
    val1 db 1101b
    val2 db 1011b
    val3 db 0110b

section .text
    global _start

_start:
    mov al, [val1]    ; Cargar val1 en el registro AL
    and al, [val2]    ; Realizar AND con val2
    mov bl, al        ; Guardar el resultado en BL
    or bl, [val3]     ; Realizar OR con val3
    mov cl, bl        ; Guardar el resultado final en CL
    ; Resultado en CL: 1111b

Ejercicio 2: XOR y NOT

Escribe un programa en ensamblador que realice las siguientes operaciones:

  1. Cargar el valor 1001b en el registro AL.
  2. Realizar una operación XOR con el valor 0110b.
  3. Guardar el resultado en el registro BL.
  4. Realizar una operación NOT en BL.
  5. Guardar el resultado final en el registro CL.

Solución

section .data
    val1 db 1001b
    val2 db 0110b

section .text
    global _start

_start:
    mov al, [val1]    ; Cargar val1 en el registro AL
    xor al, [val2]    ; Realizar XOR con val2
    mov bl, al        ; Guardar el resultado en BL
    not bl            ; Realizar NOT en BL
    mov cl, bl        ; Guardar el resultado final en CL
    ; Resultado en CL: 1000b

Resumen

En esta sección, hemos aprendido sobre las instrucciones lógicas en ensamblador, incluyendo AND, OR, XOR y NOT. Estas operaciones son esenciales para la manipulación de datos a nivel de bits y son ampliamente utilizadas en programación de bajo nivel. A través de ejemplos prácticos y ejercicios, hemos visto cómo aplicar estas instrucciones en programas de ensamblador. En la próxima sección, exploraremos el flujo de control en ensamblador, incluyendo sentencias condicionales y bucles.

© Copyright 2024. Todos los derechos reservados