MMX的益处在于,当时存在的操作系统不必为此而做出任何修改便可以轻松地执行MMX程序。但是,问题也比较明显,那就是MMX指令集与x87浮点运算指令不能够同时执行,必须做密集式的交错切换才可以正常执行,这种情况就势必造成整个系统运行质量的下降。[1]
1.数据转移指令(Data Movement):
(1)movd;
(2)movq;一次性将32位或64位的数据在寄存器与内存之间转移。操作DWORD时,MMX寄存器只使用低32位。
2.算术指令:
(1)padd[b,w,d],无符号数加;
(2)padds[b,w],饱和模式的有符号数加;
(3)paddus[b,w],饱和模式的无符号数加;
(4)psub[b,w,d],无符号数减;
(5)psubs[b,w],饱和模式的有符号数减;
(6)psubus[b,w,d],饱和模式的无符号数减;
(7)pmulhw,WORD类型的有符号数相乘后取高16位;
(8)pmullw,WORD类型的有符号数相乘后取低16位;
(9)pmaddwd,WORD类型的向量点乘运算。
3.移位指令:
(1)psll[w,d,q],逻辑左移;
(2)psrl[w,d,q],逻辑右移;
(3)psra[w,d,q],算术右移。
4.逻辑指令:
(1)pand位与操作;
(2)pandn将目的操作数取反后再和源操作数做位与操作;
(3)por位或操作;
(4)pxor按位异或操作。
5.比较指令:
6.数据打包/拆包指令:
7.MMX状态清除指令:
(MMX指令集的详解可以阅读参考资料:)
如果CPU能够具有了MMX指令集,就可以使用Visual Studio .NET 2003提供的对MMX指令集支持的C++函数库了,可以查看MSDN中的一个Visual C++ CPUID的例子,它可以帮你检测你的CPU是否支持SSE、MMX指令集或其它的CPU功能。 [2]