2015-04-22 15 views
6

Si dice che l'istruzione "lasciare" è simile a:Assembly x86 - "lasciare" Instruction

movl %ebp, %esp 
popl %ebp 

Capisco la parte movl %ebp, %esp, e che agisce per liberare immagazzinata la memoria (come discusso in this question) .

Ma qual è lo scopo del codice popl %ebp?

+3

Si apre 'ebp'. – immibis

+0

La "domanda duplicata" in realtà non risponde a questa domanda; voto per riaprire ... – immibis

risposta

13

LEAVE è la controparte di ENTER. L'istruzione ENTER imposta uno stack frame dapprima spingendo EBP nello stack e poi copie ESP in EBP, così LEAVE ha a che fare il contrario, cioè copiare EBP a ESP e quindi ripristinare il vecchio EBP dalla pila.

Vedere la sezione denominata procedura richiede LINGUE BLOCK-strutturate in Intel's Software Developer's Manual Vol 1, se volete saperne di più su come ENTER e LEAVE lavoro.

+0

Sembra che non capisco il concetto di EBP e ESP. Potresti spiegare entrambi questi termini per me? – alexswo

+0

'EBP' e' ESP' sono entrambi registri generici a 32 bit. Anche se 'ESP' ha una funzione speciale, che agisce come il puntatore dello stack, e viene implicitamente modificato da certe istruzioni (ad esempio' push', 'pop',' call'). 'EBP' per convenzione viene in genere utilizzato come puntatore a frame di stack all'interno delle funzioni. – Michael

+0

[Che cosa significa ebp ed esp in un codice di dissociazione?] (Http://stackoverflow.com/questions/26684506/what-does-ebp-and-esp-in-a-dissembly-code-means) [Cosa sono i registri ESP e EBP?] (http://stackoverflow.com/questions/21718397/what-are-the-esp-and-the-ebp-registers?rq=1) –

Problemi correlati