MOVDQA和MOVAPS x86指令之间的区别? [英] Difference between MOVDQA and MOVAPS x86 instructions?

查看:3524
本文介绍了MOVDQA和MOVAPS x86指令之间的区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在寻找的英特尔数据表:英特尔®64和IA-32架构
软件开发人员手册
,我无法找到的区别的 MOVDQA MOVAPS x86指令?

I'm looking Intel datasheet: Intel® 64 and IA-32 Architectures Software Developer’s Manual and I can't find the difference between MOVDQA and MOVAPS x86 instructions?

在英特尔数据表我能找到两个指令:

In Intel datasheet I can find for both instructions:

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

This instruction can be used to load an XMM register from a 128-bit memory location, to store the contents of an XMM register into a 128-bit memory location, or to move data between two XMM registers.

唯一的区别是:

要移动双四字或未对齐的内存位置,使用
  该指令MOVDQU

To move a double quadword to or from unaligned memory locations, use the MOVDQU instruction.

要移动挤满单precision浮点值或从
  未对齐的内存位置,使用MOVUPS指令。

To move packed single-precision floating-point values to or from unaligned memory locations, use the MOVUPS instruction.

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

But I can't find the reason why two different instructions?

所以任何人可以解释的区别?

推荐答案

在功能,它们是相同的。

In functionality, they are identical.

部分(但不是全部)微架构,也有因域交叉处罚规定时间性差异。出于这个原因,人们通常应该使用 MOVDQA 当数据被用整数SSE指令使用, MOVAPS 当数据被与浮点指令使用。有关此主题的更多信息,请查阅英特尔优化手册,或瓦格纳雾的出色微架构指南。请注意,这些延迟是最经常使用寄存器寄存器移动,而不是加载或存储相关的。

On some (but not all) micro-architectures, there are timing differences due to "domain crossing penalties". For this reason, one should generally use movdqa when the data is being used with integer SSE instructions, and movaps when the data is being used with floating-point instructions. For more information on this subject, consult the Intel Optimization Manual, or Agner Fog's excellent microarchitecture guide. Note that these delays are most often associated with register-register moves instead of loads or stores.

这篇关于MOVDQA和MOVAPS x86指令之间的区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆