MOVUPD与MOVDQU(x86 / x64组装)

时间:2015-05-13 05:12:09

标签: assembly x86 64-bit

这些说明之间的区别是什么? MOVDQU是一个未对齐的双四字移动,MOVUPD是一个未对齐的两个64位浮点移动。我的意思是他们只是移动未对齐的128位数据。

MOVDQU位于第948页,MOVUPD位于intel x64手册的第995页。

1 个答案:

答案 0 :(得分:3)

Agner Fog说:

  

说明MOVDQAMOVDQUMOVAPSMOVUPSMOVAPDMOVUPD   当与[128位]寄存器操作数

一起使用时,它们都是相同的

然后他接着说(他在他的例子中使用了对齐的版本,但我猜这同样适用于未对齐的变体):

  

在Intel Core 2及更早版本的Intel处理器上,执行了一些浮点指令   整数单位。这包括XMM移动指令,布尔值和一些shuffle和   包装说明。 这些说明与指令混合时会出现旁路延迟   使用浮点单元。在大多数其他处理器上,使用的执行单元是   根据指令名称,例如, MOVAPS XMM1,XMM2使用浮点单元,   MOVDQA XMM1,XMM2使用整数单位。

  

读取或写入内存的指令使用单独的单元。旁路延迟来自   存储单元到浮点单元可能比某些整数单元长   处理器,但它并不取决于指令的类型。因此,没有区别   在当前处理器上MOVAPS XMM0,[MEM]MOVDQA XMM0,[MEM]之间的延迟,   但不能排除未来处理器会有所不同。

  

[Y]您可以使用MOVAPS代替MOVAPDMOVDQA来移动数据   内存或寄存器之间。 使用时,某些处理器会发生旁路延迟   MOVAPS用于将整数指令的结果移动到另一个寄存器,但不是   将数据移入或移出内存