Assembly 编码x86指令前缀字节的顺序
我知道x86指令最多可以有4个字节的前缀,例如Lock、rep、段重写等Assembly 编码x86指令前缀字节的顺序,assembly,x86,Assembly,X86,我知道x86指令最多可以有4个字节的前缀,例如Lock、rep、段重写等 在使用多个前缀的情况下,它们是否有特定的显示顺序?引自《英特尔64和IA-32体系结构软件开发人员手册》第2A卷:指令集参考,A-M 指令前缀分为四组,每组有一组 允许的前缀代码。对于每一条指令,只需 从四个组(组1, 2, 3, 4). 第1组至第4组可按与以下各项相关的任何顺序排列: 彼此 该订单可在《英特尔软件开发人员手册》第2A卷中找到 简言之: F2和F3前缀相互抵消。后面来的有优先权 如果使用F2或F3作为长
在使用多个前缀的情况下,它们是否有特定的显示顺序?引自《英特尔64和IA-32体系结构软件开发人员手册》第2A卷:指令集参考,A-M 指令前缀分为四组,每组有一组 允许的前缀代码。对于每一条指令,只需 从四个组(组1, 2, 3, 4). 第1组至第4组可按与以下各项相关的任何顺序排列: 彼此
该订单可在《英特尔软件开发人员手册》第2A卷中找到 简言之:
和F2
前缀相互抵消。后面来的有优先权F3
- 如果使用
或F2
作为长指令中的强制前缀,则忽略F3
前缀。这当然不适用于66
,因为这两个前缀都只是前缀,而不是操作码的一部分rep movsw
- REX escape后面不能跟任何其他前缀
- VEX escape前面不能有REX、
、66
或F2
F3
对于其他人来说,顺序应该无关紧要。英特尔开发人员手册的体系结构部分详细介绍了整个布局,但是,从我上次阅读时的记忆来看,顺序对大多数人来说并不重要,除非
REX
/REX.W
前缀必须占用最接近实际指令字节开头的插槽(即它占据最右边的插槽)66,否则如果提供F2,则忽略该前缀?世界跆拳道联盟?您不能在32位模式下执行rep movsw
吗?在32位和64位模式下,操作码a5
表示movsl
(分别为英特尔语法中的movsd
),因为默认操作数大小为32位。因此,要获得movsw
,需要使用66
前缀。因此,rep movsw
是66 f3 a5
,您说这是无效的。这很奇怪。请注意,我在英特尔手册中找不到您的第二条规则,所以让我暂时否决这条规则,因为我认为它是不正确的。@fuz@LưuVĩnhPhúcmovsw
不是SSE指令,因此应更新答案以明确这只适用于SSE指令。同样,你链接到的答案没有引用权威来源,reddit的评论也没有引用。可能只是实现定义的行为。