VEX前缀的初始字节值C4H和C5H与LDS和LES指令的Opcodes相同。这些说明在64位模式下不支持。为了在32位模式下解决歧义,Vex的规范利用了一个法律LDS或LES的MODRM字节不可能为11xxxxxx的事实(它可以指定寄存器操作数)。 VEX前缀的第二个字节中的各种位点被倒置,以确保字节始终以32位模式为该形式。https://en.wikipedia.org/wiki/vex_prefix#technical_description
指令中的内存操作数
雷克斯前缀的四个位r,x,b和w。 W将操作数尺寸扩展到64位或用作附加的操作码,R扩展REG,B扩展R/M或REG,X和B在SIB字节中扩展了索引和基础。与vex前缀相结合,rxb以非连接形式提供,就像在rex前缀中一样。
https://en.wikipedia.org/wiki/evex_prefix中的桌子说,Evex中的RXB位也应倒置。那么他们如何解码该指令重叠?我检查了英特尔手册,他们似乎仅在vex而非evex中提到了零件的反转。 sandpile
他们中的哪一个是正确的?
由于两个事实,倒置的技巧起作用:
在32位模式中,只有32个ZMM寄存器中的8个,因此Evex.r'位永远不会翻转,因此永远不要使用允许的绑定编码。 在64位模式中,没有绑定的指令,因此Evex位可以采用任何值。
the摘自AVX上的Patent示出了以下内容:
nove,在这一事实上尚不清楚SDM
。 我已经浏览了SDM,实际上,在Evex部分中,没有提及EVEX编码的补充含义的痕迹。必须以某种方式从evex是vex的扩展中推断出来,而对于后者,有一个反向含义的陈述(第2a卷,第2.3.5节,第一个子弹):在Intel®64和IA-32架构软件开发人员手册2的表A2中;绑定为0x62 GV,马萨诸塞州。 G表示操作数1将被解释为通用登记册。 m表示操作数2必须是内存操作数。表示mod字段不得为0b11。然后,我假设其他MOD字段值将被解释为EVEX前缀的第二个字节。和0x62将被解释为EVEX前缀标头。