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

Reply via email to