push ebp y mov ebp,esp

Iniciado por hentei, 31 Diciembre 2005, 16:35 PM

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

hentei

He visto varios codigon en ASM q empiezan asi:
push ebp
mov ebp,esp
¿Cual es el objetvio de guardar la dirrecion actual de la pila en el registro ebp y para que se pushea ebp?

orphen_nb

Creo recordar que eso se hacía cuando se va a llamar a una funcion. Con eso se crea una pila adicional para meter los argumentos de la funcion.
Si EBP es la direccion base de la pila y ESP es la cima, primero guarda la direccion de EBP en la pila(para luego poder retomar la pila principal), luego para crear otra pila adicional establece la base de la nueva pila donde estaba la cima de la anterior. Luego se disminuye ESP para meter los argumentos y se "pushean" los registros que contengan los argumentos. Cuando termina la funcion, para retomar la pila principal se sacan los registros que estan en la nueva pila, se establece la cima de la pila principal donde estaba la base de la pila adicional y luego se saca el valor de EBP de la pila que lo habíamos guardado al principio.
Para llamar a una funcion:

PUSH EBP
MOV EBP, ESP
SUB ESP, bytesparaguardarargumentos
PUSH Registros

Y para volver a la pila principal:

POP Registros
MOV ESP, EBP
POP EBP

Espero no haberme equivocado y que haya quedado mas o menos claro (aunq puede ser un poco lioso...)

Saludos
Human knowledge belongs to the world