1、DSP基于CCS向量文件编写和汇编语言设计实验实验三、向量文件的编写及多个文件的一、实验目的1.编写复位向量文件vectors.asm。2.多个文件的。3.编写复位和中断向量文件。4.仿真外部中断。二、实验条件lab3.asm和lab3.cmd文件三、实验步骤1.双击桌面上CCS 2图标,启动CCS集成开发环境。2.建立新工程,并将lab3.asm和lab3.cmd添加入工程。3.按照3.6.4节中的例子,编写复位向量文件vectors.asm并将该文件添加入工程。4.为了将lab3和vectors两个文件相,对lab3.asm和lab3.cmd文件进行必要的修改。5.用菜单命令对工程的所有文
2、件进行汇编、编译、生成输出文件。6.加载程序并单步执行lab3.out文件,仔细观察复位向量的作用。7.参看教材4.4节中的容,仿真外部中断INT2:在lab3.asm中,增加一段中断服务子程序INT_2.dat,其容将累加器A变负。修改lab3.asm,开放INT2中断。修改vectors.asm,增加INT2中断向量。编写仿真外部中断用的数据文件,文件名为INT_2.dat,每隔100个时钟周期向CPU发出一次中断请求,直到仿真结束。对工程中所有文件重新汇编、编译、生成新的输出文件。执行前,从Tool菜单中选择,用鼠标选中要连接Pin Name再按 connect按钮,选择输入文件INT_
3、2与INT2引脚相连,单击打开按钮。加载程序,并利用单步方式执行程序,注意观察中断向量在程序执行过程中的作用。四、实验程序* lab3.asm y= a1*x1+a2*x2+a3*x3+a4*x4 *.title lab3.asm.mmregs ;定义存储器映像寄存器STACK .usect STACK,10h ;给堆栈分配16个存储单元.bss x,4 ;给x分配4个存储单元 .bss a,4 .bss y,1.def start ;定义标号start .def INT_2 .data ;定义数据段.mmregs table: .word 1,2,3,4 ;为标号table开始的.word
4、8,6,4,2 ;8个存储单元赋初值.text ;定义文本段start: STM #STACK+10h,SP ;设置堆栈指针 STM #table,AR1 ;AR1指向table的首地址STM #x,AR2 ;AR2指向x的首地址STM #7,AR0 ;将AR0赋7LD #40h,A ;将立即数40h加载到A累加器STM #0,SWWSR ;SWWSR置0,不插等待周期RSBX INTM ;开放全部可屏蔽中断STM #04h,IMR ;开放INT2中断loop: LD *AR1+,A ;将AR1中数据加载到A累加器STL A,*AR2+ ;将A低16位送往AR2寄存器所指地址BANZ loop
5、,*AR0- ;重复执行7次CALL SUM ;调用SUM子程序end: B end ;循环等待SUM: STM #a,AR3 ; AR3指向a的首地址 STM #x,AR4 ; AR4指向x的首地址 RPTZ A,#3 ; 将A清零,重复执行下条指令3次 MAC *AR3+,*AR4+,A ;相乘累加存入A累加器 STL A,*AR2 ;将A的低16位送往AR2所指向的地址RET ;子程序返回INT_2: NEG A ;将A累加器变负RETE ;开中断,从中断返回 .end ;程序结束五、实验现象每隔100个时钟周期来一次中断,累加器A中的数值变负六、实验体会学习了如何设置中断,及源程序和向
6、量文件的,编写仿真外部中断的数据文件,更直观的认识到程序是如何执行中断的。实验四 汇编语言程序设计一、实验目的通过实验熟悉指令系统,初步掌握汇编语言程序设计的基本方法和技巧。二、实验条件在第五章基础上进行。三、实验容1.编写实验小数乘法累加的汇编语言程序lab4a.asm。其中a=0.1,0.2,0.3,0.4,0.5。2.将第五章例9和例10组合成一个程序lab4b.asm,实现对一个数组x5=1000h,2000h,3000h,5000h进行初始化,并利用块重复操作指令将该数组每个元素加一。3.将第五章中的例20或例21,分别编写成完整的除法运算程序lab4c1.asm和lab4c2.as
7、m。4.编写实现两个64位数相加的汇编语言程序lab4d.asm。5.在设计好上述每一个汇编语言程序的同时,均应设计相应的命令文件lab4x.cmd,并利用CCS进行调试。四、实验程序lab4a* lab4a.asm y= a1*x1+a2*x2+a3*x3+a4*x4+a5*x5 * .title lab4a.asm .mmregsSTACK .usect STACK,10h ;给堆栈分配16个存储单元 .bss x,5 ;给x分配4个存储单元 .bss a,5 .bss y,1 .def start .data table:.word 1*32768/10,2*32768/10,3*327
8、68/10,4*32768/10,5*32768/10 ; 为标号table开始的10个存储单元赋初值。.word 1*32768/10,2*32768/10,3*32768/10,4*32768/10,5*32768/10; 分别是0.1,0.2,0.3,0.4,0.5, 0.1,0.2,0.3,0.4,0.5。 .text ;定义文本段start: SSBX FRCT ;将小数方式位状态寄存器置一 STM #STACK+10h,SP ; 设置堆栈指针 STM #table,AR1 ; AR1指向table的首地址 STM #x,AR2 ; AR2指向x的首地址 STM #9,AR0 LD
9、#0,Aloop: LD *AR1+,A ; 将AR1中数据加载到A累加器 STL A,*AR2+ ; 将A低16位送往AR2寄存器所指地址 BANZ loop,*AR0- ; 重复执行9次CALL SUM ;调用SUM子程序end: B end ;循环等待SUM: STM #a,AR3 ; AR3指向a的首地址 STM #x,AR4 ; AR4指向x的首地址 RPTZ A,#4 ; 将A清零,重复执行下条指令4次 MAC *AR3+,*AR4+,A ;相乘累加存入A累加器 STH A,y ;将A的高16位送往yRET ;子程序返回.end ;程序结束lab4b.title lab4b.asm
10、.mmregs ;定义存储器映像寄存器 .bss x,5 ;给x分配5个存储单元 .def start ;定义标号start .data ;定义数据段table .word 1000h,2000h,3000h,4000h,5000h ; 为标号table开始的5个存储单元赋初值。 .text ;定义文本段start: STM #x,AR2 ; AR2指向x的首地址 RPT #4 ;重复下条指令4次 MVPD table,*AR2+ ;重复传递共5个数据next: LD #1,16,B ;将1左移16位加载到B累加器 STM #4,BRC ;将块重复计数器赋值为4 STM #x,AR4 ; AR
11、4指向x的首地址 RPTB end-1 ;循环执行下面语句,end-1为结束地址 ADD *AR4,16,B,A ;将AR4中数据左移16位加B赋给A STH A,*AR4+ ; 将A高16位送往AR4寄存器所指地址end: B end ;循环等待 .end ;程序结束lab4c1;*;* lab4c1.ASM * ;* .title lab4c1.asm .def startSTACK .usect STACK,100 ;给堆栈分配100个存储单元 .bss num,1 .bss den,1 .bss quot,1 .datatable: .word -128;4*32768/10 ; 为标
12、号table开始的4个存储单元赋初值 .word 1024;-8*32768/10 ;分别是-128,0.4,1024,-0.8 .textstart: STM #num,AR1 RPT #1 ;重复执行下条语句1次 MVPD table,*AR1+ ;传送2个数据至分子 、分母单元 LD den,16,A ;将分母移到A累加器(31-16) MPYA num ;(num)*(A(32-16)移到B,获取商的符号 ABS A ;分母取绝对值 STH A,den ;分母绝对值存回原处 LD num,16,A ;分子移到A(32-16) ABS A ; 分子取绝对值 RPT #14 ;15次减法循
13、环,完成除法 SUBC den,A ;有条件减法 XC 1,BLT ;如果B0(商是负数),则需要变号 NEG A ;将A累加器变负 STL A,quot ;将A的低16位送往quotdone: B done .endlab4c2;*;* lab4c2.ASM * ;* .title lab4c2.asm .def startSTACK .usect STACK,100 ;给堆栈分配100个存储单元 .bss num,1 .bss den,1 .bss quot,1 .datatable: .word 16384;66*32768/100 ; 为标号table开始的4个存储单元赋初值 .wor
14、d 512;-33*32768/100 ;分别是16384,0.66,512,-0.33 .textstart: STM #num,AR1 RPT #1 ;重复执行下条语句1次 MVPD table,*AR1+ ;传送2个数据至分子 、分母单元 LD den,16,A ;将分母移到A累加器(31-16) MPYA num ;(num)*(A(32-16)移到B,获取商的符号 ABS A ;分母取绝对值 STH A,den ;分母绝对值存回原处 LD num,A ;分子移到A ABS A ; 分子取绝对值 SUB den,A ;从累加器A中减去den中数据 BC next,ALT ;条件分支转移,A0,则执行next子程序 ADD den,A ; 在累加器A中加上den中数据 RPT #15 ;重复下条语句15次 SUBC den,A ;有条件减法 B next1 ;执行next1子程序next: LD num,16,A ;分子移到A(32-16) ABS A ; 分子取绝对值 RPT #14 ;重复下条语句14次 SUBC den,A ;有条件减法next1: XC 1,BLT ;如果B()除数时的除法运算,及两个64位数相加如何处理进位问题。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1