assembly - 为什么由D编译的main()在64位计算机上具有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编译器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/

相关文章:

assembly - 如何知道应用程序已经处理完文件?

d - 遍历 D 中文件夹中的文件

d - 如何检测函数是否用@property注释

java.util.scanner - D 有没有像 Java 的 Scanner 这样的东西?

types - 如何在 D 中创建强类型别名?

macos - ld 链接器错误 - 体系结构 x86_64 的 undefined symbol

assembly - 我不确定这个 x86 Add 指令在做什么

windows - 16 位程序是否在 32 位操作系统上以虚拟 8086 模式运行?

c - 16 位处理器如何拥有 4 字节大小的 long int?

string - 为什么在 Linux64 下使用 .ptr 修补字符串会失败,而在 Win32 下却不会?