如何编码子即时83/5操作码的操作数,如sub edx,0x3a?

问题描述 投票:0回答:1

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

subl $0x3a, %edx

然后能够使用英特尔手册手动生成恰好匹配的机器代码

83EA3A

我意识到我进入减去页面的英特尔手册,并看到我们正在从一个寄存器中减去一个立即从操作码83/5 ib启动我们根据英特尔手册,但我有点迷失在哪里离开这里。

assembly x86 intel opcode machine-code
1个回答
2
投票

操作码(8316)之后是ModR / M字节。 / 5(或/ 1012)是字节的Reg / Opcode字段。 Mod(112)和R / M(0102)字段指定寄存器(edx)。因此:11.101.0102 = EA16。

看到:

  • 2.1英特尔®64和IA-32架构软件开发人员手册第2卷的受保护模式,实地址模式和虚拟-8086模式的指令格式
  • 特别是,表2-2。使用ModR / M字节的32位寻址表
© www.soinside.com 2019 - 2024. All rights reserved.