能“MOV EAX,为0x1”总是被用来代替“MOV RAX,为0x1”?(Can “mov eax

2019-09-20 21:03发布

当装配该代码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个字节?

Answer 1:

总是。 大部分(如果不是全部),32位的MOV和ALU操作清除位32到目的地寄存器操作数的63。 详情请参阅CPU手册。



文章来源: Can “mov eax, 0x1” always be used instead of “mov rax, 0x1”?