是否可以使用"mov eax,0x1"而不是"mov rax,0x1"?

Tyi*_*ilo 6 assembly x86-64 nasm zero-extension

组装此代码时nasm:

BITS 64
mov eax, 0x1
mov rax, 0x1
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

b8 01 00 00 00 b8 01 00 00 00
Run Code Online (Sandbox Code Playgroud)

这是mov eax, 0x1重复两次的操作码.

这是否意味着mov rax, 0x1可以随时被替换mov eax, 0x1,或只是在这种情况下?

如果这是正确的,那么使用它不是更好:

xor rax, rax
inc rax
Run Code Online (Sandbox Code Playgroud)

因为组装时变为6个字节,而mov eax, 0x1只有5个字节?

Ale*_*nze 6

总是.大多数(如果不是全部)32位MOV和ALU操作清除目标寄存器操作数的第32至63位.有关详细信息,请参阅CPU手册.