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

时间:2012-08-06 04:41:41

标签: assembly nasm x86-64 zero-extension

将此代码与nasm

组合在一起时
BITS 64
mov eax, 0x1
mov rax, 0x1

我得到了这个输出:

b8 01 00 00 00 b8 01 00 00 00

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

这是否意味着mov rax, 0x1 总是可以被mov eax, 0x1取代,还是只是在这种情况下呢?

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

xor rax, rax
inc rax

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

1 个答案:

答案 0 :(得分:5)

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