班级:2011147学号:201114705姓名:实验二基本算数运算一.实验目的和要求本实验学习使用定点DSP实现16位定点加、减、乘、除运算的基本方法和编程技巧,要求掌握CCS的基本设置,会编辑、打开.asm文件和加载.out文件。本实验的演示文件为exer1.out。二.实验原理1)定点DSP中的数据表示方法C54X是16位的定点DSP。一个16位的二进制数既可以表示一个整数,也可以表示一个小数。当它表示一个整数时,其最低位(D0)表示20,D1位表示21,次高位(D14)表示214。2)实现16位定点加法C54X中提供了多条用于加法的指令,如ADD,ADDC,ADDM和ADDS。其中ADDS用于无符号数的加法运算,ADDC用于带进位的加法运算(如32位扩展精度加法),而ADDM专用于立即数的加法。3)实现16位定点减法C54X中提供了多条用于减法的指令,如SUB,SUBB,SUBC和SUBS。其中SUBS用于无符号数的减法运算,SUBB用于带进位的减法运算(如32位扩展精度的减法),而SUBC为移位减,DSP中的除法就是用该指令来实现的。4)实现16位定点整数乘法在C54X中提供了大量的乘法运算指令,其结果都是32位,放在A班级:2011147学号:201114705姓名:或B寄存器中。乘数在C54X的乘法指令很灵活,可以是T寄存器、立即数、存贮单元和A或B寄存器的高16位。5)实现16位定点小数乘法在C54X中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘,其结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。C54X中提供了一个状态位FRCT,将其设置为1时,系统自动将乘积结果左移一位。但注意整数乘法时不能这样处理,所以上面的实验中一开始便将FRCT清除。两个小数(16位)相乘后结果为32位,如果精度允许的话,可以只存高16位,将低16位丢弃,这样仍可得到16位的结果。6)实现16位定点整数除法在C54X中没有提供专门的除法指令,一般有两种方法来完成除法。一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除以常数特别适用。另一种方法是使用SUBC指令,重复16次减法完成除法运算。7)实现16位定点小数除法在C54X中实现16位的小数除法与前面的整数除法基本一致,也是使用循环的SUBC指令来完成。但有两点需要注意:第一,小数除法的结果一定是小数(小于1),所以被除数一定小于除数。三.实验内容本实验以CCS软件开发工具为实验平台,利用C54x汇编语言实现加减乘除的基本运算,并通过CCS的存储器显示窗口观察结果。实验班级:2011147学号:201114705姓名:分两部完成:(1)编写实验程序代码本实验的汇编源程序代码主要分为六个部分:加法、减法、整数乘法、小数乘法、整数除法和小数除法。每个部分后面都有一条需要加断点的标志语句:nopFileName:exer1.asm.titleexer1.mmregs.def_c_int00DAT0.SET60HDAT1.SET61HDAT2.SET62HDAT3.SET63H.text_c_int00:Bstartstart:LD#004h,DP;置数据页指针STM#1000h,SP;置堆栈指针SSBXINTM;禁止中断bk0:ST#0012h,DAT0LD#0023h,AADDDAT0,A;加法操作:A=A+DAT0NOPNOPNOPNOPbk1:ST#0054h,DAT0LD#0002h,ASUBDAT0,A;减法操作:A=A-DAT0NOPNOPNOPNOPbk2:ST#0345h,DAT0STM#0002h,TMPYDAT0,A;乘法操作:A=DAT0*TNOPNOPNOPNOP班级:2011147学号:201114705姓名:bk3:ST#1000h,DAT0ST#0041h,DAT1RSBXSXM;无符号除法操作:DAT0÷DAT1结果:DAT2:商;DAT3:余数LDDAT0,ARPT#15SUBCDAT1,ASTLA,DAT2STHA,DAT3NOPNOPNOPNOPbk6:Bbk0;循环执行.end(2)在在CCS上调试运行并观察结果加法结果:减法结果:乘法结果:除法结果:四.实验总结通过此次实验,学习了使用定点DSP实现16位定点加、减、班级:2011147学号:201114705姓名:乘、除运算的基本方法。