为什么由D编译的main()在64位机器上具有32位返回值?

时间:2012-10-21 03:49:32

标签: assembly d

这是D:

中的一个非常小的源文件
void main()
{
}

这里是objdump对.o文件的反汇编:

Disassembly of section .text._Dmain:
0000000000000000 <_Dmain>:
void main()
   0:   55                      push   %rbp
   1:   48 8b ec                mov    %rsp,%rbp
   4:   31 c0                   xor    %eax,%eax
{
   6:   5d                      pop    %rbp
   7:   c3                      retq   

编译器是在x86_64 Linux机器上运行的DMD64 D Compiler v2.056。

我想知道为什么只清除32位EAX而不是整个64位RAX?我假设这是一个返回值,就像在C程序中一样,即使D源中没有确认也是如此。

1 个答案:

答案 0 :(得分:16)

xor    %eax,%eax

清除x64中的整个rax。对双字大小寄存器的操作会自动清除整个寄存器的高位字。