1. ホーム
  2. assembly

[解決済み] レジスタを自分自身とXORする目的は何ですか?重複

2022-06-02 06:20:15

質問

xor eax, eax は常に eax をゼロにしますよね?では、なぜMSVC++は私の実行ファイルのコードにそれを入れることがあるのでしょうか?それは、より効率的に mov eax, 0 ?

012B1002  in          al,dx 
012B1003  push        ecx  
    int i = 5;
012B1004  mov         dword ptr [i],5 
    return 0;
012B100B  xor         eax,eax 

また in al, dx ?

どのように解決するのですか?

はい、より効率的です。

よりもオペコードは短いです。 mov eax, 0 よりも短く、2 バイトしかありませんが、プロセッサはこの特殊なケースを認識し、これを mov eax, 0 への誤った読み取り依存をせずに eax への誤読依存がないため、実行時間は同じになります。