文档详情

微机原理-第5版-周荷琴-第14章.pptx

发布:2025-04-09约3.58千字共10页下载文档
文本预览下载声明

《微型计算机原理与接口技术》

第5版第14章SIMD指令和程序设计方法

14.4利用SIMD指令进行程序设计

对数据和变量进行定义时,首先要申明数据的类型,说明参加运算的数是定点数还是浮点数。采用汇编语言和C语言混合编程的方法设计程序,设定程序的运行环境为VisualC++.NET。01下面给出用SIMD指令编写的3个程序设计实例。如果是浮点数,还要说明是否是对齐的浮点数,是单精度浮点数还是双精度浮点数,它们是如何存放的等。02

已知:dy=0.2345要求:编程调整数据结构,使xmm4寄存器中的值为:1-dy,dy,1-dy,dy并把调整结果显示在屏幕上。程序运行后应在CRT上显示:xmm4中的值为:0.76550,0.23450,0.76550,0.23450例14.34编程调整数据结构

intmain() //主程序,用C语言编写{declspec(align(16))floatf[4]; //声明16位对齐的浮点数数组,有4个元素floatmyone=1.0; //定义浮点数myonefloatdy=0.2345; //定义浮点数dy_asm //在C++语言中插入汇编语言程序{movdxmm1,myone //xmm1=0,0,0,1,16位浮点数送低位movdxmm4,dy //xmm4=0,0,0,dysubpsxmm1,xmm4//xmm1=0,0,0,1-dy标量相减unpcklpsxmm4,xmm1 //xmm4=0,0,1-dy,dy低位打散交织存放movapsxmm1,xmm4//xmm1=0,0,1-dy,dymovlhpsxmm4,xmm1 //xmm4=1-dy,dy,1-dy,dy源低送目的高movapsf,xmm4 //f为数组地址}printf(“xmm4中的值为:%f,%f,%f,%f\n”,f[3],f[2],f[1],f[0]);} //打印寄存器xmm4中4个浮点数的值

例14.35访问存储器的例子定义3个数组a,b,c,每个数组存放4个数据。要求:a数组存放数据0,1,2,3;b数组的数应是a的10倍;c数组的数为a、b数组之和。然后将各数组中的数依次放入内存单元,并将c数组的值打印出来。程序运行结果为在CRT上显示:0,11,22,33voidaccessMem() //定义函数{_declspec(align(16))floata[4]; //声明16位对齐的4个浮点数组成的a数组_declspec(align(16))floatb[4]; //声明b数组_declspec(align(16))floatc[4]; //声明c数组for(intI=0;I4;I++)//初始化a[4]和b[4]的内容{a[I]=I;b[I]=10*I;}

_asm //用汇编语言编程求数组c的值{pushebxleaecx,a[0] //将数组a的初始地址读入ecxleaedx,b[0] //将数组b的初始地址读入edxleaebx,c[0] //将数组c的初始地址读入ebxmovapsxmm0,[ecx]//将[ecx]指定的a数组内容读入xmm0movapsxmm1,[edx]//将[edx]指定的b数组内容读入xmm1addpsxmm0,xmm1//a数组与b数组内容相加,存入xmm0movaps[ebx],xmm0//c数组存入[ebx]所指定的内存单元popebx}printf(C数组的值为:%f,%f,%f,%f\n,c[0],c[1],c[2],c[3]);} //打印c数组内容in

显示全部
相似文档