【问题标题】:x86_64 Opcode encoding formats in the intel manualintel手册中的x86_64 Opcode编码格式
【发布时间】:2019-08-10 08:17:28
【问题描述】:

Intel x86_64 reference manual? 中列出的“Op/En”格式是什么? 例如,在Add opcode 中,我可以猜测“I” = 立即数,但是否有完整的列表?

【问题讨论】:

  • 是的,我想在你所说的第 2 卷手册的介绍部分。
  • @PeterCordes 如果您在谈论第 2.1 节,我只看到对整个指令如何编码的参考,而不是我在帖子中显示的列的含义。

标签: assembly x86-64 intel


【解决方案1】:

Intel's vol.2 manual 的介绍部分解释了如何阅读每个条目:

第 3.1.1.4 节指令汇总表中的操作数编码列

“操作数编码”列在中简写为 Op/En 指令摘要表标题。指令操作数编码 使用每个汇编指令语法提供信息 交叉引用操作数编码中的行条目的字母 指令汇总表之后的定义表。 ...

注意事项

  • 指令的 Op/En 列中的字母仅适用于编码定义表 紧跟在指令汇总表之后。

  • ...

所以它们只是每条指令附带的表格的键。不,英特尔似乎没有记录它们代表什么,但这很简单。

(相关:How to determine if ModR/M is needed through Opcodes?


是的,I 代表立即。

对于 r/mreg 字段,使用 ModRM 字节编码的显式操作数是 MR

V 是由 VEX.vvvv 或 EVEX 编码的字段,为此类指令提供第三个操作数,用于非破坏性操作,或用于 FMA 等三操作数指令。

vpblendvb xmm1, xmm2, xmm3/m128, xmm4 使用立即字节对第 4 个操作数进行编码,并在 Op/En 列中使用 RVMR。另请参阅What kind of address instruction does the x86 cpu have? - 我认为这可能是唯一具有 4 个单独显式编码操作数的 x86 指令,在 AVX512 的 3 + 掩码寄存器之外。

vextractf128 and the AVX512 versions of itAD 用于表的行,因为唯一的区别特征是缩放短位移和掩码的“元组类型”。如果他们使用 MRI / MRI2 / MRI4 / etc,那就太奇怪了。


(rep) movs 使用 ZO :所有操作数都是隐式的(DF、RSI、RDI 以及它们指向的内存),所以这可能代表零操作数。 (至少不需要编码)。

cdq 使用相同的 ZO 所以是的,它可能是“零(显式)操作数”

x86 只有几种方法可以指定显式操作数。

【讨论】:

  • @Mdren:也许您正在查看旧的 PDF 副本,或者英特尔手册的旧 HTML 摘录。还是您的意思是 AMD 的手册?当前的英特尔 PDF(通常记录现代 x86,包括 x86-64 长模式)software.intel.com/sites/default/files/managed/a4/60/… 和从中提取的 HTML(就像我链接的那些)都说ZO。除非他们在我没看过的其他指令中使用NP?但无论如何,我认为它代表无参数。
猜你喜欢
  • 2023-03-09
  • 2019-06-28
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 2012-02-12
  • 2017-01-26
相关资源
最近更新 更多