如何为子立即数83/5操作码(如sub edx,0x3a)编码操作数?

时间:2019-03-23 04:10:18

标签: assembly x86 intel opcode machine-code

我在查看GAS语法中的汇编指令时遇到了麻烦

subl $0x3a, %edx

然后可以使用英特尔手册手动生成恰好是

的匹配机器代码
83EA3A

我意识到我进入了intel手册到减法页面,并且看到我们正在从寄存器中减去立即数,这将根据intel手册以操作码83/5 ib开始,但是我有点迷失了去哪里从这里。

1 个答案:

答案 0 :(得分:2)

操作码(83 16 )后跟ModR / M字节。 / 5(或/ 101 2 )是字节的Reg / Opcode字段。 Mod(11 2 )和R / M(010 2 )字段指定寄存器(edx)。 因此:11.101.010 2 = EA 16

请参阅:

  • 2.1Intel®64和IA-32体系结构软件开发人员手册第2卷的保护模式,实地址模式和VIRTUAL-8086模式的指令格式
  • 尤其是表2-2。具有ModR / M字节的32位寻址形式