elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  explicacion loop
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: explicacion loop  (Leído 6,534 veces)
omar_cdg

Desconectado Desconectado

Mensajes: 47



Ver Perfil
explicacion loop
« en: 9 Septiembre 2015, 02:03 am »

Hola amigos, estoy dando mis primeros pasos en asembler y quisiera que alguien me explique por que la salida del siguiente codigo es 40, y no 56. La verdad que no puedo encontrar la razon. Gracias

Código
  1. .data
  2. i: .long 24
  3. n: .long 32
  4.  
  5. .bss
  6. .comm r,4,4
  7.  
  8. .text
  9. .global main
  10. main:
  11. movl i, %eax
  12. movl $1, %ecx
  13. loop:                  
  14.      cmpl n, %ecx      
  15.      jg endloop  
  16.      addl %ecx, %eax
  17.      incl %ecx
  18.      jmp loop
  19. endloop:
  20.        movl %eax, r
  21.  
  22. #linux exit
  23. movl $0, %ebx
  24. movl r, %ebx
  25. movl $1, %eax
  26. int $0x80


En línea

someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: explicacion loop
« Respuesta #1 en: 9 Septiembre 2015, 02:21 am »

Código
  1. main:
  2. movl i, %eax # cargar 24 long a eax
  3. movl $1, %ecx # cargar 1 en el valor de ecx
  4. loop:                  
  5.      cmpl n, %ecx      #comparar n el valor de ecx con n
  6.      jg endloop          # si es mas grande, saltar a endloop
  7.      addl %ecx, %eax # si no es mas grande, sumarle al contenido de eax, el contenido de ecx
  8.      incl %ecx           # incrementar el valor de ecx
  9.      jmp loop            # saltar a loop
  10. endloop:
  11.        movl %eax, r    # cargar  en r el valor de eax
  12.  
  13. #linux exit ----> aca hace la interrupcion para sacarlo por pantalla
  14. movl $0, %ebx         # cargar el valor 0 en ebx
  15. movl r, %ebx            # cargar el valor de r en ebx
  16. movl $1, %eax          # cargar el valor de 1 en eax
  17. int $0x80                 # interrupcion para sacar por pantalla
  18.  



En línea

omar_cdg

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Re: explicacion loop
« Respuesta #2 en: 9 Septiembre 2015, 02:31 am »

Hola, gracias. Por esta misam razón cuando n lleag a 32 %eax vale 32+24, no es así??
la salida debería ser, creo, es mi tercer programa, 56. Perdón mi ignorancia

En línea

someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: explicacion loop
« Respuesta #3 en: 9 Septiembre 2015, 03:56 am »

Nop, n nunca se incrementa..
Solo se compara n con el valor de ecx, este ultimo es el que se incrementa
Cuando se han dado 31(no 32, porque empezamos en 1 el valor de ecx) vueltas al loop vamos al siguiente tag.

el tema es como se incrementa eax, que es la que al final le da el valor a r.
eax = eax + ecx;
o sea, primera vuelta:
eax = 24;
ecx = 1;
eax = 24 + 1;
segunda vuelta:
eax =25;
ecx = 2;
eax = 25+2;
...

A mi de seguirlo a ojo me parece que da algo asi como 520
En línea

omar_cdg

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Re: explicacion loop
« Respuesta #4 en: 9 Septiembre 2015, 04:42 am »

sí tenes razon, yo me equivoque, da como 500 y pico, hoy a la tarde saque la cuenta :p
igualmente no entiendo por que me sale 40 en la salida
De todas formas agradezco mucho tu atención. Saludos
En línea

someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: explicacion loop
« Respuesta #5 en: 9 Septiembre 2015, 16:05 pm »

A todo esto, que ensamblador estas usando?
No deberia cambiar el resultado, es solo curiosidad, porque ese codigo tal cual como esta NASM me lo rechaza.. Requiere bastantes cambios..

EDIT: antes de que no se entienda :P me da falla de segmentacion
« Última modificación: 9 Septiembre 2015, 16:18 pm por someRandomCode » En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: explicacion loop
« Respuesta #6 en: 10 Septiembre 2015, 03:24 am »

@omar_cdg

Revisa lo que hace el salto jg y sabras porque no te da bien la suma, por otro lado el resultado sigue siendo incorrecto, tendria que devolver 24.

A todo esto, que ensamblador estas usando?
No deberia cambiar el resultado, es solo curiosidad, porque ese codigo tal cual como esta NASM me lo rechaza.. Requiere bastantes cambios..

EDIT: antes de que no se entienda :P me da falla de segmentacion

Es la sintaxis de AT&T, ensamblalo con GAS.

Un saludo.

Modifico:

Me acaba de dar bien el resultado, explica como consultas el resultado.
« Última modificación: 10 Septiembre 2015, 03:31 am por cpu2 » En línea

someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: explicacion loop
« Respuesta #7 en: 10 Septiembre 2015, 05:00 am »

Ni con gcc ni con as lo puedo compilar y evitar que me haga una falla de segmentacion, que raro..

Por que deberia dar 24? Se me acaba de perder el tren de pensamientos
En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: explicacion loop
« Respuesta #8 en: 10 Septiembre 2015, 15:16 pm »

Fue un error mio lo de 24, estuve mirando el cmp en los manuales, y este tenia la sintaxis de intel, y claro es invertido, y me confundi.

Me da como resultado 552, muy raro que te falle, donde precisamente? tracealo.

Es de 64 bits el S.O.?

Un saludo.
En línea

someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: explicacion loop
« Respuesta #9 en: 10 Septiembre 2015, 15:56 pm »

El mio sisi, pero no deberia dar SIGSEGV..

EDITO: en endloop() es  donde tengo la violacion de segmento
« Última modificación: 10 Septiembre 2015, 16:51 pm por someRandomCode » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con Do Loop
Programación Visual Basic
stork32 6 2,775 Último mensaje 22 Octubre 2008, 01:31 am
por seba123neo
[Autoit] Loop
Scripting
mubimeiquer 2 5,437 Último mensaje 13 Febrero 2009, 16:36 pm
por gna08
Problema con loop while « 1 2 »
Programación C/C++
miketru 10 5,885 Último mensaje 11 Septiembre 2010, 05:41 am
por miketru
Problema con loop
Programación C/C++
jaxoR 7 3,192 Último mensaje 2 Marzo 2014, 21:30 pm
por jaxoR
[LUA] Loop lectura de TXT
Scripting
santizuche 0 1,654 Último mensaje 9 Agosto 2015, 06:04 am
por santizuche
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines