Autor
|
Tema: Como puedo hacer que este código ensamblador funcione? (Leído 13,172 veces)
|
alienxz77b
Desconectado
Mensajes: 18
|
Hola , primero gracias por tomarse el tiempo para leer esta pregunta Tengo este código ensamblador de NASM que realice para probar una teoría de condicionales el chiste es que no puedo hacerlo correr debido a un problema que me sale: %include "io.inc" %macro print 1 push eax push ecx mov eax, %1 mov ecx, -1 while: add ecx, 1 cmp byte [eax+ecx], 0 jmp PRINT_CHAR [eax+ecx] jne while pop ecx pop eax %endmacro %macro strcpy 2 push eax push ecx push edx mov eax, %1 mov edx, %2 mov ecx, -1 .while: add ecx, 1 cmp byte [eax+ecx], 0 mov [edx+ecx], byte [eax+1]; al parecer en esta linea de codigo esta el error :-[ jne .while je print edx pop edx pop ecx pop eax %endmacro ;segment data section .data msg db "Hola", 13, 0 msg2 db " ", 0 section .text global CMAIN CMAIN: xor eax, eax call strcpy msg, msg2 ret 0
Error: C:\Users\Windows\AppData\Local\Temp\SASM\program.asm:40: error: invalid combination of opcode and operands gcc.exe: error: C:\Users\Windows\AppData\Local\Temp\SASM\program.o: No such file or directoryNo se que hacer para solucionarlo, programo en windows bajo el IDE de SASM Agradezco toda la ayuda Edit: En la linea 25 era: mov [edx+ecx], byte [eax+ecx]; al parecer en esta linea de codigo esta el error :-[
|
|
« Última modificación: 20 Octubre 2021, 06:29 am por alienxz77b »
|
En línea
|
|
|
|
|
alienxz77b
Desconectado
Mensajes: 18
|
Hola gracias por responder , al parecer sigue tirando el mismo error
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
Si, el mov de la linea 25 no es factible pero te recomiendo revisar y depurar todo, no encuentro el sentido a usar eax + 1 en cada iteracion (eso en este caso copia el segundo caracter de una cadena siempre). Esto es equivalente a lo que intentabas: mov bl, [eax+1] mov [edx+ecx], bl
PD. invertiste el orden de los parametros de strcpy, el primero deberia ser el destino y el segundo la fuente.
|
|
|
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
|
|
|
alienxz77b
Desconectado
Mensajes: 18
|
Ya arregle el código : %include "io.inc" %macro print 1 push eax push ecx mov eax, %1 mov ecx, -1 while: add ecx, 1 cmp byte [eax+ecx], 0 jmp PRINT_CHAR [eax+ecx] jne while pop ecx pop eax %endmacro %macro strcpy 2 push eax push ecx push edx push SI mov edx, %1 mov eax, %2 mov ecx, -1 .while: add ecx, 1 cmp byte [eax+ecx], 0 mov SI, [eax+ecx] mov [edx+ecx], SI jne .while pop SI pop edx pop ecx pop eax %endmacro ;segment data section .data msg db "Hola", 13, 0 section .bss msg2 resb 100 section .text global CMAIN CMAIN: xor eax, eax strcpy msg2, msg print msg2 ret 0
Gracias por su ayuda a todos los que respondieron Nos vemos
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
Bien, ahora tiene logica la copia pero sigue teniendo exactamente el mismo bug que en el otro hilo al escribir con print y es opuesto al standard de C el strcpy.
|
|
|
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
|
|
|
alienxz77b
Desconectado
Mensajes: 18
|
Según Wikipedia: https://es.wikipedia.org/wiki/Strcpy La sintaxis de strcopy esta bien Codigo sin bugs o algo parecido (puede que tenga errores ) %include "io.inc" %macro print 1 push eax push ecx mov eax, %1 mov ecx, -1 while: add ecx, 1 cmp byte [eax+ecx], 0 jmp PRINT_CHAR [eax+ecx] jne while pop ecx pop eax %endmacro %macro strcpy 2 push eax push ecx push edx push SI mov edx, %1 mov eax, %2 mov ecx, -1 .while: add ecx, 1 cmp byte [eax+ecx], 0 mov SI, [eax+ecx] mov [edx+ecx], SI jne .while pop SI pop edx pop ecx pop eax %endmacro ;segment data section .data msg db "Hola", 0 section .bss msg2 resb 100 section .text global CMAIN CMAIN: xor eax, eax strcpy msg2, msg print msg2 ret 0
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
Mala mia, lo cambiaste y ahora si el primer parametro es el destino y el segundo la fuente, el bug del print sigue ahi, escribe el 0 terminador.
|
|
|
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
|
|
|
alienxz77b
Desconectado
Mensajes: 18
|
De hecho solo se pueden imprimir cadenas usando el terminador nulo como en C
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.958
Israel nunca torturó niños, ni lo volverá a hacer.
|
No, una cosa es ENCONTRARLO para frenar y otra muy diferente escribir el 0, eso hace tu codigo y ninguna funcion para escribir una cadena en pantalla lo hace ¿Para que le sacaste el 13 a msg? ¿Para que no pasara esto? ¿Crees que si llamo a printf con "Hola\r" como parametro pasa eso acaso? Necesitaria llamar a putc con el 0 para que lo escribiera y pasara lo mismo que con tu macro print. PD. Si se puede. char nnts[] = { 'N', 'E', 'W', 'B', 'I', 'E', 0xCC, 0xCC };
|
|
« Última modificación: 25 Octubre 2021, 09:54 am por Eternal Idol »
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
No puedo hacer que funcione correctamente
Java
|
John Locke
|
5
|
4,385
|
25 Abril 2011, 02:32 am
por 1mpuls0
|
|
|
ayuda con este código en ensamblador
ASM
|
jim12328
|
6
|
4,587
|
12 Mayo 2014, 22:42 pm
por x64core
|
|
|
Como puedo ver el codigo de este archivo
Hacking
|
McCript
|
1
|
3,597
|
21 Junio 2016, 02:44 am
por engel lex
|
|
|
[Pregunta]: ¿Cómo puedo hacer qué esto funcione?
Desarrollo Web
|
Leguim
|
2
|
2,942
|
21 Mayo 2020, 11:53 am
por @XSStringManolo
|
|
|
Como puedo revertir este codigo
.NET (C#, VB.NET, ASP)
|
SrTrp
|
1
|
2,665
|
1 Julio 2020, 09:51 am
por FFernandez
|
|