En este tema, aprenderemos sobre las instrucciones aritméticas en el lenguaje ensamblador. Estas instrucciones son fundamentales para realizar operaciones matemáticas básicas como suma, resta, multiplicación y división. A lo largo de esta sección, veremos cómo se utilizan estas instrucciones, ejemplos prácticos y ejercicios para reforzar el aprendizaje.
Conceptos Clave
-
Instrucciones Aritméticas Básicas:
- ADD: Suma dos operandos.
- SUB: Resta el segundo operando del primero.
- MUL: Multiplica dos operandos.
- DIV: Divide el primer operando por el segundo.
-
Operandos:
- Los operandos pueden ser registros, valores inmediatos o direcciones de memoria.
-
Registros Comunes:
- AX, BX, CX, DX: Registros de propósito general en la arquitectura x86.
Instrucciones Aritméticas en Detalle
Suma (ADD)
La instrucción ADD suma el valor del segundo operando al primer operando y almacena el resultado en el primer operando.
Sintaxis:
Ejemplo:
Resta (SUB)
La instrucción SUB resta el valor del segundo operando del primer operando y almacena el resultado en el primer operando.
Sintaxis:
Ejemplo:
Multiplicación (MUL)
La instrucción MUL multiplica el valor del operando por el valor en el registro AX y almacena el resultado en AX (para operandos de 8 bits) o en DX:AX (para operandos de 16 bits).
Sintaxis:
Ejemplo:
División (DIV)
La instrucción DIV divide el valor en el registro AX (para operandos de 8 bits) o en DX:AX (para operandos de 16 bits) por el operando. El cociente se almacena en AX y el residuo en DX.
Sintaxis:
Ejemplo:
Ejercicios Prácticos
Ejercicio 1: Suma y Resta
Escribe un programa en ensamblador que sume dos números y luego reste un tercer número del resultado.
Código:
section .data
num1 db 10
num2 db 5
num3 db 3
section .bss
result resb 1
section .text
global _start
_start:
; Suma num1 y num2
mov al, [num1]
add al, [num2]
; Resta num3 del resultado
sub al, [num3]
; Almacena el resultado
mov [result], al
; Salida del programa
mov eax, 1
int 0x80Ejercicio 2: Multiplicación y División
Escribe un programa en ensamblador que multiplique dos números y luego divida el resultado por un tercer número.
Código:
section .data
num1 db 6
num2 db 4
num3 db 2
section .bss
result resb 1
section .text
global _start
_start:
; Multiplica num1 y num2
mov al, [num1]
mov bl, [num2]
mul bl
; Divide el resultado por num3
mov bl, [num3]
div bl
; Almacena el resultado
mov [result], al
; Salida del programa
mov eax, 1
int 0x80Retroalimentación y Consejos
-
Errores Comunes:
- No inicializar los registros antes de usarlos.
- Olvidar que
MULyDIVafectan a registros específicos (AX,DX).
-
Consejos:
- Siempre verifica el contenido de los registros antes y después de las operaciones aritméticas.
- Usa comentarios en tu código para mantenerlo claro y comprensible.
Conclusión
En esta sección, hemos cubierto las instrucciones aritméticas básicas en ensamblador, incluyendo ADD, SUB, MUL y DIV. Estas instrucciones son esenciales para realizar operaciones matemáticas en programas de ensamblador. Asegúrate de practicar con los ejercicios proporcionados para consolidar tu comprensión. En la próxima sección, exploraremos las instrucciones lógicas, que son igualmente importantes para la manipulación de datos en ensamblador.
Curso de Programación en Ensamblador
Módulo 1: Introducción al Lenguaje Ensamblador
- ¿Qué es el Lenguaje Ensamblador?
- Historia y Evolución del Ensamblador
- Conceptos y Terminología Básica
- Configuración del Entorno de Desarrollo
Módulo 2: Fundamentos del Lenguaje Ensamblador
- Comprendiendo la CPU y la Memoria
- Registros y Sus Funciones
- Sintaxis y Estructura Básica
- Escribiendo Tu Primer Programa en Ensamblador
Módulo 3: Representación de Datos e Instrucciones
- Sistemas Binario y Hexadecimal
- Tipos y Tamaños de Datos
- Instrucciones Aritméticas
- Instrucciones Lógicas
Módulo 4: Flujo de Control
Módulo 5: Conceptos Avanzados de Ensamblador
- Interrupciones y Llamadas al Sistema
- Macros y Ensamblado Condicional
- Ensamblador Inline en Lenguajes de Alto Nivel
- Optimización del Código en Ensamblador
Módulo 6: Ensamblador para Diferentes Arquitecturas
- Lenguaje Ensamblador x86
- Lenguaje Ensamblador ARM
- Lenguaje Ensamblador MIPS
- Lenguaje Ensamblador RISC-V
Módulo 7: Aplicaciones Prácticas y Proyectos
- Escribiendo un Cargador de Arranque Simple
- Creando un Núcleo Básico de Sistema Operativo
- Interfaz con Hardware
- Depuración y Perfilado del Código en Ensamblador
