DSP基于CCS向量文件编写和汇编语言设计实验.docx

上传人:b****3 文档编号:5298292 上传时间:2022-12-15 格式:DOCX 页数:12 大小:71.59KB
下载 相关 举报
DSP基于CCS向量文件编写和汇编语言设计实验.docx_第1页
第1页 / 共12页
DSP基于CCS向量文件编写和汇编语言设计实验.docx_第2页
第2页 / 共12页
DSP基于CCS向量文件编写和汇编语言设计实验.docx_第3页
第3页 / 共12页
DSP基于CCS向量文件编写和汇编语言设计实验.docx_第4页
第4页 / 共12页
DSP基于CCS向量文件编写和汇编语言设计实验.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

DSP基于CCS向量文件编写和汇编语言设计实验.docx

《DSP基于CCS向量文件编写和汇编语言设计实验.docx》由会员分享,可在线阅读,更多相关《DSP基于CCS向量文件编写和汇编语言设计实验.docx(12页珍藏版)》请在冰豆网上搜索。

DSP基于CCS向量文件编写和汇编语言设计实验.docx

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个数据至分子、分母单元

LDden,16,A;将分母移到A累加器(31-16)

MPYAnum

;(num)*(A(32-16))移到B,获取商的符号

ABSA;分母取绝对值

STHA,den;分母绝对值存回原处

LDnum,16,A;分子移到A(32-16)

ABSA;分子取绝对值

RPT#14;15次减法循环,完成除法

SUBCden,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个数据至分子、分母单元

LDden,16,A;将分母移到A累加器(31-16)

MPYAnum

;(num)*(A(32-16))移到B,获取商的符号

ABSA;分母取绝对值

STHA,den;分母绝对值存回原处

LDnum,A;分子移到A

ABSA;分子取绝对值

SUBden,A;从累加器A中减去den中数据

BCnext,ALT

;条件分支转移,A<0,则执行next子程序

ADDden,A;在累加器A中加上den中数据

RPT#15;重复下条语句15次

SUBCden,A;有条件减法

Bnext1;执行next1子程序

next:

LDnum,16,A;分子移到A(32-16)

ABSA;分子取绝对值

RPT#14;重复下条语句14次

SUBCden,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的立即数加载到页指针

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

.end

五、实验结果

Lab4a

Lab4b

Lab4c1

Lab4c2

Lab4d

六、实验体会

实验熟悉了小数运算,块重复操作,当被除数>(<)除数时的除法运算,及两个64位数相加如何处理进位问题。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1