; Programa para pedir 2 numeros de una cifra y realizar suma, resta, multiplicacion y division

section .data
    msg1        db "Ingrese el primer numero: "
    long1       equ $ - msg1

    msg2        db "Ingrese el segundo numero: "
    long2       equ $ - msg2

    msg_suma    db "Suma: "
    long_suma   equ $ - msg_suma

    msg_resta   db "Resta: "
    long_resta  equ $ - msg_resta

    msg_mult    db "Multiplicacion: "
    long_mult   equ $ - msg_mult

    msg_div     db "Division: "
    long_div    equ $ - msg_div

    salto       db 10

section .bss
    entrada     resb 2
    num1        resb 1
    num2        resb 1
    salida      resb 1

section .text
    global _start

_start:
    ; 1. Pedir primer numero
    mov eax, 4
    mov ebx, 1
    mov ecx, msg1
    mov edx, long1
    int 0x80

    ; 2. Leer primer numero
    mov eax, 3
    mov ebx, 0
    mov ecx, entrada
    mov edx, 2
    int 0x80

    ; Convertir primer numero a entero
    mov al, [entrada]
    sub al, '0'
    mov [num1], al

    ; 3. Pedir segundo numero
    mov eax, 4
    mov ebx, 1
    mov ecx, msg2
    mov edx, long2
    int 0x80

    ; 4. Leer segundo numero
    mov eax, 3
    mov ebx, 0
    mov ecx, entrada
    mov edx, 2
    int 0x80

    ; Convertir segundo numero a entero
    mov al, [entrada]
    sub al, '0'
    mov [num2], al

    ; 5. OPERACION SUMA
    mov al, [num1]
    add al, [num2]
    add al, '0'
    mov [salida], al

    ; Imprimir texto suma
    mov eax, 4
    mov ebx, 1
    mov ecx, msg_suma
    mov edx, long_suma
    int 0x80

    ; Imprimir resultado suma
    mov eax, 4
    mov ebx, 1
    mov ecx, salida
    mov edx, 1
    int 0x80

    ; Imprimir salto de linea
    mov eax, 4
    mov ebx, 1
    mov ecx, salto
    mov edx, 1
    int 0x80

    ; 6. OPERACION RESTA
    mov al, [num1]
    sub al, [num2]
    add al, '0'
    mov [salida], al

    ; Imprimir texto resta
    mov eax, 4
    mov ebx, 1
    mov ecx, msg_resta
    mov edx, long_resta
    int 0x80

    ; Imprimir resultado resta
    mov eax, 4
    mov ebx, 1
    mov ecx, salida
    mov edx, 1
    int 0x80

    ; Imprimir salto de linea
    mov eax, 4
    mov ebx, 1
    mov ecx, salto
    mov edx, 1
    int 0x80

    ; 7. OPERACION MULTIPLICACION
    mov al, [num1]
    mov bl, [num2]
    mul bl
    add al, '0'
    mov [salida], al

    ; Imprimir texto multiplicacion
    mov eax, 4
    mov ebx, 1
    mov ecx, msg_mult
    mov edx, long_mult
    int 0x80

    ; Imprimir resultado multiplicacion
    mov eax, 4
    mov ebx, 1
    mov ecx, salida
    mov edx, 1
    int 0x80

    ; Imprimir salto de linea
    mov eax, 4
    mov ebx, 1
    mov ecx, salto
    mov edx, 1
    int 0x80

    ; 8. OPERACION DIVISION
    mov al, [num1]
    mov ah, 0
    mov bl, [num2]
    div bl
    add al, '0'
    mov [salida], al

    ; Imprimir texto division
    mov eax, 4
    mov ebx, 1
    mov ecx, msg_div
    mov edx, long_div
    int 0x80

    ; Imprimir resultado division
    mov eax, 4
    mov ebx, 1
    mov ecx, salida
    mov edx, 1
    int 0x80

    ; Imprimir salto de linea
    mov eax, 4
    mov ebx, 1
    mov ecx, salto
    mov edx, 1
    int 0x80

    ; 9. Finalizar programa
    mov eax, 1
    mov ebx, 0
    int 0x80