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 0x80
Ejercicio 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 0x80
Retroalimentación y Consejos
-
Errores Comunes:
- No inicializar los registros antes de usarlos.
- Olvidar que
MUL
yDIV
afectan 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