为什么在英特尔MPX之前,'0F 1A / r`和'0F 1B / r`是NOP?

时间:2015-05-29 13:27:27

标签: assembly x86 intel

在不支持Intel MPX的处理器上,文档说所有MPX指令都是NOP。也就是说,当我查看了所有这些说明时,它们似乎都是0F 1A /r0F 1B /r没有前缀或以F3F266字节为前缀,取决于指示。此外,还有BNDMK的声明:

  

该指令的reg-reg形式保留了遗留行为(NOP)。

我试图在PDF中搜索这些操作码(即我的搜索字符串是0F 1),但我发现只有MPX指令的描述。从2014年2月开始查看指令集参考,我发现了很多这种形式的指令,但它们不是NOP,例如F2 0F 12 /rMOVDDUP。并且专门寻找0F 1A0F 1B我找不到任何东西。

寻找NOP我发现多字节NOP 0F 1F /0,但它与MPX指令形式不一致。

所以我的问题是,在哪里记录了0F 1A /r0F 1B /r的遗留行为是NOP?是这种形式的指令的一般规则,还是它们代表NOP形式的一些非NOP指令(如90代表xchg eax,eax)?

1 个答案:

答案 0 :(得分:4)

我躺在的intel pdfs确实没有将那些列为NOP,块0F 19-1E在操作码表 A-3中为空。双字节操作码映射:08H - 7FH(第一个字节为0FH)。脚注说所有操作码映射中的所有空白都是保留的,不得使用。不要依赖于未定义或保留位置的操作。

我也有AMD pdf 24594 - Rev。 3.19 - 2012年9月,它确实将上述块列为操作码表 A-4中的NOP。辅助操作码映射(双字节操作码),低半字节8-Fh 。但是,实际NOP指令的页面仅列出0F 1F