Hola muy buenas a todos los del subforo de ensamblador
Antes de nada quiero decir que después de un tiempo agobiado con el trabajo por fin tengo tiempo para aprender este lenguaje que siempre quise aprenderlo a fondo.
Mi duda es la siguiente, leyendo sobre el manejo de parámetros, las variables locales, y dirección de retorno en el stack me surge la siguiente duda.
Para referenciar las variables locales de una función por que se utilizar el registro EBP en vez de ESP?
Es decir supongamos que una función requiere de 4 parámetros, en este caso se pusearian los cuatro valores a la pila
push valor1
push valor2
push valor3
push valor4
call nombreFuncion
nombreFuncion PROC
push ebp
mov ebp, esp
sub esp, X
mov eax, [ebp+4] ;Obtengo el primer parámetro
mov ebx, [ebp+8] ;Obtengo el segundo parámetro
mov ecx, [ebp+12] ;Obtengo el tercer parámetro
mov edx, [ebp+16] ;Obtengo el cuarto parámetro
mov esp, ebp
pop ebp
ret
nombreFuncion ENDP
1) Para obtener los parámetros dentro de la función sería de la siguiente manera?
2) Por que hay ocasiones en los que se suele utilizar ESP como desplazamiento.
3) Por que hay otras ocasiones en la que se le pone el signo negativo? es decir eax, [ebp-4] ?
Si alguien puede ayudarme en como seguir la pila en el momento de una ejecución de una función se lo agradecería, no me refiero como se ejecuta si no el estado de los parámetros, variables locales , ret address en sus respectivas posiciones en la pila siguiendo los registros ESP y EBP.
Espero que se haya entendido, un abrazo de antemano!