编码x86_64指令mov rcx,rdx
(使用https://defuse.ca/online-x86-assembler.htm)输出48 89 D1
。
用this reference检查操作码显示该字节序列如何编码指令。
然而,该表中的两行(操作码8B
)是一个非常相似的mov
指令,但是操作数的顺序被翻转。
事实上,我能够使用48 8b ca
对相同的指令进行编码(通过反编译验证)。
为什么两个操作码都存在?他们的差异是否超过了我能够解决的问题?什么时候可以挑选另一个?
答案 0 :(得分:3)
modr / m字节最多只能编码一个内存操作数。所有支持源或目标中的存储器操作数的指令因此被编码两次,一次是源可能是存储器操作数,一次是目的地可能是存储器操作数。当然,这意味着您可以对两个操作数都是寄存器两次的助记符进行编码。