Imprimir en pantalla el resultado de la suma de 2 números de 2 dígitos
michellcrh:
Hola, espero me pueda ayudar
Tengo este código que suma 2 numeros de 2 dígitos en ensamblador NASM, pero quisiera mostrar el resultado en pantalla mediante una función CALL, el problema es que no entiendo como realizarlo ya que el resultado de la suma està en el registro eax y està en hexadecimal, tengo mi duda de si tengo que realizar una conversion a decimal de ese número o algua cosa así.
Código
section .data
msg_1: db "Introduce un primer numero :", 10
lnmsg1 : equ $-msg_1
msg_2: db "Escribe un segundo numero :", 10
lnmsg2 : equ $-msg_2
msg_3: db "El resultado de la suma es:",10
lnmsg3 : equ $-msg_3
diez db 10
section .bss
num1 resb 10
num2 resb 10
resultado resb 10
aux resb 10
section .text
global _start
_start:
mov ecx, msg_1
mov edx, lnmsg1
mov ebx, 1
mov eax, 4
int 0x80
mov ecx, num1
mov edx, 10
mov ebx, 1
mov eax, 3
int 0x80
mov ecx, msg_2
mov edx, lnmsg2
mov ebx, 1
mov eax, 4
int 0x80
mov ecx, num2
mov edx, 10
mov ebx, 1
mov eax, 3
int 0x80
mov esi, num1
call atoi
pop eax
mov esi, num2
call atoi
pop ebx
add eax, ebx ;El resultado de la suma se guarda en eax
call imprimir
jmp end
atoi:
push ebp
mov ebp, esp
xor eax, eax
.top:
movzx ecx, byte [esi] ; obtener un caracter
inc esi ; leer la siguiente dirección
cmp ecx, '0' ; digito valido?
jb .done
cmp ecx, '9'
ja .done
sub ecx, '0' ; "convertir" caracter a numero
imul eax, eax, 10 ; multiplicar el resultado obtenido por 10
add eax, ecx ; sumatoria
jmp .top ; until done
.done:
pop ebp
ret
imprimir:
push ebp
mov ebp, esp
mov [resultado], eax
mov eax, 4
mov ebx, 1
mov ecx, msg_3
mov edx, lnmsg3
int 0x80
mov eax, 4
mov ebx, 1
mov ecx, resultado
mov edx, 10
int 0x80
pop ebp
ret
end:
mov eax, 1
xor ebx, ebx
int 80h
; algoritmo de conversion
; val = 0
; numero = "289"
; val = val + ('9' - 48) * 10⁰
; val = 9 + ('8' - 48) * 10¹
; val = 89 + ('2' - 48) * 10²
; imul dest, op1, op2
fary:
Igual que conviertes la cadena que lees a número, luego tienes que convertir el resultado de la suma a cadena antes de imprimirlo.
michellcrh:
DE acuerdo, o sea que podrìa usar mi còdigo que tengo para convertir de caracter a número pero sumandole el '0' en lugar de restarlo?
Y para imprimirlo habia visto que tenía que separarlo en caracteres para mostrar uno por uno, eso es cierto?
fary:
Es sumandole '0', sí. Pero en lugar de multiplicar tienes que dividir. Lo de imprimirlo no tiene porque ser caracter a caracter.
michellcrh:
Una duda que me surgió hace un momento, es que mi resultado de la suma está en eax y la división se haria en ax no? o sea ax/10, como hago para que mi resultado de la suma estè solo en ax?
Navegación
[#] Página Siguiente