Tablas de multiplicar


08 de Octubre del 2021

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
3220
4300
5
06
07
8200
9260
:340

 

Podrían ayudarme a resolverlo? Gracias. Este es el código

; 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 "
lenmsg1 equ $-msg1

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