Imprimir en pantalla el resultado de la suma de 2 números de 2 dígitos

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente