Buenos días FDW.
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: http://www.subirimagenes.com/otros-captura1-8802120.html
Lo he compilado con el compilador que lleva Qeditor.
Estoy aprendiendo... y no sé qué puede estar ocurriendo.
Salu2 y gracias :)