C++ 如何使用mmx将值保存到变量?(c+;+;)

C++ 如何使用mmx将值保存到变量?(c+;+;),c++,arrays,assembly,mmx,C++,Arrays,Assembly,Mmx,如何继续代码,例如数组的3个元素存储在变量A中。也就是说,我只需要取一个元素并将其保存到变量中是否必须使用assembly?本质非常简单你说的“继续”是什么意思?您不加载3个元素或元素matr1[3],只加载matr1[0]和matr1[1],在mm0的两半中加载两个int32\tDWORD。您是否仍在考虑像上一个问题中那样的16位单词元素,您在32位dword数组的数据上使用了paddw?无论如何,使用pshufw或punpckhdq,或psrlq将其洗牌/移动到底部,以便movd。如果您关心

如何继续代码,例如数组的3个元素存储在变量A中。也就是说,我只需要取一个元素并将其保存到变量中

是否必须使用assembly?本质非常简单你说的“继续”是什么意思?您不加载3个元素或元素
matr1[3]
,只加载
matr1[0]
matr1[1]
,在
mm0
的两半中加载两个
int32\t
DWORD。您是否仍在考虑像上一个问题中那样的16位单词元素,您在32位dword数组的数据上使用了
paddw
?无论如何,使用
pshufw
punpckhdq
,或
psrlq
将其洗牌/移动到底部,以便
movd
。如果您关心在奔腾MMX上的工作,请仔细检查其中是否有仅在奔腾III和SSE1中才出现的新功能。(即新的MMX指令有时称为MMXEXT)。另外,您不需要LEA,这只会使MSVC内联asm的效率更加低下。或者您是指具有值
3
matr1[0]
元素?显然
movd[A],mm0
,就像您将其存储到
结果[0]
中一样。如果您没有使用MSVC内联asm,或者如果您想对标量值进行更多操作,则可以
movd eax,mm0
将该值保存在整数寄存器中。IIRC在他的优化指南中有一个关于MMX的部分,或者至少是关于SSE2的部分。一切都解决了,谢谢
int А;
int32_t matr1[10] = { 3,10,100,1000,2,40,200,3}; // first matrix
int32_t result[10] = {}; //result
...
_asm{
lea eax,[matr1]
lea edx,[result]
movq mm0,[eax]
movd[edx],mm0

}