专业:软件工程班级:姓名:学号:XJTUSE计算机体系结构MMX实验报告Andy2014/12/31计算机体系结构----------------------------------------------------------------------------------------------------------MMX实验报告计算机体系结构MMX实验一、实验目的及要求了解并学习Inter微处理器的MMX/SSE相关的技术,用相关的技术,混合其他的编程语言对图像或者是视频进行处理。本实验的目的是通过MMX技术对图形的处理的强大的计算功能,实现图片的渐变,最终利用MMX技术实现一个简易的电子相册应用。二、实验环境本实验的实验的软件环境:操作系统:Windows764bitsSP1旗舰版开发IDE:visualstudio2010旗舰版硬件开发环境为LenovoIdeaPadY560处理器:Inter(R)Core(TM)i5CPUM480@2.67GHz2.67GHzRAM:8G三、实验内容与步骤1、MMX技术MMX是MultiMediaeXtensions(多媒体扩展)的缩写,是为了方便处理大量计算的视频、音频等多媒体数据,特地在CPU中加入的专门用来进行多媒体处理的多媒体数据处理指令MMX。MMXCPU极大地提高了电脑的多媒体(如立体声、视频、三维动画等)处理功能。MMX技术是继Intel386(TM)处理器(将体系结构扩展至32位)之后对Intel体系结构的最重要的加强。MMX技术的基础是一项称为单指令、多数据(SIMD)的技术。它使得许多条信息可由一条单一指令来处理,这种平行操作使性能得以大幅度地提高。1计算机体系结构----------------------------------------------------------------------------------------------------------MMX实验报告MMX技术随着出现后就以后再发展着,目前已经到了SSE指令集。在MMX到SSE之间本质是一样的,只是不用的是指令功能的增强和指令数目的增加,使得我们在处理计算密集型的数据时候更够节省更多的时间。以下就简单介绍下MMX/SSE相关的指令及其优点。MMX技术的基础是一项称为单指令、多数据(SIMD)的技术。它使得许多条信息可由一条单一指令来处理,这种平行操作使性能得以大幅度地提高。MMX基本的指令集有拷贝指令、运算指令、分组指令。MOVQ:64位数据拷贝MOVD:32位数据拷贝PUNPCKLBW/PUNPCKLWD/PUNPCKLDQ:将寄存器的32位数据交错组合为64位的数据PACKUSWB:将16位的数据转换为无符号的8位数据PACKSSWB/PACKSSDW:将32/16位数据转化为16/8位数据PADDB/W/D:加法的运算PASUB/W/D:减法运算等2、实验步骤及相关代码本实验采用的是MFC架构,在MFC中嵌入MMX代码进行图像的相关的处理。下面简单说明了简单的电子相册需求以及技术实现:1、打开文件,添加图片2、在客户区显示客户选择的图片的渐变效果在实现的过程中,按照MFC单文档架构,添加一个计时器,定时从文档中得到要显示的位图数据,并显示在客户区域中。下面给出详细的实验步骤及相关的代码。(1)建立MFC单文档工程SSE4(2)添加位图读取的相关的函数库。本实验在实验的过程中,读取BMP文件的代码是清华出版社和北京交通大学出版社出版的杨淑莹老师的《VC++图像处理程序设计》这本书中的的CDib函数库,主要的功能有:TCHAR*GetFileName();//得到位图文件的名称BOOLIsValid();DWORDGetSize();//得到位图的大小UINTGetWidth();//得到位图的宽度UINTGetHeight();//得到位图的高度UINTGetNumberOfColors();RGBQUAD*GetRGB();BYTE*GetData();//得到位图的像素数据BITMAPINFO*GetInfo();2计算机体系结构----------------------------------------------------------------------------------------------------------MMX实验报告WORDPaletteSize(LPBYTElpDIB);//得到调色板的大小WORDDIBNumColors(LPBYTElpDIB);voidSaveFile(constCStringfilename);voidLoadFile(constTCHAR*dibFileName);//加载位图文件在本实验中用到的主要的功能是以上注释出来的代码。另外在使用的过程中,由于我使用的特殊性,存在内存泄露的情况,我根据实际的情况对相关的代码做出了修改,下面给我我对CDib代码的修改:voidCDib::LoadFile(constTCHAR*dibFileName){……if(pDib)GlobalFreePtr(pDib);……}在多次加载文件时候,一直开辟内存空间,但是在源代码中并没有给出释放内存的相关的操作,所以我就在源代码...