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