DSP实验报告5.docx
《DSP实验报告5.docx》由会员分享,可在线阅读,更多相关《DSP实验报告5.docx(9页珍藏版)》请在冰豆网上搜索。
DSP实验报告5
DSP实验报告
实验一
CCS软件的基本使用——数据块传送程序编写及软件仿真
一:
实验目的
1,掌握CCS软件的基本使用方法;
2,了解汇编语言在CCS中的使用方法,注意事项;
3,掌握数据块传送程序编写及软件仿真;
二:
操作步骤的要点
1,新建项目/新建文件/添加文件到项目/编辑文件;
2,点“rebuildall”工具进行编译、汇编和链接;
3,装载上一步生成的out文件;
4,运行后点“view/memory”观察运行结果。
三:
实验程序——数据传送程序
1,汇编主程序文件
.title"shiyan1b.asm";定义标题为“shiyan1b”
.mmregs;定义了全局变量(存储器)STACK.usect"STACK",10H;堆栈分段名“STACK”,为其分配了16个空间
.bssx,5;bss段,x引导
.data
table:
.word1,2,3,4,5;
.def_c_int00
.text
_c_int00:
STM#x,AR1
RPT#4
MOVPtable,*AR1+
endBend
.end
2,中断向量表文件
.title"vectors.asm"
.ref_c_int00
.sect".vectors"
B_c_int00
.end
3,链接命令文件
/*shiyan1b.cmd*/
vectors.obj/*中断向量的目标文件*/
shiyan1.obj/*产生目标文件*/
-oshiyan1.out/*产生可执行下载文件,文件名可以根据不同项目而定*/
-mshiyan1.map/*产生存储器映射文件,文件名可以根据不同项目而定*/
-estart/*程序入口*/
MEMORY
{
PAGE0:
/*定义程序存贮区*/
EPROM:
org=E000Hlen=0100H/*定义EPROM区,起始地址0000H,长度100H*/
VECS:
org=0080Hlen=0040H/*定义VECS区,起始地址0080H,长度0040H*/
PAGE1:
/*定义数据存贮区*/
SPRAM:
org=0060Hlen=0020H/*定义SPRAM区,起始地址0060H,长度0020H*/
DARAM:
org=0080Hlen=0010H/*定义DARAM区,起始地址0080H,长度0010H*/
}
SECTIONS
{
.text:
>EPROMPAGE0/*将.text段映射到PAGE0的EPROM区*/
.data:
>EPROMPAGE0/*将.text段映射到PAGE0的EPROM区*/
.bss:
>SPRAMPAGE1/*将.text段映射到PAGE1的SPRAM区*/
STACK:
>DARAMPAGE1/*将.text段映射到PAGE1的DARAM区*/
.vectors:
>VECSPAGE0/*将中断向量表定位到PAGE0的VECS区*/
}
4,CCS软件有一个默认入口指针符号——_c_int00,规定我们使用该符号指向主程序起始位置,那就将主程序和中断向量表文件中的start符号改为_c_int00即可。
5,DSP的汇编语言程序通常采用模块化编程方法,一个项目按不同功能模块包含多个文件,但至少应包含汇编源程序文件和链接命令文件,可以将中断向量表文件统一写到汇编源程序文件,但一般还是分成汇编主程序文件和中断向量表两个文件,以符合模块化编程思路。
6,DSP的程序是由包含不同功能的文件构成,源程序文件是由段构成的,可生成可执行二进制代码;链接命令文件是用来链接源程序文件所定义的各段并对各段进行存储器地址分配,所以链接命令文件包含非常丰富的段及符号的存储器地址信息,我们要观察程序运行结果,必须首先通过链接命令文件去查找相关信息。
四:
思考题
(1)程序一主要功能是什么?
解释主程序文件、中断向量表文件、链接命令文件每条汇编指令和伪指令的含义。
(已在程序中注明)
(2)修改主程序文件中指令“MVPDtable,*AR1+”为“MVPD(table),*AR1+”,观察编译及运行情况
(3)分别将程序指令“STM#x,AR1”和“RPT#4”中的“#”号去掉,编程时是否会报错,运行结果有何变化?
为什么?
(4)根据程序编译及调试情况,指明哪些标号或指令符号大小写符号不能互换?
标号;
(5)总结汇编语言程序编写有哪些规则?
汇编源程序文件(本次实验包括主程序文件和中断向量表文件)的书写必须遵从一定的格式规范要求,比如标号必须顶格;汇编指令和伪指令不能顶格,必须从第二列开始;标号须区分大小写等等,需要我们在实验编程的过程中慢慢体味。
数字不能开头,字母开头,不能有汉字。
实验二:
堆栈的使用方法
一:
实验程序——堆栈的使用方法
1,汇编主程序文件
.title"shiyan2.asm";定义标题为“shiyan2b”
.mmregs;定义了全局变量(存储器)
.def_c_int00;定义入口地址
size.set100;size=100,64H
stack.usect"STK",size;堆栈分段名“STACK”,为其分配了100个空间
.bsslength,10H;bss段,lengh引导
.text
_c_int00:
STM#0,SWWSR;可以省略
STM#stack+size,SP;将#STACk+size送给SP
LD#-8531,A;SP=E4H
STM#length,AR1;将#STACk+size送给AR1
MVMMSP,AR7
loop:
STLA,*AR7-
BANZloop,*AR1-
end:
Bend
.end
2,中断向量表文件
.title"vectors.asm"
.ref_c_int00
.sect".vectors"
B_c_int00
.end
3,链接命令文件
/*shiyan2b.cmd*/
vectors.obj/*中断向量的目标文件*/
shiyan2.obj/*产生目标文件*/
-oshiyan2.out/*产生可执行下载文件,文件名可以根据
不同项目而定*/
-mshiyan2.map/*产生存储器映射文件,文件名可以根据不同项目而定*/
-estart/*程序入口*/
MEMORY
{
PAGE0:
/*定义程序存贮区*/
EPROM:
org=E000Hlen=0100H/*定义EPROM区,起始地址0000H,长度100H*/
VECS:
org=0080Hlen=0040H/*定义VECS区,起始地址0080H,长度0040H*/
PAGE1:
/*定义数据存贮区*/
SPRAM:
org=0060Hlen=0020H/*定义SPRAM区,起始地址0060H,长度0020H*/
DARAM:
org=0080Hlen=0010H/*定义DARAM区,起始地址0080H,长度0010H*/
}
SECTIONS
{
四:
思考题
(1)修改主程序,实现堆栈区100个单元全部数据变为“DEAD”。
将size.set100改为size.set103
(2)分析这段程序为什么堆栈区会有97个“DEAD”。
因为SP=E4H,从84H到E4刚好97个数。
实验三算术运算程序设计
一:
实验程序——算术运算程序设计
1,汇编主程序文件
.title"shiyan3b.asm";定义标题名“shiyan3b”
.mmregs;说明存储器映射到寄存器
STACK.usect"STACK",30H;定义堆栈段"STACK"
.bssa,20;为a分配20个单元的存储空间
.bssx,20;为x分配20个单元的存储空间
.bssy,2;为y分配2个单元的存储空间
.data;定义数据代码段
table:
.word1,2,3,4,5,6,7,8,9,10,11;在table开始的40个地址存放数据.word12,13,14,15,16,17,18,19,20
.word21,22,23,24,25,26,27,28
.word29,30,1,2,3,4,5,6,7,8,9,10
.def_c_int00;在当前模块定义并在其他模块中使用_c_int00
.text;可执行代码段
_c_int00:
STM#a,AR1;将a的首地址传给AR1RPT#39;循环执行40次
MVPDtable,*AR1+;将程序空间40个数传给数据存储器
LD#0,B;将立即数0装入累加器B