como referencia el codigo ensamblador a una variable (local) en memoria?

Iniciado por MRx86, 17 Marzo 2017, 13:54 PM

0 Miembros y 1 Visitante están viendo este tema.

MRx86

Hola, alguien sabe como referencia elcodigo ensamblador a una variable local en memoria principal?, en otras palabras, como se compila este codigo de C



int i;
int i = 0; /* este especificamente */



a ensamblador IA-32 (i386)?

saludos
"Tengo una pregunta que a veces me tortura: ¿Estoy loco
yo, o los locos son los demas?"
- Albert Einstein

Yuki

Creo que te referís a esto:

Código (asm) [Seleccionar]
lea edi,[ebp-4] ; int i;
mov DWORD[edi],0 ; i = 0;


utilizamos Lea para obtener la dirección de i y le asignamos el valor de cero.

MRx86

si, a eso mismo me refiero. Pero, una  duda, el numero X que va en

Código (mpasm) [Seleccionar]


lea edi, [ebp-X]



tiene que ir incrementando segun mas variables locales se vayan declarado anteriormente?

saludos!
"Tengo una pregunta que a veces me tortura: ¿Estoy loco
yo, o los locos son los demas?"
- Albert Einstein

Yuki

Las variables locales se encuentran restando a EBX, -4 es la primera variable de 4 bytes,-8 la segunda y así sucesivamente.

Algunos lenguajes de programación son mucho mas estrictos con esta regla, por lo que si tienes una variable de 4 bytes y luego un "short" podrias llegar a ver instrucciones como "lea edi,[ebx-6]", pero esos casos son raros.

MRx86

"Tengo una pregunta que a veces me tortura: ¿Estoy loco
yo, o los locos son los demas?"
- Albert Einstein