Título: Nasm - tablas de multiplicar Publicado por: NuevoUsuario en 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
Título: Re: Nasm - tablas de multiplicar Publicado por: Eternal Idol en 9 Octubre 2021, 11:32 am Si escribo 10 en tab habra 2 bytes:
0x31 y 0x30 Código
Despues de restarle a AX '0' (0x30) tenes: 0x01 y 0x30 Título: Re: Nasm - tablas de multiplicar Publicado por: NuevoUsuario en 9 Octubre 2021, 12:43 pm Ok, entiendo. Gracias por tu tiempo. Buena suerte! \v/
Título: Re: Nasm - tablas de multiplicar Publicado por: Eternal Idol en 9 Octubre 2021, 15:31 pm De nada.
Título: Re: Nasm - tablas de multiplicar Publicado por: NuevoUsuario en 12 Octubre 2021, 01:43 am Hola a todos. Continúo con mi programa de tablas de multiplicar. He agregado lo siguiente: Le pregunto al usuario por la tabla de multiplicar que elija.
Ahora el problema es que aunque responda correctamente me imprime el cartel de error. Espero que puedan ayudarme, gracias. La salida: Elige una tabla de multiplicar del 2 al 10 2 2 x 01 = 2 Ok. 2 x 02 = 4 Error. 2 x 03 = 6 Error. 2 x 04 = 8 Error. 2 x 05 = El código: Código
Título: Re: Nasm - tablas de multiplicar Publicado por: Eternal Idol en 12 Octubre 2021, 12:38 pm Estas leyendo el salto de linea y usandolo en los calculos.
Primera iteracion del bucle, en tab tenemos: 0x32 y 0x0A Código
AX es primero 0x0A32 Al restarle '0' es 0x0A02 multiplicar por 1 no cambia nada Asi que empujas en la pila 0x0A02 Segunda iteracion del bucle, mismo valor en tab: AX es primero 0x0A32 Al restarle '0' es 0x0A02 Al mutiplicarlo por 2 AX es 0x1404 Asi que empujas en la pila 0x1404 Tenes exactamente el mismo error de logica al comparar, si aprieto 4 y enter, en res habra esto: 0x34 y 0x0A Código
De casualidad te funciona en la primera iteracion: CX es primero 0x0A32 Al restarle '0' es 0x0A02 Coincide con el resultado errado que empujaste en la pila. En la segunda iteracion: CX es primero 0x0A34 Al restarle '0' es 0x0A04 0x1404 no es igual a 0x0A04. Llegados a este punto es imperativo que logres depurar tu programa linea por linea, entiendo que estas usando Linux (yo uso Windows asi que adapte tu codigo a MASM, con todo lo que eso significa partiendo de que los saltos de linea son \r\n y no \n solo como en Linux y las llamadas a la interrupcion 80h tienen que se reemplazadas por las APIs de Windows) asi que busca algun tutorial sobre gdb. Título: Re: Nasm - tablas de multiplicar Publicado por: NuevoUsuario en 12 Octubre 2021, 19:32 pm Eternal Idol, te agradezco sobremanera. Claro entiendo jaja el primero es acertado de casualidad jajaj.
He usado un poco gdb. Nunca lo usé en C, pero esto es un poco más complejo jaja. Mirá si bien programé bastante en C, varias aplicaciones y juegos; al poco andar con assembler noté eso, que mi lógica no era tan buena como yo creía. Y te voy a decir por qué estoy estudiando ensamblador ahora. Comencé a desarrollar el juego sudoku en C, con las llibrerías ncurses, y me trabé en una parte asique dije: voy a aprender ensamblador para mejorar y luego retomar el juego. Y aquí estoy, descubriendo mis falencias en lógica. Con esta ayuda que me diste, además, veo como pensar en assembler. Me sirvió mucho. Voy a estudiar más así evito preguntar a cada rato. Muchísimas gracias por compartir tu conocimiento y dedicar tu tiempo. Un abrazo. Voy a leer detenidamente tus comentarios y mirar el código. Genial gracias! Título: Re: Nasm - tablas de multiplicar Publicado por: Eternal Idol en 12 Octubre 2021, 21:57 pm De nada y suerte con eso ::)
|