Miren, iba a poner esto en programación general, pero visto los temas que hay ahí, y como que no (crear un string, etc.). Así que este es el apartado que mejor he visto para colgarlo.
Estoy estudiando un libro de ensamblador y, bueno, el programa consiste en copiar de origen a destino una cadena. Compila sin errores, pero a la hora de ejecutarlo me dice Windows que el programa debe cerrarse. Es asm IA-32 (el Intel de toda la vida). Este es el código:
Código asm:
Ver original
.386 .model flat,stdcall option casemap:none .data origen BYTE "Esta es la cadena de origen",0 destino BYTE SIZEOF origen DUP(0) .code start: mov esi,0 ; registro í*ndice mov ecx,SIZEOF origen ; contador del ciclo L1: mov al,origen[esi] ; obtiene un carácter del origen mov destino[esi],al ; lo almacena en el destino inc esi ; se mueve al siguiente carácter loop L1 ; repite el proceso para toda la cadena END start
He probado a debuggearlo con OllyDbg y todo está bien, llega a la n de "origen", que es la última letra del string, pero parece ser que el carácter nulo no lo copia. Se termina el loop, ejecuto la siguiente instrucción y me da acceso de violación escribiendo datos. He aquí la captura:
Cita:
Lo he compilado con el compilador que lleva Qeditor.http://www.subirimagenes.com/otros-captura1-8802120.html
Estoy aprendiendo... y no sé qué puede estar ocurriendo.
Salu2 y gracias :)