x64 MASKMOVDQU(存储双四字的选定字节)和VEX段覆盖

时间:2015-05-07 01:48:29

标签: assembly 64-bit x86-64 machine-code

我被intel x64手册第902页的MASKMOVDQU指令所困。我不太确定如何在此指令中的不同寄存器大小之间进行更改。它将默认存储位置列为DS:DI / EDI / RDI,但在其操作码中也有0x66。我是否删除了0x66并将0x67 / REX.W用于EDI / RDI?

此指令的VEX版本也是这样列出的:

VEX.128.66.0F.WIG F7 /r

如何在16/32/64位大小之间切换VEX指令?

1 个答案:

答案 0 :(得分:1)

66位于指令中,以区别于MMX版本MASKMOVQ66不会取消67,只需在开头添加即可。请注意,VEX编码版本甚至没有66 0F,因为这些前缀嵌入在VEX本身中,请参阅 2.3.1指令格式部分:

  

消除转义操作码字节(0FH),SIMD前缀字节(66H,F2H,   F3H)通过VEX前缀内的紧凑位字段表示。

此外, 2.3.5 VEX前缀

部分
  

SIMD前缀的压缩:传统的SSE指令有效使用   SIMD前缀(66H,F2H,F3H)作为操作码扩展字段。 VEX前缀   编码允许这种传统SSE的功能   指令(在XMM寄存器上操作,位255:128)   使用VEX.pp字段编码的相应YMM未修改的   没有任何SIMD前缀。 VEX编码的128位   指令将使目标寄存器的位255:128清零。   VEX编码的指令可以具有128位向量长度或256位   长度。

     

双字节和三字节操作码的压缩:最近推出的   传统SSE指令采用两个和三个字节的操作码。一个或   两个前导字节是:0FH和0FH 3AH / 0FH 38H。单字节转义   (0FH)和双字节转义(0FH 3AH,0FH 38H)也可以被解释   作为操作码扩展字段。 VEX.mmmmm字段提供压缩   允许在没有常量的情况下编码许多遗留指令   字节序列,0FH,0FH 3AH,0FH 38H。这些VEX编码指令   可能有128位向量长度或256位长度。