我知道x86指令最多可以有4字节的前缀,例如Lock、rep、段覆盖等。
如果有多个前缀,它们应该以特定的顺序出现吗?
这个指令的顺序可以在英特尔软件开发手册(第2A卷)中找到。
简而言之:
F2
和F3
前缀相互抵消,后出现的优先级更高。F2
或F3
,则会忽略66
前缀。当然,对于rep movsw
,这两个前缀只是前缀,不是操作码的一部分,因此不适用上述规则。66
,F2
或F3
为前缀。除了以上内容,其他顺序应该没有关系。
摘自Intel® 64和IA-32架构软件开发人员手册第2A卷:指令集参考,A-M
指令前缀分为四组,每组有一组允许的前缀码。对于每个指令,只有在每个四组中选择一个前缀码才有用(1组,2组,3组,4组)。1到4组可以相对于彼此放置。
英特尔开发手册的架构卷详细描述了布局,但是从我上次阅读它的记忆中,大多数情况下顺序并不重要,但REX
/REX.W
前缀必须占据最靠近实际指令字节开头的位置(也就是占据最右侧的位置)
rep movsw
吗? - fuzmovsw
不是SSE指令,因此答案应该更新以明确说明这仅适用于SSE指令。再次强调,您链接的答案没有引用权威来源,Reddit评论也没有。这可能只是实现定义的行为。 - fuz