编码x86指令前缀字节的顺序

时间:2011-08-25 21:15:54

标签: assembly x86

我知道x86指令最多可以包含4个字节的前缀,例如Lock,rep,segment overrides等。

如果使用多个前缀,是否应该出现任何特定顺序?

3 个答案:

答案 0 :(得分:5)

订单可在英特尔软件开发人员手册的第2A卷中找到。

简而言之:

  • F2F3前缀相互抵消。稍后出现的那个优先。
  • 如果使用66F2,则忽略F3前缀(作为长指令中的强制性前缀)。这当然不适用于rep movsw,其中这两个前缀只是前缀,而不是操作码的一部分。
  • REX转义符后面可能没有任何其他前缀。
  • VEX转义可能不会出现在REX,66F2F3
  • 之前

其余的,订单无关紧要。

答案 1 :(得分:1)

引用英特尔®64和IA-32架构软件开发人员手册第2A卷:指令集参考,A-M

  

指令前缀分为四组,每组包含一组   允许的前缀码。对于每条指令,它只对有用   包括来自四个组中每个组的最多一个前缀代码(组1,   2,3,4)。第1组至第4组可以相对于任何顺序放置   彼此。

答案 2 :(得分:1)

英特尔开发人员手册的体系结构量详细说明了长度的布局,但是,根据我上次读到的内容,大多数的顺序无关紧要,除了 {{1 } / REX前缀必须占用最接近实际指令字节开头的槽(也就是说它占用了最右边的槽)