Assembly 为什么“0F 1A/r”和“0F 1B/r”在英特尔MPX之前一直是NOP?

Assembly 为什么“0F 1A/r”和“0F 1B/r”在英特尔MPX之前一直是NOP?,assembly,x86,intel,Assembly,X86,Intel,在不支持英特尔MPX的处理器上,文档说明所有MPX指令都是NOP指令。也就是说,当我浏览所有这些指令时,它们看起来都是0F 1A/r或0F 1B/r未固定或前缀为F3、F2或66字节,具体取决于指令。此外,还有类似于BNDMK的语句: 此指令的reg reg形式保留传统行为(NOP) 我试图在中搜索这些操作码(即我的搜索字符串是0F 1),但我只找到了MPX指令的描述。查看2014年2月的指令集参考,我发现了很多这种形式的指令,但它们不是NOP,例如F20f 12/rismovdup。专门寻找1

在不支持英特尔MPX的处理器上,文档说明所有MPX指令都是NOP指令。也就是说,当我浏览所有这些指令时,它们看起来都是
0F 1A/r
0F 1B/r
未固定或前缀为
F3
F2
66
字节,具体取决于指令。此外,还有类似于
BNDMK
的语句:

此指令的reg reg形式保留传统行为(NOP)

我试图在中搜索这些操作码(即我的搜索字符串是
0F 1
),但我只找到了MPX指令的描述。查看2014年2月的指令集参考,我发现了很多这种形式的指令,但它们不是NOP,例如
F20f 12/r
is
movdup
。专门寻找1A
0F
和1B
0F
我在那里找不到任何东西

查找NOP时,我发现多字节NOP
0F 1F/0
,但它与MPX指令表单不一致


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

我手头的英特尔PDF确实也没有将它们列为
NOP
,块
0F 19-1E
在操作码表A-3中是空的。两字节操作码映射:08H--7FH(第一个字节是0FH)。脚注中说,所有操作码映射中的所有空格都是保留的,不得使用。不要依赖于未定义或保留位置的操作


我还有AMD pdf 24594——修订版。3.19--2012年9月,这确实在操作码表A-4中将上述块列为
NOP
。次级操作码映射(双字节操作码),低半字节8-Fh。然而,实际的
NOP
指令页面只列出了
0F 1F

,因此我得出结论,这是一个未经记录的通用公共功能,在MPX之前一直由英特尔和AMD实施,AMD刚刚发布了相关文档。明白了,谢谢!