作者:mobiledu2502912781 | 来源:互联网 | 2022-12-08 10:47
我试图了解SSE / AVX指令的VEX前缀编码。因此,请问我是否提出简单的要求。我有以下相关问题。
让我们来看一下MOVUP(D / S)指令(0F 10
)。如果我正确遵循2字节VEX前缀编码:
以下两种指令编码产生相同的结果:
db 0fh, 10h, 00000000b ; movups xmm0,xmmword ptr [rax]
db 0c5h, 11111000b, 10h, 00000000b ; vmovups xmm0,xmmword ptr [rax]
由于这两个:
db 066h, 0fh, 10h, 00000000b ; movupd xmm0,xmmword ptr [rax]
db 0c5h, 11111001b, 10h, 00000000b ; vmovupd xmm0,xmmword ptr [rax]
因此,我的问题是:
v
这些说明中的第一个代表什么?仅仅是表示VEX
前缀的使用吗?
如果我VEX
在上面的示例中使用或不使用前缀,是否有任何区别(指令长度除外)?
我试图在他们的文档中了解Intel的语法。说,此屏幕截图:
在VEX.128.0F.WIG
我可以看到的.128
是L
第二个VEX
字节的位2()。然后.0F
是一个3字节的VEX
前缀,m-mmmm
格式为00001
,对吗?但是WIG
零件代表什么呢?
是VEX
前缀仅由Intel CPU的认可?AMD呢?
最后,movups
和之间有什么区别movupd
?似乎他们两个都只是从源内存中移出了16个字节:
进入xmm
寄存器:
而“双”或“单”精密包装的确没有任何区别。
多谢您对我的耐心配合。