A simple question
ISAAC GELADO FERNANDEZ
igf at tid.es
Fri Mar 5 14:01:11 PST 2004
> ISAAC GELADO FERNANDEZ wrote:
>
> >De: Chungwei Hsiung <skuma17 at yahoo.com>
> >Fecha: Viernes, Marzo 5, 2004 7:43 pm
> >
> >
> >>I have a simple test program. I compile it,
> >>and
> >>gdb to disassemble main. I got the following..
> >>
> >>0x80481f8 <main>: push %ebp
> >>0x80481f9 <main+1>: mov %esp,%ebp
> >>0x80481fb <main+3>: sub $0x8,%esp
> >>0x80481fe <main+6>: and $0xfffffff0,%esp
> >>0x8048201 <main+9>: mov $0x0,%eax
> >>0x8048206 <main+14>: sub %eax,%esp
> >>
> >>I don't know if at line 5, we move zero to %eax. why do we need
> to sub %eax, %esp? why do we need to subtract 0 from the stack
> pointer??>>
> >>
> >
> > I am no really sure, but it maybe be because you don't have any
> local variable, so it is no necessary to allocate memory in the
> stack for them. This seems a pattern from the compiler, it subtract
> the size of local variables from the stack pointer, so when there
> is none it subtracts zero. But this is just a supposition
> >
> >
> >
> thank you for the reply..
> I try it again to call a function with local variables, but it does
> that
> as well. I think that line is not a part of a function prologue
> because
> when I try it with or without local variables, it is always there.
> any
> ideas??
> btw.. the compiler I use is gcc 3.2.2
I have performed some tests and the "strange" code apperars always.
At first I thought the compiler puts the code to align the stack, but if you write a function it doesn't appear.
Maybe the compiler puts the subl to set system flags to a known value, but I don't really know.
I will try to obtain a good answer, I am really intrigate ;)
Regards,
Isaac
>
> best regards
> Chungwei
>
More information about the freebsd-hackers
mailing list