2011-12-29 88 views

回答

10

這是movapdmovaps,或movdqa

movaps xmm3, xmm0 

他們都做同樣的事情,但有一個問題:

  • movapdmovaps在浮點域進行操作。
  • movdqa工作在整數域

使用根據自己的數據類型,以避免域變化的攤位一個合適的。

此外,沒有理由使用movapd。總是使用movaps,因爲movapd需要額外的字節進行編碼。

+1

movdqa是我一直在尋找:)謝謝。這很快:) PS。浮點移動實際上與整數移動有什麼不同?對我來說,兩者都應該是簡單的複製... – lampak 2011-12-29 18:03:35

+4

在Intel處理器上,有單獨的FP和整數單元。當您執行一個單位的指令時,該值將被移至該單位。但是,當你在不同的域中發佈一條指令時,它必須移動到新的單位 - 1-2週期懲罰。因此,如果可能,最好在域中保留一個值 - 因此爲什麼有不同的'mov'指令。如果你正在進行整數運算並且使用'movaps',那麼你需要支付一筆費用來將這個值移到FP單元上,而另一個懲罰就是在發給它的下一個整數指令上移回去。 – Mysticial 2011-12-29 18:58:08

+1

同樣適用於邏輯運算符:例如:'por','orps'和'orpd' – Mysticial 2011-12-29 19:00:15