[DUDA] mover a la pila

Iniciado por blackray, 9 Septiembre 2009, 19:33 PM

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

blackray

Aqui estoy con mis dudas  :xD

Segun lei los registros sp y bp contienen el valor mas reciente introducido en la pila y el valor de la base de la pila respectivamente.

Entonces...

mov ax,5
push ax ; la pila tiene de base el valor 5
mov bp,6 ; ????

Si movemos a el registro bp el valor 6, tambien se modifica el valor de la pila?

Saludos, y gracias! :P
Nada es imposible.

MCKSys Argentina

Hola!

ESP (Stack Pointer) es un PUNTERO al primer elemento de la pila (superior). Al hacer el push ax, el valor de ESP se incrementara en 2 bytes, obteniendo asi, un nuevo puntero al valor que acabas de pushear.

De la forma en que utilizas EBP (mov bp, 6), lo haces como si se tratara de un registro cualquiera (EAX, ECX, EDX). De esta forma NO modificas el stack.

Espero haberte ayudado...

Saludos!


MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


blackray

Si me ayudaste :P

Y si hago...

mov ax,5
mov bp,6
push ax

En este caso perdere el 6 de bp y [bp] sera = a 5, estoy en lo correcto?

Gracias! :D
Nada es imposible.

MCKSys Argentina

Me parece que estás confundiendo EBP con ESP.

Si haces:


mov ax, 5
mov bp, 6
push ax


El valor de BP pasa a ser 6 y [BP] (o mejor dicho, el valor de la posicion de memoria a la cual apunta BP) es incierto. Esto es, siempre y cuando no hayas colocado algo en esa posicion. Ahora, para hacer esto, mejor utiliza los registros "comunes": EAX, ECX, EDX.

En Windows hay reglas de conservación ó preservación de los regsitros. "Normalmente" nunca utilizas EBP en una rutina.

Para recuperar el valor pusheado, podrias hacer (en ECX):


pop cx


ó


mov cx, word ptr [esp]


Como vez, ESP es el que se utiliza a la hora de trabajar con la pila...

Sin ánimos de ofender, te recomiendo un tutorial básico de ASM. Te puede sacar este tipo de dudas...


Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


blackray

Muchas gracias y disculpa las molestias :P

Yo lei un tutorial basico de asm, el problema es que dicen: bp apunta a la base de la pila y sp a el valor que acaba de ser empujado a ella y si solo metemos un valor, yo creia que bp y sp iban a apuntar a la misma posicion  :xD

Saludos!
Nada es imposible.