X64 MaskMovdQu(存储了Double Quadword的选定字节)和Vex段覆盖



我被Intel X64手册的第902页的MaskMovDQU指令所困扰。我不太确定该指令中如何在不同的寄存器大小之间进行更改。它列出了默认的内存位置为ds:di/edi/rdi,但它在OpCode中也具有0x66。我是否删除该0x66,然后将0x67/rex.w for EDI/rdi?

此外还有此说明的vex版本,如下所示:

VEX.128.66.0F.WIG F7 /r

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

66在指令中与MMX版本MASKMOVQ区分开。66不会取消67,只需在开始时添加它即可。请注意,VEX编码版本甚至没有66 0F,因为这些前缀嵌入了VEX本身中,请参见 2.3.1指令格式

消除逃生opcode字节(0FH),simd前缀字节(66h,f2h, f3h)通过vex前缀内的紧凑位字段表示。

另外,节 2.3.5 vex前缀

SIMD前缀的压实:Legacy SSE指令有效使用 SIMD前缀(66H,F2H,F3H)作为OpCode扩展字段。vex前缀 编码允许此类遗产SSE的功能能力 说明(在XMM寄存器上操作,位255:128 相应的YMM未修改)用于使用vex.pp字段编码 没有任何SIMD前缀。VEX编码的128位 指令将零位数零位255:128。 VEX编码的指令可能具有128位矢量长度或256位 长度。

两字节和三字节OPCODE的压实:最近引入了 传统SSE指令采用两个字节和三字节OPCODE。一个或 两个领先字节为:0fh,0fh 3AH/0fh 38h。单字节逃脱 (0FH)和两个字节逃脱(0FH 3AH,0FH 38H)也可以解释 作为OpCode扩展字段。vex.mmmmm字段提供压实 为了允许许多传统指令编码而没有恒定 字节序列,0FH,0FH 3AH,0FH 38H。这些vex编码的说明 可能具有128位矢量长度或256位长度。

最新更新