DSP基于CCS向量文件编写和汇编语言设计实验.docx
- 文档编号:6075409
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:12
- 大小:72.03KB
DSP基于CCS向量文件编写和汇编语言设计实验.docx
《DSP基于CCS向量文件编写和汇编语言设计实验.docx》由会员分享,可在线阅读,更多相关《DSP基于CCS向量文件编写和汇编语言设计实验.docx(12页珍藏版)》请在冰豆网上搜索。
DSP基于CCS向量文件编写和汇编语言设计实验
实验三、向量文件的编写及多个文件的链接
一、实验目的
1.编写复位向量文件vectors.asm。
2.多个文件的链接。
3.编写复位和中断向量文件。
4.仿真外部中断。
二、实验条件
lab3.asm和lab3.cmd文件
三、实验步骤
1.双击桌面上CCS2图标,启动CCS集成开发环境。
2.建立新工程,并将lab3.asm和lab3.cmd添加入工程。
3.按照3.6.4节中的例子,编写复位向量文件vectors.asm并将该文件添加入工程。
4.为了将lab3和vectors两个文件相链接,对lab3.asm和lab3.cmd文件进行必要的修改。
5.用菜单命令对工程的所有文件进行汇编、编译、链接生成输出文件。
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菜单中选择,用鼠标选中要连接PinName再按connect按钮,选择输入文件INT_2与INT2引脚相连,单击打开按钮。
加载程序,并利用单步方式执行程序,注意观察中断向量在程序执行过程中的作用。
四、实验程序
************************************************
*lab3.asmy=a1*x1+a2*x2+a3*x3+a4*x4*
************************************************
.title"lab3.asm"
.mmregs;定义存储器映像寄存器
STACK.usect"STACK",10h;给堆栈分配16个存储单元
.bssx,4;给x分配4个存储单元
.bssa,4
.bssy,1
.defstart;定义标号start
.defINT_2
.data;定义数据段
.mmregs
table:
.word1,2,3,4;为标号table开始的
.word8,6,4,2;8个存储单元赋初值
.text;定义文本段
start:
STM#STACK+10h,SP;设置堆栈指针
STM#table,AR1;AR1指向table的首地址
STM#x,AR2;AR2指向x的首地址
STM#7,AR0;将AR0赋7
LD#40h,A;将立即数40h加载到A累加器
STM#0,SWWSR;SWWSR置0,不插等待周期
RSBXINTM;开放全部可屏蔽中断
STM#04h,IMR;开放INT2中断
loop:
LD*AR1+,A;将AR1中数据加载到A累加器
STLA,*AR2+;将A低16位送往AR2寄存器所指地址
BANZloop,*AR0-;重复执行7次
CALLSUM;调用SUM子程序
end:
Bend;循环等待
SUM:
STM#a,AR3;AR3指向a的首地址
STM#x,AR4;AR4指向x的首地址
RPTZA,#3;将A清零,重复执行下条指令3次
MAC*AR3+,*AR4+,A;相乘累加存入A累加器
STLA,*AR2;将A的低16位送往AR2所指向的地址
RET;子程序返回
INT_2:
NEGA;将A累加器变负
RETE;开中断,从中断返回
.end;程序结束
五、实验现象
每隔100个时钟周期来一次中断,累加器A中的数值变负
六、实验体会
学习了如何设置中断,及源程序和向量文件的链接,编写仿真外部中断的数据文件,更直观的认识到程序是如何执行中断的。
实验四汇编语言程序设计
一、实验目的
通过实验熟悉指令系统,初步掌握汇编语言程序设计的基本方法和技巧。
二、实验条件
在第五章基础上进行。
三、实验内容
1.编写实验
小数乘法累加的汇编语言程序lab4a.asm。
其中a={0.1,0.2,0.3,0.4,0.5}。
2.将第五章例9和例10组合成一个程序lab4b.asm,实现对一个数组x[5]={1000h,2000h,3000h,5000h}进行初始化,并利用块重复操作指令将该数组每个元素加一。
3.将第五章中的例20或例21,分别编写成完整的除法运算程序lab4c1.asm和lab4c2.asm。
4.编写实现两个64位数相加的汇编语言程序lab4d.asm。
5.在设计好上述每一个汇编语言程序的同时,均应设计相应的链接命令文件lab4x.cmd,并利用CCS进行调试。
四、实验程序
lab4a
*****************************************************
*lab4a.asmy=a1*x1+a2*x2+a3*x3+a4*x4+a5*x5*
*****************************************************
.title"lab4a.asm"
.mmregs
STACK.usect"STACK",10h;给堆栈分配16个存储单元
.bssx,5;给x分配4个存储单元
.bssa,5
.bssy,1
.defstart
.data
table:
.word1*32768/10,2*32768/10,3*32768/10,4*32768/10,5*32768/10
;为标号table开始的10个存储单元赋初值。
.word1*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:
SSBXFRCT;将小数方式位状态寄存器置一
STM#STACK+10h,SP;设置堆栈指针
STM#table,AR1;AR1指向table的首地址
STM#x,AR2;AR2指向x的首地址
STM#9,AR0
LD#0,A
loop:
LD*AR1+,A;将AR1中数据加载到A累加器
STLA,*AR2+;将A低16位送往AR2寄存器所指地址
BANZloop,*AR0-;重复执行9次
CALLSUM;调用SUM子程序
end:
Bend;循环等待
SUM:
STM#a,AR3;AR3指向a的首地址
STM#x,AR4;AR4指向x的首地址
RPTZA,#4;将A清零,重复执行下条指令4次
MAC*AR3+,*AR4+,A;相乘累加存入A累加器
STHA,@y;将A的高16位送往y
RET;子程序返回
.end;程序结束
lab4b
.title"lab4b.asm"
.mmregs;定义存储器映像寄存器
.bssx,5;给x分配5个存储单元
.defstart;定义标号start
.data;定义数据段
table.word1000h,2000h,3000h,4000h,5000h
;为标号table开始的5个存储单元赋初值。
.text;定义文本段
start:
STM#x,AR2;AR2指向x的首地址
RPT#4;重复下条指令4次
MVPDtable,*AR2+;重复传递共5个数据
next:
LD#1,16,B;将1左移16位加载到B累加器
STM#4,BRC;将块重复计数器赋值为4
STM#x,AR4;AR4指向x的首地址
RPTBend-1;循环执行下面语句,end-1为结束地址
ADD*AR4,16,B,A;将AR4中数据左移16位加B赋给A
STHA,*AR4+;将A高16位送往AR4寄存器所指地址
end:
Bend;循环等待
.end;程序结束
lab4c1
;**************
;*lab4c1.ASM*
;**************
.title"lab4c1.asm"
.defstart
STACK.usect"STACK",100;给堆栈分配100个存储单元
.bssnum,1
.bssden,1
.bssquot,1
.data
table:
.word-128;4*32768/10
;为标号table开始的4个存储单元赋初值
.word1024;-8*32768/10
;分别是-128,0.4,1024,-0.8
.text
start:
STM#num,AR1
RPT#1;重复执行下条语句1次
MVPDtable,*AR1+;传送2个数据至分子、分母单元
LD@den,16,A;将分母移到A累加器(31-16)
MPYA@num
;(num)*(A(32-16))移到B,获取商的符号
ABSA;分母取绝对值
STHA,@den;分母绝对值存回原处
LD@num,16,A;分子移到A(32-16)
ABSA;分子取绝对值
RPT#14;15次减法循环,完成除法
SUBC@den,A;有条件减法
XC1,BLT;如果B<0(商是负数),则需要变号
NEGA;将A累加器变负
STLA,@quot;将A的低16位送往quot
done:
Bdone
.end
lab4c2
;**************
;*lab4c2.ASM*
;**************
.title"lab4c2.asm"
.defstart
STACK.usect"STACK",100;给堆栈分配100个存储单元
.bssnum,1
.bssden,1
.bssquot,1
.data
table:
.word16384;66*32768/100
;为标号table开始的4个存储单元赋初值
.word512;-33*32768/100
;分别是16384,0.66,512,-0.33
.text
start:
STM#num,AR1
RPT#1;重复执行下条语句1次
MVPDtable,*AR1+;传送2个数据至分子、分母单元
LD@den,16,A;将分母移到A累加器(31-16)
MPYA@num
;(num)*(A(32-16))移到B,获取商的符号
ABSA;分母取绝对值
STHA,@den;分母绝对值存回原处
LD@num,A;分子移到A
ABSA;分子取绝对值
SUB@den,A;从累加器A中减去den中数据
BCnext,ALT
;条件分支转移,A<0,则执行next子程序
ADD@den,A;在累加器A中加上den中数据
RPT#15;重复下条语句15次
SUBC@den,A;有条件减法
Bnext1;执行next1子程序
next:
LD@num,16,A;分子移到A(32-16)
ABSA;分子取绝对值
RPT#14;重复下条语句14次
SUBC@den,A;有条件减法
next1:
XC1,BLT;如果B<0(商是负数),则需要变号
NEGA;将A累加器变负
STLA,@quot;将A的低16位送往quot
done:
Bdone
.end
lab4d
;lab4d.asm
.title"lab4d.asm"
.defstart
table:
.word4000h;x3
.word0f000h;x2
.word0f000h;x1
.word0f000h;x0
.word4000h;y3
.word3000h;y2
.word2000h;y1
.word1000h;y0
.bssx,4
.bssy,4
.bssz,4
.text
start:
STM#x,AR1;AR1指向x的首地址
RPT#7;重复执行下条语句7次
MVPDtable,*AR1+;将table中的8个数据送往x,y
LD#x,DP;将x的立即数加载到页指针
DLD@x+2,A;将x的后两个数据合并加载到A
DADD@y+2,A;C16=1,将y高低位和A高低位分别相加
DLD@x,B;将x的前两个数据合并加载到B
ADDC@y+1,B;将y的中间两个数据合并与B带进位相加
ADD@y,16,B;将y第一个数据左移16位与B相加
STLA,@z+3;将A的低位赋给z的(0~15)
STHA,@z+2;将A的高位赋给z的(16~31)
STLB,@z+1;将B的低位赋给z的(32~47)
STHB,@z;将B的高位赋给z的(48~63)
here:
Bhere
.end
五、实验结果
Lab4a
Lab4b
Lab4c1
Lab4c2
Lab4d
六、实验体会
实验熟悉了小数运算,块重复操作,当被除数>(<)除数时的除法运算,及两个64位数相加如何处理进位问题。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 基于 CCS 向量 文件 编写 汇编语言 设计 实验