Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[ASM] Error copiando cadena

Estas en el tema de [ASM] Error copiando cadena en el foro de C/C++ en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 06/02/2014, 08:20
 
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 :)
  #2 (permalink)  
Antiguo 06/02/2014, 08:32
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: [ASM] Error copiando cadena

Desconozco la respuesta, pero te lanzo una pregunta:

¿Como hace el loop para saber que tiene que terminar?
Si es un loop que no termina, copiaras y copiaras en la memoria incluso en zonas que no te corresponden ¿no?
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 06/02/2014, 08:40
 
Fecha de Ingreso: febrero-2014
Mensajes: 2
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: [ASM] Error copiando cadena

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
Desconozco la respuesta, pero te lanzo una pregunta:

¿Como hace el loop para saber que tiene que terminar?
Si es un loop que no termina, copiaras y copiaras en la memoria incluso en zonas que no te corresponden ¿no?
La instrucción LOOP va decrementando el registro ECX en 1, y comparándolo con 0. Si es 0, no coge el salto de LOOP y termina.

Última edición por Pablo465; 06/02/2014 a las 08:54

Etiquetas: cadena, int, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:08.