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

Entradas populares de este blog

Lenguaje Maquina