在32位模式下,英特尔通过反转寄存器扩展的高位来解决VEX前缀与LDS/LES冲突,因为ModRM字节的mod字段不能为11b
但是,在EVEX中,R和X位没有被反转,这导致mod = 00b,这也表明BOUND
指令中的内存操作数
那么他们如何才能清晰地解码该指令重叠呢?
我查看了英特尔手册,他们似乎只提到VEX中的位反转,而没有提到EVEX。
在sandpile中的表中,OTOH表示EVEX中的RXB位也应反转。
其中哪一个是正确的?
最佳答案
带反转位的技巧之所以起作用,是因为有两个事实:
AVX上patent的摘录阐明了这一点:
但是,Intel SDM在这一事实上尚不清楚。
我仔细研究了SDM,实际上,在EVEX部分中没有提到EVEX编码的补码含义的痕迹。必须从EVEX是VEX的扩展这一事实中以某种方式推论得出,对于EVEX,它有一个相反含义的陈述(第2A卷,第2.3.5节,第一个项目符号):