这是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源中没有确认也是如此。
答案 0 :(得分:16)
xor %eax,%eax
清除x64中的整个rax
。对双字大小寄存器的操作会自动清除整个寄存器的高位字。