6

このコードを次のようにアセンブルする場合nasm

BITS 64
mov eax, 0x1
mov rax, 0x1

私はこの出力を取得します:

b8 01 00 00 00 b8 01 00 00 00

mov eax, 0x1これは2回繰り返されるオペコードです。

これは、それをいつでも置き換えるmov rax, 0x1ことができるという意味ですか、それともこの場合だけですか?mov eax, 0x1

これが正しければ、以下よりも使用する方が良いでしょう。

xor rax, rax
inc rax

アセンブルすると6バイトになりますmov eax, 0x1が、たった5バイトですか?

4

1 に答える 1

6

いつも。ほとんどの (すべてではないにしても) 32 ビット MOV および ALU 演算は、デスティネーション レジスタ オペランドのビット 32 ~ 63 をクリアします。詳細は CPU のマニュアルを参照してください。

于 2012-08-06T06:44:35.927 に答える