6

D の非常に小さなソース ファイルを次に示します。

void main()
{
}

そして、ここで .o ファイルの objdump の逆アセンブル:

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 です。

64 ビットの RAX 全体ではなく、32 ビットの EAX だけがクリアされるのはなぜでしょうか? これは、D ソースでは認められなくても、C プログラムと同じように必要な戻り値であると想定しています。

4

1 に答える 1

16
xor    %eax,%eax

raxx64で全体をクリアします。dword サイズのレジスタを操作すると、フル レジスタの上位 dword が自動的にクリアされます。

于 2012-10-21T03:57:34.070 に答える