本文介绍了你如何移动XMM寄存器之间的128位值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在装配看似琐碎的问题:我想复制整个XMM0寄存器XMM3。我试过

Seemingly trivial problem in assembly: I want to copy the whole XMM0 register to XMM3. I've tried

movdq xmm3, xmm0

但MOVDQ不能用于两个XMM寄存器之间移动的值。我应该怎么办呢?

but MOVDQ cannot be used to move values between two XMM registers. What should I do instead?

推荐答案

这是 MOVAPD MOVAPS MOVDQA

movaps xmm3, xmm0

他们都做同样的事情,但有一个问题:

They all do the same thing, but there's a catch:


  • MOVAPD MOVAPS 中的浮点域中操作。

  • MOVDQA 工作在整数域

  • movapd and movaps operate in the floating-point domain.
  • movdqa operates in the integer domain

根据您的数据类型,使用适当的一个,以避免域变化的摊位。

Use the appropriate one according to your datatype to avoid domain-changing stalls.

此外,没有理由使用 MOVAPD 。始终使用 MOVAPS 来代替,因为 MOVAPD 需要一个额外的字节来恩code。

Also, there's no reason to use movapd. Always use movaps instead because movapd takes an extra byte to encode.

这篇关于你如何移动XMM寄存器之间的128位值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-29 08:49