【发布时间】:2017-03-27 18:17:06
【问题描述】:
编码x86_64指令mov rcx,rdx(使用https://defuse.ca/online-x86-assembler.htm)输出48 89 D1。
使用this reference 检查操作码显示该字节序列如何对指令进行编码。
但是,该表中的两行(操作码8B)与mov 指令非常相似,但操作数的顺序颠倒了。
事实上,我可以使用48 8b ca(通过反编译验证)对相同的指令进行编码。
为什么两个操作码都存在?它们的差异是否超出了我的计算能力?什么时候会选择一个而不是另一个?
【问题讨论】:
-
它们的存在是为了让内存操作数既可以是源也可以是目标。如果两者都是寄存器,您将获得两种编码。选择哪个取决于汇编程序,有些甚至允许您指定(例如,
.s气体后缀)。
标签: assembly x86 x86-64 opcode mov