elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Tablas de multiplicar en nasm
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tablas de multiplicar en nasm  (Leído 4,256 veces)
NuevoUsuario

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Tablas de multiplicar en nasm
« en: 22 Enero 2022, 21:57 pm »

Hola amigos, esoty dando mis primeros pasos en Nasm.
Hago un programa para preguntar las tablas de multiplicar. Por ahora solo trato de imprimirlas, y es que mi problema es que el bucle no continúa, se detiene luego de imprimir el primer resultado. Si alguien puede ayudarme le agradezco .

Código
  1.    ;; pregunta por las tablas de multiplicar del 2 al 10
  2.  
  3. %macro read 2
  4.    mov eax, 3
  5.    mov ebx, 0
  6.    mov ecx, %1
  7.    mov edx, %2
  8.    int 0x80
  9. %endmacro
  10.  
  11. %macro print 2
  12.    mov eax, 4
  13.    mov ebx, 1
  14.    mov ecx, %1
  15.    mov edx, %2
  16.    int 0x80
  17. %endmacro
  18.  
  19. section .data
  20.    msg db "Elige una tabla de Multiplicar del 2 al 10", 0xa
  21.    lenmsg equ $-msg
  22.  
  23.    nwln db 0xa, 0xd
  24.    lennwln equ $-nwln
  25.  
  26. section .bss
  27.    prod resb 3
  28.    op resb 1
  29.  
  30. section .text
  31. global _start
  32.  
  33. _start:
  34.    print msg, lenmsg
  35.    read op, 2
  36.    mov ecx, 10
  37.    mov ax, 1
  38.  
  39. multiplica:    
  40.    mov bx, [op]
  41.    sub bx, '0'
  42.    push ax
  43.    mul bx
  44.    cmp ax, 90
  45.    jg m90
  46.    aam         ; separa lo que hay en al. ah=decena al=unidad
  47.    add al, 48
  48.    add ah, 48
  49.    mov [prod+0], byte '0'
  50.    mov [prod+1], ah
  51.    mov [prod+2], al
  52.    push ecx
  53.    print prod, 3
  54.    print nwln, lennwln
  55.    pop ecx
  56.    pop ax
  57.    inc ax
  58.    cmp ecx, 1
  59.    je exit
  60.    loop multiplica
  61.  
  62. m90:
  63.    aam                 ; separo al. ah=10 al=0
  64.    add al, 48
  65.    mov [prod+2], al
  66.    mov al, ah          ; muevo ah=10 a al
  67.    aam                 ; separo lo que hay en al. ah=1, al=0
  68.    add al, 48
  69.    add ah, 48
  70.    mov [prod+1], al    ; muevo la decena
  71.    mov [prod+0], ah    ; muevo la centena
  72.    print prod, 3
  73.  
  74. exit:  
  75.    mov eax, 1
  76.    mov ebx, 0
  77.    int 0x80


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Tablas de multiplicar en nasm
« Respuesta #1 en: 22 Enero 2022, 23:51 pm »

Código
  1. op resb 1

Declaras una variable de 1 byte pero:
Código
  1. read op, 2
  2. ...
  3. mov bx, [op]

Pero lees y usas 2 bytes despues; eso esta mal de base.

¿Como sabes si se leyo un caracter + salto de linea o dos caracteres?

Aca ya te explique el problema que estas teniendo:
https://foro.elhacker.net/asm/nasm_tablas_de_multiplicar-t512336.0.html

Si escribo 3 y enter op valdra 0xA33 y si escribo 10 y enter op valdra 0x3031. Le resto 0x30 y multiplico a 1 por ese valor, 0xA03 y 0x3001 son mayores a 0x90. En ambos casos el codigo salta a m90 y continua la ejecucion hasta salir del programa.

Usando un depurador linea por linea lo verias mucho mas claro todo.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
NuevoUsuario

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Tablas de multiplicar en nasm
« Respuesta #2 en: 24 Enero 2022, 18:55 pm »

Hola capo! Mirá cómo te acordás! sí todavía estoy con ese problema porque tuve que dejarlo por cuestiones personales y ahora lo retomé. Agradezco mucho tu rta y tu tiempo. Prometo no volver a preguntar lo mismo. Gracias.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Tablas de multiplicar en nasm
« Respuesta #3 en: 24 Enero 2022, 20:52 pm »

De nadas y suerte con eso  ::)
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python]Tablas de Multiplicar
Scripting
CATBro 5 14,877 Último mensaje 17 Enero 2011, 09:01 am
por fallout20xx
Tablas de multiplicar con Hilos.
Java
Didy 2 5,740 Último mensaje 12 Mayo 2013, 23:14 pm
por Didy
Tablas de multiplicar php « 1 2 »
PHP
Giankaa 11 6,178 Último mensaje 22 Agosto 2015, 16:59 pm
por #!drvy
C++ Tablas de multiplicar
Programación C/C++
H4ckw1X 4 10,786 Último mensaje 18 Marzo 2017, 19:25 pm
por Meta
Nasm - tablas de multiplicar
ASM
NuevoUsuario 7 5,939 Último mensaje 12 Octubre 2021, 21:57 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines