当前位置: 首页 > 图文教程 > 开发语言 > VC++ > MMX指令集在C++中的使用

VC++
WTL字体类
CTreeCtrl类的递归使用
类似EXCEL的报表类库
实现类似VC中可设断点的编辑窗口
一个实用的CToolBar扩展类CToolBarEx
VC学习笔记之一:怎样实现XP风格按钮
增强GridCtrl
支持数据项查找功能的树控制(CTreeCtrl)类
如何锁定 ListView 的栏目头宽度
带文字的进度条
三态选择树实现终结者
如何定制对话框系统菜单
让CButtonST 类支持鼠标掠过时发声
可以显示多行文字的工具条
利用钩子实现菜单阴影效果
动态真彩工具栏
可以替代系统记事本的程序
如何实现三态选择树
一个好用的DBGRID
告别图标失真的烦恼

VC++ 中的 MMX指令集在C++中的使用


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 132 ::
收藏到网摘: n/a

MMX指令集在C++中的使用
作者:孙原

下载本文示例源代码

上次在《关于内联汇编的几个技巧》一文中只是简单地介绍了如何在C++中使用内联汇编,这一次先对上一次的文章作一补充,然后介绍如何使用MMX指令。

一、 内联汇编的一般原则:

1、 自由使用通用寄存器;(EAX,EBX,ECX和EDX)
2、 其它寄存器利用堆栈保留,使用,最后恢复;
一般的像下面这样:

__asm{	push ebp	push esp	……….//使用EBP和ESP	pop esp	pop	ebp}
二、 内联汇编__asm可以单独使用
例如:
__asm mov eax,anyval1__asm mov ebx,anyval2
三、 函数返回值可以直接放到eax中,可以不理会警告
例如:
int anyfun(……/*anyparm*/){	int irtn;	//函数返回值	…… //函数语句	__asm mov eax,irtn //代替return irtn;但编译器会发出警告,可以不理它}
四、 内联汇编不区分大小写,语法同普通汇编

例如:
__asm{	mov eax,ebx	MOV EAX,EBX	//同上一句}
注意:C++的变量还是区分大小写的

五、 内联汇编尽量使用__asm或_asm关键字,而不用标准C++的asm关键字(这个是微软说的)
以上只是一些关于内联汇编的补充,我将出一系列围绕内联汇编的文章,下面接着上一次的话题详细一点地讲一下MMX指令的调用

1、 MMX指令集简介

[数据传输指令]
movq //传输64位整数
movd //传输32位整数

[数据打包转换指令]
PACKSSWB //Pack words into bytes with signed saturation.
PACKSSDW //Pack doublewords into words with signed saturation.
PACKUSWB //Pack words into bytes with unsigned saturation.
PUNPCKHBW //Unpack high-order bytes.
PUNPCKHWD //Unpack high-order words.
PUNPCKHDQ //Unpack high-order doublewords.
PUNPCKLBW //Unpack low-order bytes.
PUNPCKLWD //Unpack low-order words.
PUNPCKLDQ //Unpack low-order doublewords.
注:这一组指令我没有具体用过,不知道是干什么的,请高手赐教!小弟先谢了!

[ 算术指令]
PADDB
PADDW
PADDD
PADDSB
PADDSW
PADDUSB
PADDUSW
PSUBB
PSUBW
PSUBD
PSUBSB
PSUBSW
PSUBUSB
PSUBUSW
PMULHW
PMULLW
PMADDWD

[ 比较指令]
PCMPEQB Compare packed bytes for equal.
PCMPEQW Compare packed words for equal.
PCMPEQD Compare packed doublewords for equal.
PCMPGTB Compare packed signed byte integers for greater than.
PCMPGTW Compare packed signed word integers for greater than.
PCMPGTD Compare packed signed doubleword integers for greater than.
这组指令用于成组比较数据

[ 位逻辑指令]
PAND Bitwise logical AND.
PANDN Bitwise logical AND NOT.
POR Bitwise logical OR.
PXOR Bitwise logical exclusive OR.
这组指令与AND,XOR基本相同,都是按位进行逻辑运算。

[ 移位和循环移位指令]
PSLLW //Shift packed words left logical.
PSLLD //Shift packed doublewords left logical.
PSLLQ //Shift packed quadword left logical.
PSRLW //Shift packed words right logical.
PSRLD //Shift packed doublewords right logical.
PSRLQ //Shift packed quadword right logical.
PSRAW //Sh