Emu
.model
.stack 100h
.data
Num1 DB 0
Num2 DB 0
Num3 DB 0
Cociente DB 0
Residuo DB 0
Mensaje3 DB 10,13, ' Cociente: $' ,0DH, 0AH
Mensaje4 DB 10,13, ' Residuo: $' ,0DH, 0AH
msj1 db 10, 13, "Ingresa el primer numero: $"
msj2 db 10, 13, "Ingresa el segundo numero: $"
msj3 db 10, 13, "El resultado es: $"
msj4 db 10, 13, "", "$"
mensaje_salida db "Gracias por usar este programa. Hasta luego!", "$"
mensaje_menu db 10, 13, "1.- SUMA", 10, 13, "2.- RESTA", 10, 13, "3.- MULTIPLICACION", 10, 13, "4.- DIVISION", 10, 13, "5.- SALIR", 10, 13, "$"
mensaje_opcion db 13, 10, "Selecciona una opcion: $"
msj7 db " ", 0DH, 0AH, "$"
msj8 db 10, 13, "OPCION INVALIDA", "$"
newline db 0DH, 0AH, "$"
.code
programa:
mov ax, @data
mov ds, ax
mov ah, 09h
lea dx, mensaje_menu
int 21h
mov ah, 09h
lea dx, mensaje_opcion
int 21h
menu:
mov ah, 01h
int 21h
sub al, '0'
cmp al, 1
je suma
cmp al, 2
je resta
cmp al, 3
je mult
cmp al, 4
je divi
cmp al, 5
je salir
mov ah, 09h
lea dx, msj8
int 21h
mov ah, 09h
lea dx, msj7
int 21h
mov ah, 09h
lea dx, mensaje_menu
int 21h
mov ah, 09h
lea dx, mensaje_opcion
int 21h
jmp menu
suma:
; Solicitar primer numero
mov dx, offset msj1
call imprimir
mov ah, 01h
int 21h
sub al, 30h ; Convertir de ASCII a valor numerico
mov bl, al ; Guardar el primer numero
;Salto de linea
mov dx, offset msj4
call imprimir
; Solicitar segundo numero
mov dx, offset msj2
call imprimir
mov ah, 01h
int 21h
sub al, 30h ; Convertir de ASCII a valor numerico
add bl, al ; Sumar el segundo numero al primero (bl)
; Mostrar la suma
mov dx, offset msj4
call imprimir
mov dx, offset msj3
call imprimir
mov dl, bl ; El resultado esta en bl
add dl, 30h ; Convertir de valor numerico a ASCII
mov ah, 02h
int 21h
mov dx, offset newline
call imprimir
mov ah, 09h
lea dx, mensaje_opcion
int 21h
jmp menu
resta:
; Solicitar primer numero
mov dx, offset msj1
call imprimir
mov ah, 01h
int 21h
sub al, 30h ; Convertir de ASCII a valor numerico
mov bl, al ; Guardar el primer numero
;Salto de linea
mov dx, offset msj4
call imprimir
; Solicitar segundo numero
mov dx, offset msj2
call imprimir
mov ah, 01h
int 21h
sub al, 30h ; Convertir de ASCII a valor numerico
sub bl, al ; Sumar el segundo numero al primero (bl)
; Mostrar la resta
mov dx, offset msj4
call imprimir
mov dx, offset msj3
call imprimir
mov dl, bl ; El resultado esta en bl
add dl, 30h ; Convertir de valor numerico a ASCII
mov ah, 02h
int 21h
mov dx, offset newline
call imprimir
jmp menu
mult:
MOV AH, 9
MOV DX, offset msj1
CALL interrupcion
MOV Num1, AL
MOV AH, 9
MOV DX, offset msj2
CALL interrupcion
MOV Num2, AL
MOV AL, Num1
mul Num2
ADD AL, 30H
MOV Num3, AL
MOV AH, 9
MOV DX, offset msj3
INT 21H
MOV AH, 2
MOV DL, Num3
INT 21H
jmp menu
divi:
MOV AH, 9
MOV DX, OFFSET msj1
CALL interrupcion
MOV Num1, AL
MOV AH, 9
MOV DX, OFFSET msj2
CALL interrupcion
MOV Num2, AL
MOV AL, Num1
SUB AL, 30H
MOV BL, AL
MOV AL, Num2
SUB AL, 30H
MOV AH, 0
DIV BL
MOV Cociente, AL
MOV Residuo, AH
MOV AH, 9
MOV DX, OFFSET Mensaje3
INT 21H
MOV AH, 2
MOV DL, Cociente
ADD DL, 30H
INT 21H
MOV AH, 9
MOV DX, OFFSET Mensaje4
INT 21H
MOV AH, 2
MOV DL, Residuo
ADD DL, 30H
INT 21H
jmp menu
salir:
mov dx, offset msj7
call imprimir
mov ah, 09h
lea dx, mensaje_salida
int 21h
mov dx, offset msj7
call imprimir
mov ah, 4ch
int 21h
imprimir:
mov ah, 09h
int 21h
ret
interrupcion:
INT 21H
MOV AH, 1
INT 21H
SUB AL, 30H
RET
end programa
Comentarios
Publicar un comentario