;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
To embed this project on your website, copy the following code and paste it into your website's HTML: