2012-07-19 137 views
2

我正在使用数字火星C++和VC++ 10编译器,我有masm32汇编器。我如何使用mm0 .... mm7 64位寄存器在eax,eabx 32位寄存器之间切换数据? 我可以在C++编译器asm {}或_asm {}中使用它们吗?我如何使用MM0通过我的CPU的MM7寄存器?

像这样的东西可能是有用的:

mmTo32 eax,mm3 
mmTo16 bx,mm6 
mmTo8 cl,mm4 
ToMM mm2,eax 

我用Google搜索,但无法找到足够。

谢谢。

+0

这只是一个好奇的事情?有SSE时几乎没有理由使用MMX。 – Mysticial 2012-07-19 16:35:49

+0

只需使用MMX内在函数 - 它们在''中。 – 2012-07-19 16:36:18

回答

5

使用SSE2,因为XMM更好并且得到支持(感谢Harold的评论,XMM与MM寄存器无关,必须与AVX/SSE混合在一起)。

从MSDN看到这个页面:http://msdn.microsoft.com/en-us/library/dzs626wx(v=vs.71).aspx

所有你需要的是这里的内部函数。它们被展开为由编译器内联汇编。

您需要_mm_loadl_pi/_mm_loadh_pi_mm_storel_pi/_mm_storeh_pi从内存中加载/存储值/。

只需包含“xmmintrin.h”文件并在项目选项中启用SSE代码生成。

+2

MM寄存器别名为浮点堆栈,而不是XMM寄存器的低层。 – harold 2012-07-19 17:05:25

+0

@harold修复了它。 – 2012-07-19 17:13:24

+0

是的,我的意思是新的大登记册。我不知道哪一个更好,更容易访问 – 2012-07-19 17:33:26