最简单的方法可能是使用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)
Run Code Online (Sandbox Code Playgroud)
它存储 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)
Run Code Online (Sandbox Code Playgroud)
如果这种情况发生多次,您可以提前加载蒙版,以避免重复加载的损失。
归档时间: |
|
查看次数: |
165 次 |
最近记录: |