X86 是否有任何指令添加MMX寄存器中的所有字节?

X86 是否有任何指令添加MMX寄存器中的所有字节?,x86,add,mmx,X86,Add,Mmx,我需要计算MMX寄存器中4个整数的和。例如,我有这个MMX寄存器: 我想得到这个结果(我不介意它是在同一个寄存器中还是在正常寄存器中): 我想知道是否有执行该操作的指令。我正在windows中使用x86程序集。 我的第一个猜测是把41放在另一个MMX寄存器中,然后调用pmadwd,这样我就得到了[X1+X2][X3+X4],但我认为这太脏了 提前感谢。PMADDWD实际上是一种很好的求和方法-即使使用被乘数1“浪费”了一个乘法运算,但您可以免费获得加宽(解包)运算,因此您可以从一条指令中获得很

我需要计算MMX寄存器中4个整数的和。例如,我有这个MMX寄存器: 我想得到这个结果(我不介意它是在同一个寄存器中还是在正常寄存器中):

我想知道是否有执行该操作的指令。我正在windows中使用x86程序集。 我的第一个猜测是把4
1
放在另一个MMX寄存器中,然后调用
pmadwd
,这样我就得到了[X1+X2][X3+X4],但我认为这太脏了


提前感谢。

PMADDWD实际上是一种很好的求和方法-即使使用被乘数1“浪费”了一个乘法运算,但您可以免费获得加宽(解包)运算,因此您可以从一条指令中获得很多值。

是X1、X2、X3,X4真的是所有不同的宽度,还是这只是图表的问题?对不起,我不是一个很好的抽屉。它们都是相同的长度-还有一个问题,你真的是指MMX(64位SIMD)还是指SSE(128位SIMD)?针对零寄存器使用
psadbw
的可能重复,以获得无符号字节的水平和。(你的问题标题是字节,但你似乎在使用16位单词,所以不清楚。)好的,我知道我要找的指令不存在。另一件事,一旦我把它设为[X1+X2][X3+X4],有没有办法以双字形式访问更高的部分?目前,我正在将较低的一个移动到寄存器,然后使用
psrlq mm2,32
向右移动,对不起-我只使用SSE,而不是MMX-如果您找不到合适的,您可能想发布另一个问题。