Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - NuevoUsuario

#1
ASM / Nasm - tablas de multiplicar
8 Octubre 2021, 18:47 PM
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

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