TECNOLÓGICO NACIONAL DE MÉXICO
INSTITUTO TECNOLÓGICO DE ACAPULCO
INGENIERÍA EN SISTEMAS COMPUTACIONALES
Lenguaje de Interfaz
PROFESOR:
JOSÉ FRANCISCO CARBAJAL VIOLANTE
MENÚ DE OPERACIONES
ALUMNO:
JOSHUA HERNÁNDEZ ÁLVAREZ (N°Control: 19320976)
INTRODUCCIÓN
Este es un programa en lenguaje ensamblador para la plataforma emu8086 que
presenta un menú de opciones para realizar diferentes operaciones aritméticas. El
usuario puede seleccionar entre sumar, restar, multiplicar o dividir dos números.
Para realizar cada operación, el programa solicita al usuario que introduzca los
números a operar. Una vez que se introducen los números, el programa muestra el
resultado de la operación seleccionada por el usuario.
El programa está estructurado con un conjunto de instrucciones que se activan
dependiendo de la opción seleccionada por el usuario en el menú. Para cada opción,
el programa muestra mensajes específicos para solicitar los números a operar y
muestra el resultado de la operación. El programa también incluye una opción de
"salida" para que el usuario pueda salir del menú en cualquier momento.
DESARROLLO DEL CÓDIGO
.model small
.stack 100h
.data
menu_opciones db 'Menu de opciones',13,10, 'Sumar numeros - Presione
1',13,10, 'Restar numeros - Presione 2',13,10, 'Multiplicar numeros - Presione
3',13,10, 'Dividir numeros - Presione 4',13,10, 'Salir - Presione 5','$'
opcion1 db "Sumar numeros", 10,13,'$'
opcion2 db "Restar numeros", 10,13,'$'
opcion3 db "Multiplicar numeros", 10,13,'$'
opcion4 db "Dividir numeros", 10,13,'$'
opcion5 db "Salir", 10,13,'$'
salto_linea db 10,13,'$'
mensaje db 'Introduzca el primer numero: $' ; mensaje para solicitar el
primer número
mensaje2 db 'Introduzca el segundo numero: $' ; mensaje para solicitar el
segundo número
resultado db 'El resultado es: $' ; mensaje para mostrar el resultado de la
suma
num1 dw 0 ; variable para el primer número
num2 dw 0 ; variable para el segundo número
operaciones dw 0 ; variable para el resultado de la operacm
.code
mov ax, @data
mov ds, ax
mov es, ax
mov ah, 9
lea dx, menu_opciones
int 21h
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 01h
int 21h
sub al, '0'
cmp al, 1
je opcion_1
cmp al, 2
je opcion_2
cmp al, 3
je opcion_3
cmp al, 4
je opcion_4
cmp al, 5
je opcion_5
opcion_1:
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 09h
lea dx, mensaje
int 21h
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 01h
int 21h
sub al, '0'
mov num1, ax
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 09h
lea dx, mensaje2
int 21h
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 01h
int 21h
sub al, '0'
mov num2, ax
mov ah, 9
lea dx, salto_linea
int 21h
mov ax, num1
add ax, num2
mov operaciones, ax
mov ah, 09h
lea dx, resultado
int 21h
mov ax, operaciones
add ax, '0'
mov dl, al
mov ah, 2
int 21h
jmp salir
opcion_2:
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 09h
lea dx, mensaje
int 21h
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 01h
int 21h
sub al, '0'
mov num1, ax
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 09h
lea dx, mensaje2
int 21h
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 01h
int 21h
sub al, '0'
mov num2, ax
mov ah, 9
lea dx, salto_linea
int 21h
mov ax, num1
sub ax, num2
mov operaciones, ax
mov ah, 09h
lea dx, resultado
int 21h
mov ax, operaciones
add ax, '0'
mov dl, al
mov ah, 2
int 21h
jmp salir
opcion_3:
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 09h
lea dx, mensaje
int 21h
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 01h
int 21h
sub al, '0'
mov num1, ax
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 09h
lea dx, mensaje2
int 21h
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 01h
int 21h
sub al, '0'
mov num2, ax
mov ah, 9
lea dx, salto_linea
int 21h
mov ax, num1
mul num2
mov operaciones, ax
mov ah, 09h
lea dx, resultado
int 21h
mov ax, operaciones
add ax, '0'
mov dl, al
mov ah, 2
int 21h
jmp salir
opcion_4:
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 09h
lea dx, mensaje
int 21h
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 01h
int 21h
sub al, '0'
mov num1, ax
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 09h
lea dx, mensaje2
int 21h
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 01h
int 21h
sub al, '0'
mov num2, ax
mov ah, 9
lea dx, salto_linea
int 21h
mov ax, num1
cwd
idiv num2
mov operaciones, ax
mov ah, 09h
lea dx, resultado
int 21h
mov ax, operaciones
add ax, '0'
mov dl, al
mov ah, 2
int 21h
jmp salir
opcion_5:
mov ah, 9
lea dx, salto_linea
int 21h
mov ah, 9
lea dx, opcion5
int 21h
jmp salir
salir:
mov ax, 4c00h
int 21h
end
.model small y .stack 100h: Son directivas que indican al ensamblador el modelo de
memoria y el tamaño de la pila, respectivamente, que se utilizarán para el programa.
.data: Indica que se va a comenzar a definir una sección de datos del programa.
menu_opciones: Es una cadena de caracteres que contiene el menú de opciones que
se mostrará al usuario.
opcion1, opcion2, opcion3, opcion4 y opcion5: Son cadenas de caracteres que
representan las opciones del menú.
salto_linea: Es una cadena de caracteres que representa un salto de línea para dar
formato al menú.
mensaje y mensaje2: Son cadenas de caracteres que se utilizan para solicitar al
usuario que ingrese los números para realizar las operaciones.
resultado: Es una cadena de caracteres que se utiliza para mostrar el resultado de las
operaciones.
num1, num2 y operaciones: Son variables que se utilizan para almacenar los valores
de los números y el resultado de las operaciones.
.code: Indica que se va a comenzar a definir una sección de código del programa.
mov ax, @data: Mueve la dirección de la sección de datos a AX.
mov ds, ax y mov es, ax: Mueven la dirección de la sección de datos a los registros
DS y ES, respectivamente.
mov ah, 9 y lea dx, menu_opciones y int 21h: Muestra el menú de opciones al usuario.
mov ah, 01h e int 21h: Lee el número ingresado por el usuario.
cmp al, 1/2/3/4/5 y je opcion_1/2/3/4/5: Compara el número ingresado por el usuario
con las opciones del menú y, si se cumple la condición, salta a la sección
correspondiente.
Las secciones opcion_1, opcion_2, opcion_3, opcion_4 y opcion_5 son bloques de
código que realizan las operaciones correspondientes a cada una de las opciones del
menú.
add, sub y mov se utilizan para realizar las operaciones aritméticas y almacenar los
resultados en la variable operaciones.
add ax, '0' y mov dl, al y mov ah, 2 y int 21h: Convierten el resultado de la operación
a una cadena de caracteres y lo muestran al usuario.
jmp salir: Salta al final del programa para salir de él.
CONCLUSIÓN
Este código es un ejemplo de un programa en lenguaje ensamblador para DOS que
muestra un menú de opciones y realiza operaciones matemáticas básicas (suma,
resta, multiplicación y división) en función de la opción seleccionada por el usuario.
Se utiliza la interrupción 21h para imprimir en la pantalla las cadenas de texto y para
leer los caracteres ingresados por el usuario. Las variables de datos se almacenan
en la sección .data del programa y se utilizan para guardar los números ingresados
por el usuario y los resultados de las operaciones.
Cada opción del menú es un subrutina que se ejecuta en función de la opción
seleccionada por el usuario. En cada subrutina, se solicita al usuario que ingrese los
números a operar y luego se realiza la operación correspondiente.
En general, este código demuestra cómo se puede utilizar el lenguaje ensamblador
para programar de manera eficiente y sencilla, ya que el código generado es muy
compacto y rápido. Además, muestra cómo trabajar con interrupciones de sistema
para realizar operaciones de entrada y salida en DOS.