Pa ti možeš da referenciraš lokalne promenljive i zadavanjem offseta od stek pointera (ESP reg), ali tu ima puno računanja jer se vrh steka stalno pomera za vreme izvršenja potprograma, i zato se kao olakšica koristi frame pointer (EBP registar) koji ukazuje na fiksnu adresu koja se za vreme izvršenja potprograma ne menja. Na početku rutine snimamo stari EBP na stek, i postavljamo novi EBP da pokazuje na vrh steka pri ulazu u tu rutinu.
pushl %ebp
movl %esp,%ebp
Na kraju, pri izlasku, moramo da vratimo EBP u stanje u kome smo ga našli.
movl %ebp,%esp
popl %ebp
Čini mi se da ovo i obezbeđuje izvesnu zaštitu od brljanja sa esp-om, jer se po izlasku iz potprograma u ESP stavlja vrednost koju smo na početku na neki način "sačuvali" u EBP.
Voja će to svakako znati i bolje da ti objasni od mene.
[
Ovu poruku je menjao Vojislav Milunovic dana 04.12.2001 u 12:13 PM GMT]
int rand(void);
Those who do not understand Unix are condemned to reinvent it, poorly.
Upali lampicu — koristi Jabber!