[ anatogen @ 04.12.2001. 00:30 ] @
Zasto je praksa da se na pocetku funkcije stavlja

push %ebp
movl %esp, %ebp

i onda se bakcemo sa %ebp umesto sa %esp i na kraju sve vratimo kao sto je bilo...
Mislim, u cemu se ogleda veca efikasnost %ebp od %esp ?
[ random @ 04.12.2001. 01:25 ] @
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]
[ Vojislav Milunovic @ 04.12.2001. 12:13 ] @
Pa dobro si objasnio :) + sto omogucava lakse pristupanje argumentima giunkcije.
sa ebp pristupas sa movl 0x8(%ebp),%eax dok bi sa %esp morao da pamtis gde je sad esp pa dodaj toliko + 4 da se pristupi prvom argumentu.
[ anatogen @ 06.12.2001. 02:44 ] @
zahvaljujem...