Assembly 为什么“0F 1A/r”和“0F 1B/r”在英特尔MPX之前一直是NOP?
在不支持英特尔MPX的处理器上,文档说明所有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
0F 1A/r
或0F 1B/r
未固定或前缀为F3
、F2
或66
字节,具体取决于指令。此外,还有类似于BNDMK
的语句:
此指令的reg reg形式保留传统行为(NOP)
我试图在中搜索这些操作码(即我的搜索字符串是0F 1
),但我只找到了MPX指令的描述。查看2014年2月的指令集参考,我发现了很多这种形式的指令,但它们不是NOP,例如F20f 12/r
ismovdup
。专门寻找1A0F
和1B0F
我在那里找不到任何东西
查找NOP时,我发现多字节NOP0F 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刚刚发布了相关文档。明白了,谢谢!