;Celis Magaña Amaris Pricila
;Galaviz Medina Aldebarán Antonino

section .data
    prompt db "Ingresa el primer número: "
    prompt_len equ $-prompt

    prompt2 db 10,"Ingresa el segundo número: "
    prompt_len2 equ $-prompt2

    opcion1 db 10,10,"Ingresa 1 para realizar una suma"
    opcion1_len equ $-opcion1

    opcion2 db 10,"Ingresa 2 para realizar una resta"
    opcion2_len equ $-opcion2

    opcion3 db 10,"Ingresa 3 para Salir"
    opcion3_len equ $-opcion3

    error db 10,10,"Opción inválida"
    error_len equ $-error

    adios db 10,10,"Adiós", 10
    adios_len equ $-adios

    textsum db 10,10,"La suma es: "
    textsum_len equ $-textsum

    textrest db 10,10,"La resta es: "
    textrest_len equ $-textrest

section .bss
    num resb 20
    num2 resb 20
    opc resb 2
    resultado resb 20
    
    val_num1 resb 8
    val_num2 resb 8
    puntero resb 8
    cantidad resb 8

section .text
    global _start

_start:
    
    mov rax, 1
    mov rdi, 1
    mov rsi, prompt
    mov rdx, prompt_len
    syscall

    mov rax, 0
    mov [val_num1], rax
    mov rbx, 10

leer_digitos_1:
    
    mov rax, 0
    mov rdi, 0
    mov rsi, num
    mov rdx, 1
    syscall

    mov rcx, 0
    mov cl, [num]
    
    cmp cl, 10
    je fin_leer_1
    cmp cl, 0
    je fin_leer_1

    mov rax, [val_num1]
    mul rbx
    mov [val_num1], rax

    sub cl, "0"
    add [val_num1], rcx

    jmp leer_digitos_1
fin_leer_1:


    mov rax, 1
    mov rdi, 1
    mov rsi, prompt2
    mov rdx, prompt_len2
    syscall

    mov rax, 0
    mov [val_num2], rax
    mov rbx, 10

leer_digitos_2:
    
    mov rax, 0
    mov rdi, 0
    mov rsi, num2
    mov rdx, 1
    syscall

    mov rcx, 0
    mov cl, [num2]
    
    cmp cl, 10
    je fin_leer_2
    cmp cl, 0
    je fin_leer_2

    mov rax, [val_num2]
    mul rbx
    mov [val_num2], rax

    sub cl, "0"
    add [val_num2], rcx

    jmp leer_digitos_2
fin_leer_2:

menu:
    mov rax, 1
    mov rdi, 1
    mov rsi, opcion1
    mov rdx, opcion1_len
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, opcion2
    mov rdx, opcion2_len
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, opcion3
    mov rdx, opcion3_len
    syscall

    mov rax, 0
    mov rdi, 0
    mov rsi, opc
    mov rdx, 2
    syscall
    
    mov al, [opc]
    sub al, "0"

comparar:
    cmp al, 1
    je suma
    
    cmp al, 2
    je resta

    cmp al, 3
    je despedida

    jmp menso

suma:
    mov rax, 1
    mov rdi, 1
    mov rsi, textsum
    mov rdx, textsum_len
    syscall

    mov rax, [val_num1]
    mov rcx, [val_num2]
    add rax, rcx
    jmp imprimir_resultado

resta:
    mov rax, 1
    mov rdi, 1
    mov rsi, textrest
    mov rdx, textrest_len
    syscall

    mov rax, [val_num1]
    mov rcx, [val_num2]
    sub rax, rcx
    jmp imprimir_resultado

imprimir_resultado:
    mov rcx, 20
    mov [puntero], rcx

    mov rbx, 10

dividir_numero_final:
    xor rdx, rdx
    div rbx

    add rdx, "0"

    mov rcx, [puntero]
    sub rcx, 1
    mov [puntero], rcx

    mov rsi, resultado
    add rsi, rcx
    mov [rsi], dl

    cmp rax, 0
    je fin_dividir_final
    jmp dividir_numero_final

fin_dividir_final:
    mov rcx, 20
    sub rcx, [puntero]
    mov [cantidad], rcx

    mov rax, 1
    mov rdi, 1
    mov rsi, resultado
    add rsi, [puntero]
    mov rdx, [cantidad]
    syscall

    jmp salir

menso:
    mov rax, 1
    mov rdi, 1
    mov rsi, error
    mov rdx, error_len
    syscall
    jmp despedida

despedida:
    mov rax, 1
    mov rdi, 1
    mov rsi, adios
    mov rdx, adios_len
    syscall
    jmp salir

salir:
    mov rax, 60
    mov rdi, 0
    syscall

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: