On Saturday, 26 January 2013 at 20:57:54 UTC, Tyro[17] wrote:
On 1/26/13 3:42 PM, Tyro[17] wrote:
The second is the use of leave in [2]. If I understand
correctly, leave
is the exact same as:
mov RBP,RSP
pop RBP
So why do we need to mov RBP, RSP in [2] but not in [1]? I'm
thinking
this is because RBP contains the address of args but not sure.
Still not clear on this choice.
Both functions could be replaced with
---
_Dmain:
xor EAX, EAX
ret
---
as they don't need to store anything on the stack at all.
What you are seeing is just an odd result of the way the compiler
generates the code internally, especially if you are compiling
without optimizations on.
For further information on what EBP/RBP is needed for, try
searching for discussions about the (mis)use of GCC's
omit-frame-pointer option, such as:
http://stackoverflow.com/questions/579262/what-is-the-purpose-of-the-frame-pointer
David