将此代码与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个字节?
答案 0 :(得分:5)
始终。大多数(如果不是全部)32位MOV和ALU操作清除目标寄存器操作数的第32至63位。有关详细信息,请参阅CPU手册。