嘿,我在 xmm 暫存器中有 3 個整數,最大值為 255。我想將它們轉換為位元組,并將它們保存到記憶體中。我不知道如何處理它。我正在考慮從 xmm1 暫存器中獲取這些數字并將它們保存到簡單的 eax 暫存器中,然后將最低位元組移動到記憶體中,但我不確定如何從 xmm 暫存器中獲取整數。我只能在第 0 個位置獲取元素,但如何移動其余元素?還有對我有用的完美指令VPMOVDB但是我不能在我的處理器上使用它有什么替代品嗎?
uj5u.com熱心網友回復:
最簡單的方法可能是使用pshufb置換位元組,然后movd存盤資料:
; convert dwords in xmm0 into bytes and store into dest
pshufb xmm0, xmmword ptr mask
movd dword ptr dest, xmm0
...
align 16
mask db 0, 4, 8, 12, 12 dup (-1)
這存盤 4 個位元組而不是 3 個位元組,因此請確保您的代碼可以處理它。也可以只存盤 3 個位元組,但需要更多的作業:
; convert dwords in xmm0 into bytes and store into dest
pshufb xmm0, xmmword ptr mask
movd eax, xmm0
mov word ptr dest, ax
bswap eax
mov byte ptr dest 2, ah
...
align 16
mask db 0, 4, 8, 12, 12 dup (-1)
如果這種情況不止一次發生,您可以提前加載遮罩以避免重復加載它的懲罰。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/411257.html
標籤:
