有没有办法将整数转换为字节,知道这些整数在字节范围内。使用上证所?

Is there a way to cast integers to bytes, knowing these ints are in range of bytes. Using SSE?

在 xmm 寄存器中,我有 3 个整数,其值小于 256。我想将它们转换为字节,并将它们保存到内存中。我不知道如何处理它。
我正在考虑从 xmm1 获取这些数字并将它们保存到 eax,然后将最低字节移动到内存,但我不确定如何从 xmm 寄存器获取整数。我只能得到第0个位置的元素,但是如何移动其余的?
存在适合我的完美指令 VPMOVDB,但我无法在我的处理器上使用它。有什么替代品吗?

最简单的方法可能是使用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)

如果不止一次出现这种情况,您可以提前加载掩码,避免重复加载的惩罚。