6
彙編中看似微不足道的問題:我想將整個XMM0寄存器複製到XMM3。我試過如何在XMM寄存器之間移動128位值?
movdq xmm3, xmm0
但是MOVDQ不能用於在兩個XMM寄存器之間移動值。我該怎麼做呢?
彙編中看似微不足道的問題:我想將整個XMM0寄存器複製到XMM3。我試過如何在XMM寄存器之間移動128位值?
movdq xmm3, xmm0
但是MOVDQ不能用於在兩個XMM寄存器之間移動值。我該怎麼做呢?
這是movapd
,movaps
,或movdqa
movaps xmm3, xmm0
他們都做同樣的事情,但有一個問題:
movapd
和movaps
在浮點域進行操作。movdqa
工作在整數域使用根據自己的數據類型,以避免域變化的攤位一個合適的。
此外,沒有理由使用movapd
。總是使用movaps
,因爲movapd
需要額外的字節進行編碼。
movdqa是我一直在尋找:)謝謝。這很快:) PS。浮點移動實際上與整數移動有什麼不同?對我來說,兩者都應該是簡單的複製... – lampak 2011-12-29 18:03:35
在Intel處理器上,有單獨的FP和整數單元。當您執行一個單位的指令時,該值將被移至該單位。但是,當你在不同的域中發佈一條指令時,它必須移動到新的單位 - 1-2週期懲罰。因此,如果可能,最好在域中保留一個值 - 因此爲什麼有不同的'mov'指令。如果你正在進行整數運算並且使用'movaps',那麼你需要支付一筆費用來將這個值移到FP單元上,而另一個懲罰就是在發給它的下一個整數指令上移回去。 – Mysticial 2011-12-29 18:58:08
同樣適用於邏輯運算符:例如:'por','orps'和'orpd' – Mysticial 2011-12-29 19:00:15