Autor
|
Tema: explicacion loop (Leído 6,573 veces)
|
omar_cdg
Desconectado
Mensajes: 47
|
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 .data i: .long 24 n: .long 32 .bss .comm r,4,4 .text .global main main: movl i, %eax movl $1, %ecx loop: cmpl n, %ecx jg endloop addl %ecx, %eax incl %ecx jmp loop endloop: movl %eax, r #linux exit movl $0, %ebx movl r, %ebx movl $1, %eax int $0x80
|
|
|
En línea
|
|
|
|
someRandomCode
Desconectado
Mensajes: 250
|
main: movl i, %eax # cargar 24 long a eax movl $1, %ecx # cargar 1 en el valor de ecx loop: cmpl n, %ecx #comparar n el valor de ecx con n jg endloop # si es mas grande, saltar a endloop addl %ecx, %eax # si no es mas grande, sumarle al contenido de eax, el contenido de ecx incl %ecx # incrementar el valor de ecx jmp loop # saltar a loop endloop: movl %eax, r # cargar en r el valor de eax #linux exit ----> aca hace la interrupcion para sacarlo por pantalla movl $0, %ebx # cargar el valor 0 en ebx movl r, %ebx # cargar el valor de r en ebx movl $1, %eax # cargar el valor de 1 en eax int $0x80 # interrupcion para sacar por pantalla
|
|
|
En línea
|
|
|
|
omar_cdg
Desconectado
Mensajes: 47
|
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
Mensajes: 250
|
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
Mensajes: 47
|
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
Mensajes: 250
|
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 me da falla de segmentacion
|
|
« Última modificación: 9 Septiembre 2015, 16:18 pm por someRandomCode »
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.026
|
@omar_cdgRevisa 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 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
Mensajes: 250
|
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
Mensajes: 1.026
|
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
Mensajes: 250
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con Do Loop
Programación Visual Basic
|
stork32
|
6
|
2,807
|
22 Octubre 2008, 01:31 am
por seba123neo
|
|
|
[Autoit] Loop
Scripting
|
mubimeiquer
|
2
|
5,462
|
13 Febrero 2009, 16:36 pm
por gna08
|
|
|
Problema con loop while
« 1 2 »
Programación C/C++
|
miketru
|
10
|
5,907
|
11 Septiembre 2010, 05:41 am
por miketru
|
|
|
Problema con loop
Programación C/C++
|
jaxoR
|
7
|
3,221
|
2 Marzo 2014, 21:30 pm
por jaxoR
|
|
|
[LUA] Loop lectura de TXT
Scripting
|
santizuche
|
0
|
1,668
|
9 Agosto 2015, 06:04 am
por santizuche
|
|