DSP基于CCS向量文件编写和汇编语言设计实验Word下载.docx
- 文档编号:18280033
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:12
- 大小:71.59KB
DSP基于CCS向量文件编写和汇编语言设计实验Word下载.docx
《DSP基于CCS向量文件编写和汇编语言设计实验Word下载.docx》由会员分享,可在线阅读,更多相关《DSP基于CCS向量文件编写和汇编语言设计实验Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
定义存储器映像寄存器
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
.bssx,5;
.bssa,5
.defstart
.data
.word1*32768/10,2*32768/10,3*32768/10,4*32768/10,5*32768/10
;
为标号table开始的10个存储单元赋初值。
;
分别是0.1,0.2,0.3,0.4,0.5,0.1,0.2,0.3,0.4,0.5。
.text;
SSBXFRCT;
将小数方式位状态寄存器置一
STM#STACK+10h,SP;
设置堆栈指针
STM#table,AR1;
AR1指向table的首地址
STM#x,AR2;
AR2指向x的首地址
STM#9,AR0
LD#0,A
将AR1中数据加载到A累加器
STLA,*AR2+;
将A低16位送往AR2寄存器所指地址
BANZloop,*AR0-;
重复执行9次
RPTZA,#4;
将A清零,重复执行下条指令4次
STHA,y;
将A的高16位送往y
.end;
lab4b
lab4b.asm"
.bssx,5;
给x分配5个存储单元
.defstart;
table.word1000h,2000h,3000h,4000h,5000h
为标号table开始的5个存储单元赋初值。
RPT#4;
重复下条指令4次
MVPDtable,*AR2+;
重复传递共5个数据
next:
LD#1,16,B;
将1左移16位加载到B累加器
STM#4,BRC;
将块重复计数器赋值为4
STM#x,AR4;
RPTBend-1;
循环执行下面语句,end-1为结束地址
ADD*AR4,16,B,A;
将AR4中数据左移16位加B赋给A
STHA,*AR4+;
将A高16位送往AR4寄存器所指地址
Bend;
lab4c1
**************
*lab4c1.ASM*
lab4c1.asm"
100;
给堆栈分配100个存储单元
.bssnum,1
.bssden,1
.bssquot,1
.data
.word-128;
4*32768/10
为标号table开始的4个存储单元赋初值
.word1024;
-8*32768/10
分别是-128,0.4,1024,-0.8
.text
STM#num,AR1
RPT#1;
重复执行下条语句1次
MVPDtable,*AR1+;
传送2个数据至分子、分母单元
LDden,16,A;
将分母移到A累加器(31-16)
MPYAnum
(num)*(A(32-16))移到B,获取商的符号
ABSA;
分母取绝对值
STHA,den;
分母绝对值存回原处
LDnum,16,A;
分子移到A(32-16)
分子取绝对值
RPT#14;
15次减法循环,完成除法
SUBCden,A;
有条件减法
XC1,BLT;
如果B<
0(商是负数),则需要变号
STLA,quot;
将A的低16位送往quot
done:
Bdone
.end
lab4c2
*lab4c2.ASM*
lab4c2.asm"
.word16384;
66*32768/100
.word512;
-33*32768/100
分别是16384,0.66,512,-0.33
MPYAnum
LDnum,A;
分子移到A
SUBden,A;
从累加器A中减去den中数据
BCnext,ALT
条件分支转移,A<
0,则执行next子程序
ADDden,A;
在累加器A中加上den中数据
RPT#15;
重复下条语句15次
Bnext1;
执行next1子程序
重复下条语句14次
next1:
Bdone
lab4d
lab4d.asm
.title"
lab4d.asm"
.defstart
.word4000h;
x3
.word0f000h;
x2
x1
x0
.word4000h;
y3
.word3000h;
y2
.word2000h;
y1
.word1000h;
y0
.bssx,4
.bssy,4
.bssz,4
.text
STM#x,AR1;
AR1指向x的首地址
RPT#7;
重复执行下条语句7次
MVPDtable,*AR1+;
将table中的8个数据送往x,y
LD#x,DP;
将x的立即数加载到页指针
DLDx+2,A;
将x的后两个数据合并加载到A
DADDy+2,A;
C16=1,将y高低位和A高低位分别相加
DLDx,B;
将x的前两个数据合并加载到B
ADDCy+1,B;
将y的中间两个数据合并与B带进位相加
ADDy,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
五、实验结果
Lab4a
Lab4b
Lab4c1
Lab4c2
Lab4d
实验熟悉了小数运算,块重复操作,当被除数>
(<
)除数时的除法运算,及两个64位数相加如何处理进位问题。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 基于 CCS 向量 文件 编写 汇编语言 设计 实验