MOVDQA和MOVAPS x86指令之间的区别?

时间:2011-07-13 11:21:42

标签: assembly x86 mov sse

我正在寻找英特尔数据表:英特尔®64和IA-32架构 软件开发人员手册,我找不到

之间的区别
  • MOVDQA :移动对齐双四字
  • MOVAPS :移动对齐打包单精度

在英特尔数据表中,我可以找到两个说明:

  

该指令可用于从128位加载XMM寄存器   内存位置,用于将XMM寄存器的内容存储到   128位存储器位置,或在两个XMM寄存器之间移动数据。

唯一的区别是:

  

要将双四字移入或移出未对齐的内存位置,请使用   MOVDQU指令。

  

将打包的单精度浮点值移入或移出   未对齐的内存位置,请使用MOVUPS指令。

但是我找不到两个不同指令的原因?

那么有人可以解释这个区别吗?

1 个答案:

答案 0 :(得分:43)

在功能上,它们完全相同。

某些(但不是全部)微架构上,由于“域跨越处罚”,存在时序差异。因此,当数据与整数SSE指令一起使用时,通常应使用movdqa;当数据与浮点指令一起使用时,通常应使用movaps。有关此主题的更多信息,请参阅Intel优化手册或Agner Fog优秀的微体系结构指南。请注意,这些延迟通常与寄存器寄存器移动而不是加载或存储相关联。