这是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编译器v2.056。
我想知道为什么只清除32位EAX而不清除整个64位RAX?我假定这是一个返回值,即使在D源中未确认,也正如C程序中所要求的那样。
最佳答案
xor %eax,%eax
是否清除x64中的整个
rax
。双字大小的寄存器上的操作会自动清除整个寄存器的高双字。
关于assembly - 为什么由D编译的main()在64位计算机上具有32位返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12994795/