6

组装此代码时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

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

4

1 回答 1

6

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

于 2012-08-06T06:44:35.927 回答