这些说明之间的区别是什么? MOVDQU是一个未对齐的双四字移动,MOVUPD是一个未对齐的两个64位浮点移动。我的意思是他们只是移动未对齐的128位数据。
MOVDQU位于第948页,MOVUPD位于intel x64手册的第995页。
答案 0 :(得分:3)
说明
一起使用时,它们都是相同的MOVDQA
,MOVDQU
,MOVAPS
,MOVUPS
,MOVAPD
和MOVUPD
当与[128位]寄存器操作数
然后他接着说(他在他的例子中使用了对齐的版本,但我猜这同样适用于未对齐的变体):
在Intel Core 2及更早版本的Intel处理器上,执行了一些浮点指令 整数单位。这包括XMM移动指令,布尔值和一些shuffle和 包装说明。 这些说明与指令混合时会出现旁路延迟 使用浮点单元。在大多数其他处理器上,使用的执行单元是 根据指令名称,例如,
MOVAPS XMM1,XMM2
使用浮点单元,MOVDQA XMM1,XMM2
使用整数单位。
读取或写入内存的指令使用单独的单元。旁路延迟来自 存储单元到浮点单元可能比某些整数单元长 处理器,但它并不取决于指令的类型。因此,没有区别 在当前处理器上
MOVAPS XMM0,[MEM]
和MOVDQA XMM0,[MEM]
之间的延迟, 但不能排除未来处理器会有所不同。
[Y]您可以使用
MOVAPS
代替MOVAPD
或MOVDQA
来移动数据 内存或寄存器之间。 使用时,某些处理器会发生旁路延迟MOVAPS
用于将整数指令的结果移动到另一个寄存器,但不是 将数据移入或移出内存。