分类:
2009-11-16 22:33:47
下面举一个例子:
在VC 6 SP6中可以直接在内联汇编中使用mmx指令,而且调试时也能查看MMX寄存器
__int16 a[]={1,2,3,4}
__int16 b[]={5,6,7,8}
_asm{
movq mm0,a //将数组a中的4个数一次存入mm0
movq mm1,b //将数组b中的4个数一次存入mm0
paddsw mm0,mm1 //16位带符号的饱和相加,结果存在mm0中
movq a,mm0 //再把mm0中的结果存放在数组a中
emms //千万别忘了,擦干净
}
也可以不用内联汇编直接用函数,MS的最新的SDK和INTEL的编译器都支持这种方式
#include
__m64 a=_mm_set_pi16(1, 2, 3, 4); //向a中写入4个16位的整数
__m64 b=_mm_set_pi16(5, 6, 7, 8); //最后一位写入最低位,即8写入最低位
a=_m_paddsw(a,b); //完成16位加法运算
_m_empty; //一样不要忘记擦PP,嘿嘿
以上只是最基本最简单的介绍,MMX一共有57条指令,包括基本算术运算指令,比较指令,转换指令,逻辑指令,位移和传输指令,此处就不一一列举,详细的指令介绍请参看INTEL的官方网站。但请记住MMX是针对整数运算的,千万不要用于浮点运算,浮点运算要用更为强大的SSE指令完成,预知SSE详解且待下回分解。