资源描述:
《信号与信息处理综合实验实验报告二矩阵乘法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、信号与信息处理综合实验实验报告实验二矩阵乘法一、实验要求:完成矩阵A*B+C*D其中:1.A,B,C和D矩阵都是六维矩阵2.要求有汇编语言和C语言两种算法编写3.要求有子程序的调用二.源代码汇编部分:#include,,defBF535.h".sectiondatal;.BYTE2aArray[36]="a.dat";.BYTE2bArray[36]=,,b.dat";.BYTE2cArray[36]=nc.dat";.BYTE2dArray[36]="d.datH;.BYTE2eArray[36];.sectionprogram;.global_main;
2、.global_xiangcheng;main:RO=SYSCFG;//系统配置寄存器bitset(RO,0x1);//位设置命令,把R0中0x1位置设置为1SYSCFG=RO;//SYSCFGOxl位置为周期计数器使能,1使能64位自由运行周期计数器Ml=12;〃利用Ml来移动指针使其指向下一列数据Pl=6;//循环次数I0.H=aArray;〃把a矩阵的地址给1010丄=aArray;11.H=bArray;〃把b矩阵的地址给1111丄二bArray;12.H=eArray;〃把e矩阵的地址给12I2.L=eArray;CALL_xiangcheng;/
3、/调用子程序,完成aArray*bArray10.H=cArray;〃把c矩阵的地址给1010丄=cArray;11.H=dArray;//把d矩阵的地址给1111.L=dArray;12.H=eArray;〃把e矩阵的地址给1212丄=eArray;CALL_xiangcheng;//调用子程序,完成aArray*bArray+cArray*dArrayidle;//空闲指令:通过设置SEQSTAT寄存器的idle_req位使Blackfin处理器进入空闲状态_main.end:〃矩阵相乘子函数〃_xiangcheng:〃需要保存外层循环信息loopIpl
4、LCO=P1;//定义循环计数器LCO为循坏Ipl计数,次数为6(fori=l:6)loop_beginIpl;//开始循环Ipl[-sp]=ll;/*saveloopIpl*/[--sp]=IO;[-sp]=LCO;//LCO寄存器保留剩余循环次数[-sp]=LTO;//LTO寄存器保持循环中第一条语句的前地址[-sp]=LBO;//LBO寄存器保持循环中最后一条语句的前地址loopIp2LC1=P1;//定义循环计数器LCO为循环Ip2计数,次数为6(forj=l:6)loop_beginIp2;〃开始循环Ip2[-sp]=IO;/*saveloopIp
5、2*/[~sp]=ll;loopIp3LCO二Pl;〃定义循环计数器LCO为循环Ip3计数,次数为6(fork=l:6)loop_beginIp3;R1.L=W[IO];//把10指针指向的数据a(i,k)给R110+=2;//移动10指针,使其指向矩阵该行的下一列元素a(i,k+l)R2.L=W[I1];//把11指针指向的数据b(k,j)给R2I1+=M1;〃移动指针11,使得指针后移六个数据,指向该列的下一行元素b(k+lj)RO=R1.L*R2.L(IS);//做矩阵对应相乘的元素相乘运算a(i,k)*b(k,j)//IS:无符号整数R3=R3+R0
6、;//累加元素相乘结果,得到结果矩阵的元素c(i,j)=c(i,j)+a(i,k)*b(k,j)loop_endIp3;R4.L=W[I2];//取出结果矩阵的数据以便在第二次调用子函数的时候完成两次矩阵结果做和的运算R3二R3+R4;//将本次运算结果累加结果矩阵中对应的元素W[I2++]=R3.L;//保存运算结果R3=0;〃清0R3,为下一次循环做准备H=[SP++];//输出Ip2参数10二[SP++];11+=2;//移动指针II,此次运算设置为乘以第二个矩阵的下一列loop_endIp2;LB0=[SP++];//输出Ip2参数LT0=[SP++
7、];LC0=[SP++];IO=[SP++];ll=[SP++];〃为此次乘法循环设置为第一个矩阵的下一行元素10+二Ml;〃移动指针10,使得指针后移六位数据,指向该列的下一行元素loop_endIpl;RTS;_xiangcheng.end:C语言部分:#include#include#includevoidxiangcheng(int*Jnt*Jnt*,int*,int*);//矩阵相乘子函数voidmain(){inti,j,k;inta[6][6],b⑹[6],c[6][6],d[6]⑹,e⑹⑹
8、;〃五个六维数组,保存矩阵数据srand(time(