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++的变量还是区分大小写的

时间: 2025-01-30 06:09:19

MMX指令集在C++中的使用的相关文章

基于MMX指令集的程序设计简介

MMX技术简介Intel 公司的MMX™(多媒体增强指令集)技术可以大大提高应用程序对二维三维图形和图象的处理能力.Intel MMX技术可用于对大量数据和复杂数组进行的复杂处理,使用MMX技术可处理的数据基本单位可以是字节(byte).字(word),或者是双字(double-word).Visual Studio .NET 2003提供了对MMX指令集特性的支持,从而可以不必编写汇编代码,直接使用C++代码就可以实现MMX指令的功能.通过参考Intel软件说明书(Intel Software

使用MMX/SSE汇编指令集优化视频开发

1.汇编指令集 目前大部分的PC机采用的都是Intel或者AMD的CPU,其支持的多媒体汇编指令有: MMX:多媒体扩展指令(MultiMedia eXtention),该指令由Intel在1996年为Pentium处理器开发,包括了57条多媒体指令,可以i一次处理多个数据.但是MMX指令不能与X86浮点运算指令同时执行,在某些场合使用受到一定限制. SSE:SIMD扩展指令集(Streaming SIMD Extension),也称作单指令多数据流扩展.其中的SIMD的含义为Single In

装机中10大常规性错误

对于初次涉足装机的读者而言,了解一下常见的概念性错误将大有裨益,或许你心中的不少心结也将被解开. DIY装机的稳定性不好       在很多用户的心目中,似乎DIY兼容机总是背负着"稳定性不佳"的莫须有罪名.事实上,如今PC的生产已经实现了高度配套化,很多品牌机厂商所做的也仅仅是组装,然后便是严格的稳定性测试.更为重要的是,在制作工艺飞速发展之下,硬件集成度越来越高,PC内部的架构已经远不如以往那样复杂,组装PC的技术含量也大幅度下降.       可以负责地说,DIY装机并不等于稳定

CPU指令集是什么

  所谓指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种新型的CPU在设计时就规定了一系列与其他硬件电路相配合的指令系统.而指令集的先进与否,也关系到CPU的性能发挥,它也是CPU性能体现的一个重要标志. SSE指令集 由于MMX指令并没有带来3D游戏性能的显著提升,1999年Intel公司在Pentium III CPU产品中推出了数据流单指令序列扩展指令(SSE).SSE兼容MMX指令,它可以通过SIMD(单指令多数据技术)和单时钟周期并行处理多个浮点来有效地提高浮点运

基于SSE指令集的程序设计简介

Intel公司的单指令多数据流式扩展(SSE,Streaming SIMD Extensions)技术能够有效增强CPU浮点运算的能力.Visual Studio .NET 2003提供了对SSE指令集的编程支持,从而允许用户在C++代码中不用编写汇编代码就可直接使用SSE指令的功能.MSDN中有关SSE技术的主题[1]有可能会使不熟悉使用SSE汇编指令编程的初学者感到困惑,但是在阅读MSDN有关文档的同时,参考一下Intel软件说明书(Intel Software manuals)[2]会使你

C语言调用汇编及使用指令集对代码进行优化实例教程

搭建环境 x264使用汇编优化的思想是将汇编代码编译到一个静态库里,供C代码调用,所以首先需要构建一个汇编函数得静态库.因为手动配置使用yasm来编译汇编文件,并生成一个lib相当麻烦,我选择的是使用cmake来构建. 在demo里有一个sum.asm的汇编文件,文件里是所有的汇编函数,通过yasm编译后生成sum.obj,然后通过sum.obj来创建一个sum.lib库供C代码使用.还有一个main.c的C文件,用来生成可执行文件main,CMakeLists.txt文件如下: cmake_m

享一个plpgsql中一个语句不同写法对于性能严重影响的问题(目前还找不到函数到底是怎样个调用法)

最近在测试cpu的avx指令集时无意中发现一个因为语句写法不同,性能相差极大的问题 一.定义两个测试函数 create or replace function md5_js() returns text as $$ declare v_i integer; v_md5 varchar; begin for v_i in 1..10000000 loop v_md5:=md5(random()::text); end loop; return 'ok'; end; $$ language plpg

新手必看-汇编语言超浓缩教程

" 哎哟,哥们儿,还捣鼓汇编呢?那东西没用,兄弟用VB"钓"一个API就够你忙活个十天半月的,还不一定搞出来."此君之言倒也不虚,那吾等还有无必要研他一究呢?(废话,当然有啦!要不然你写这篇文章干嘛.)别急,别急,让我把这个中原委慢慢道来:一.所有电脑语言写出的程序运行时在内存中都以机器码方式存储,机器码可以被比较准确的翻译成汇编语言,这是因为汇编语言兼容性最好,故几乎所有跟踪.调试工具(包括WIN95/98下)都是以汇编示人的,如果阁下对CRACK颇感兴趣--:二

内联汇编基础知识

几天看了孙原等几位仁兄关于汇编语言的几篇文章,颇感兴趣.于是查了查98版的MSDN中,其中也有几篇关于内联汇编的基础,索引字是asm.讲得不算太难,于是试着将其内容写下来了,特此贴来. 一.内联汇编简述 Visual C++ 6.0编译器下,内联汇编可以使用所有的Intel486处理器指令集.而且可以对目标处理器建立起伪指令来实现附加指令功能.内联汇编可以使用MASM编译器所允许的表达式,其中的一些表达式可以通过操作符和操作数的组合,对单精值进行运算. 虽然内联汇编可以访问C\C++中的数据变量