digitalmars.D.learn - two mains
- Tyro[17] (42/42) Jan 26 2013 Trying to learn from the ground up and would appreciate some assistance
Trying to learn from the ground up and would appreciate some assistance making sense of the following: // void main(){} [1] .text._Dmain segment assume CS:.text._Dmain _Dmain: push RBP mov RBP,RSP xor EAX,EAX pop RBP ret .text._Dmain ends .cto // void main(string[] args) {} [2] .text._Dmain segment assume CS:.text._Dmain _Dmain: push RBP mov RBP,RSP sub RSP,010h xor EAX,EAX leave ret .text._Dm Both of segments of code deal with a minimal D program: the first taking no arguments and the second taking a string array. Prior .text_Dmain segment of both files mirror each other with the exception of module name differences. The first difference that jumps out at me is that the ".text._Dmain segment" in [1] properly terminates with ".text._Dmain ends" like all other segments in the file up to this point. [2] is improperly: ".text._Dm". 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. Last is the .cto at the end of [1], what on earth is it and what is it used for? Why does it not exist in [2]? Thanks, Andrew
Jan 26 2013