Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/02/2014, 08:20
Pablo465
 
Fecha de Ingreso: febrero-2014
Mensajes: 2
Antigüedad: 10 años, 2 meses
Puntos: 0
Pregunta [ASM] Error copiando cadena

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
  1. .386
  2. .model flat,stdcall
  3. option casemap:none
  4.  
  5. .data
  6. origen BYTE  "Esta es la cadena de origen",0
  7. destino BYTE  SIZEOF origen DUP(0)
  8.  
  9. .code
  10.  
  11. start:
  12. mov  esi,0 ; registro í*ndice
  13. mov  ecx,SIZEOF origen ; contador del ciclo
  14.  
  15. L1:
  16.     mov al,origen[esi] ; obtiene un carácter del origen
  17.     mov destino[esi],al ; lo almacena en el destino
  18.     inc esi ; se mueve al siguiente carácter
  19.     loop L1 ; repite el proceso para toda la cadena
  20.  
  21. 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 :)