Mail Archives: djgpp/1997/09/23/09:00:33
Gurunandan R. Bhat wrote:
> Greetings,
>
> In what precise way does %ebp "characterise" a stack frame? Does it point
> to the first address on the current stack frame? If so shouldn't each
> nested procedure call redefine %ebp to set up a new stack frame for its
> use?
>
> I have looked at some .s files produced by gcc and all they do is push and
> pop %ebp at each procedure call. Where is it initialised if at all? I
> suspect that this is done in crt0.s but would be grateful for the range
> of line numbers in the relevant file where this is accomplished
>
> Many thanks in advance
A standard entry to a function looks like:
pushl %ebp
movl %esp,%ebp <---- initializes ebp
...
at the end:
leave
ret
You allways get this picture if you compile
your programs with -standrad-stack-frame option, or something
like that. With this option all locals are accessed through %ebp,
but that means you have one register less for other purposes.
Compiler also can use %esp for accessing locals(more sophisticated),
then %ebp is used as a general purpose register or for whatever
purposes, and the compiler just make sure to restore previous ebp
after function leaves.
- Mark
- Raw text -