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
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!
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
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!
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!