Hola Gente del foro. Estoy aprendiendo Nasm. He escrito un programa que muestra el resultado de las tablas de multiplicar.
Todo bien si pido los resultados de las tablas del 1 al 9, obteniendo la salida por ejemplo en la tabla del 2:
02
04
06..
..12
14
16..
..20
Pero al pedir los resultados de la tabla del 10
no me muestra bien los números, sino que la salida es:
elige una del 2 al 10 10
01
02
3\220
4\300
5
06
07
8\200
9\260
:\340
Podrían ayudarme a resolverlo? Gracias. Este es el código
Todo bien si pido los resultados de las tablas del 1 al 9, obteniendo la salida por ejemplo en la tabla del 2:
02
04
06..
..12
14
16..
..20
Pero al pedir los resultados de la tabla del 10
no me muestra bien los números, sino que la salida es:
elige una del 2 al 10 10
01
02
3\220
4\300
5
06
07
8\200
9\260
:\340
Podrían ayudarme a resolverlo? Gracias. Este es el código
Código (asm) [Seleccionar]
; pregunta por las tablas de multiplicar
%macro print 2
mov eax, 4
mov ebx, 1
mov ecx, %1
mov edx, %2
int 0x80
%endmacro
%macro read 2
mov eax, 3
mov ebx, 0
mov ecx, %1
mov edx, %2
int 0x80
%endmacro
section .data
msg db "elige una del 2 al 10 "
lenmsg equ $-msg
ln db 0xa, 0xd
lenln equ $-ln
section .bss
tab resb 2
prod resb 3
section .text
global _start
_start:
print msg, lenmsg
push ecx
read tab, 2
pop ecx
mov edi, 1
tabla:
cmp edi, 10
jg exit
mov ax, [tab]
sub ax, '0'
mul edi
cmp ax, 10
jge greater
add ax, '0'
mov [prod], ax
print prod, 2
print ln, lenln
cont:
inc edi
jmp tabla
greater:
clc
aam ; adjust ascii after multiplication
pushf
or ah, 30h
or al, 30h
popf
mov [prod+0], ah
mov [prod+1], al
print prod, 2
print ln, lenln
jmp cont
exit:
mov eax, 1
mov ebx, 0
int 0x80