编码x86_64指令mov rcx,rdx
(使用https://defuse.ca/online-x86-assembler.htm)输出48 89 D1
。x86_64 - 编码mov指令
检查操作码this reference显示了该字节序列如何编码该指令。
但该表中的两行(操作码8B
)与指令非常相似,但操作数的顺序翻转了。
事实上,我可以使用48 8b ca
(通过反编译验证)编码相同的指令。
为什么两个操作码都存在?他们的差异超过我能够解决的吗?什么时候会被另一个选中?
它们的存在是为了允许内存操作数是源或目标。如果两者都是寄存器,你会得到两个编码。选择哪个取决于汇编程序,有些程序甚至允许您指定(例如gas的'.s'后缀)。 – Jester