汇编源程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5
第4章 TMS320C54x的软件开发
2. 调用与返回程序 当调用子程序或函数时,DSP就会中断原先的程序, 转移到程序存储器的其他地址继续运行。调用时,下 条指令的地址被压入堆栈,以便返回时将这个地址弹 出至PC,使中断的程序继续执行。 两种形式: 无条件调用与返回,有条件调用与返回。 常用指令: CALL[D]、CALA[D]、RET[D]、CC[D]、 RC[D] 栈顶 例如(堆栈设置后) CALL pmad ;(SP)-1→SP,(PC)+2→TOS, pmad→PC RET ;(TOS)→PC, (SP)+1→SP
第4章 TMS320C54x的软件开发
(2) 块程序重复操作RPTB 含义:RPTB将重复操作的范围扩大到任意长度的循环 回路。 重复次数:先加载到块重复计数器(BRC)。 循环开始地址(RSA):是RPTB指令的下一行; 结束地址(REA):由RPTB指令的操作数规定。 特点: 对任意长的程序段的循环开销为0; 其本身是一条2字4周期指令; RPT指令一旦执行,不会停止操作,即使有中断请 求也不响应;而RPTB指令是可以响应中断的。
第4章 TMS320C54x的软件开发
【例4.14】 对数组x[5]中的每个元素加1。
.bss x, 5 begin: LD STM STM RPTB ADD STH next: LD … #1, 16, B #4,BRC ;BRC赋值为4 #x,AR4 next-1 ;next-1为循环结束地址 *AR4,16,B,A A,*AR4+ #0, B
第4章 TMS320C54x的软件开发
【例4.12】 计算 y xi i 1 .bss x, 5 ;为变量分配6个字的存储空间 .bss y, 1 STM #x, AR1 ;AR1指向x STM #4, AR2 ;设AR2初值为4 LD #0, A loop: ADD *AR1+, A BANZ loop, *AR2- ;当AR2不为0时转移, AR2-1→AR2 STL A, @y 本例中用AR2作为循环计数器,设初值为4,共执行5 次加法。也就是说,应当用迭代次数减1后加载循环计 数器。
第4章 TMS320C54x的软件开发
【例4.13】 对数组进行初始化。x[5]={0,0,0,0,0} 主要程序(部分)如下:
.bss
STM LD
x, 5
#x, AR1 #0, A
RPT
STL 或者 .bss STM RPTZ STL
#4
A, *AR1+ x, 5 #x, AR1 A, #4 A, *AR1+
实现20个数据先从EPROM的0E000Hh~0E013h传 送到数据存储器SPRAM的0060h~0073h单元,实现数 据的初始化,再从0060h~0073h单元传送到0074h~ 0087h单元,实现数据搬移,其示意图如图4.7所示。注 意,实际看到的是十六进制数。
第4章 TMS320C54x的软件开发
用next-1作为结束地址是恰当的。如果用循环回路 中最后一条指令(STH指令)的标号作为结束地址,若最 后一条指令是单字指令也可以,若是双字指令,就不 对了。
第4章 TMS320C54x的软件开发
• P131习题11.对DATA开始的100个单元赋初值0、1、 2、3、…、99,然后再对每个单元内容加1。
列表文件包括源程序的行号、段程序计数器(SPC)、目 标代码和源程序4个部分。 【例4.7】 列表文件举例(example.lst部分)
10 000004 000005 000006 000007 11 000000 12 000000 000001 0008 0006 0004 0002 .word 8,6,4,2
len=01F80h len=0008Βιβλιοθήκη Baiduh len=00030h len=01380h
第4章 TMS320C54x的软件开发
SECTIONS { .vectors:> .text:> .data:> .bss:> .STACK:> }
VECS PAGE 0 EPROM PAGE 0 EPROM PAGE 0 SPRAM PAGE 1 DARAM PAGE 1
4.6.1 程序的控制与转移 包括:分支转移 子程序操作(调用与返回程序) 循环控制(重复操作) 条件:有一些指令只有当一个条件或多个条件得到满 足时才能执行。如条件分支转移或条件调用、条件返 回指令。表4-4。 多重条件 :BC pmad, cond[,cond[,cond]],当这条指 令的所有条件得到满足时,程序才能转移到pmad。不 是所有条件都能构成多重条件,某些条件的组合如表 4-5所示。
第4章 TMS320C54x的软件开发
start: STM #x, AR1 RPT #19
MVPD table, *AR1+
STM #x, AR2 STM #y, AR3
; 程序存储器传送到数据存储器
RPT
end: B .end
#19
; 数据存储器传送到数据存储器 end
MVDD *AR2+, *AR3+
第4章 TMS320C54x的软件开发
数据存储器 0 „ stack 可用栈区 „ SP→ 栈顶(TOS)最 新用的单元 „ stack+size (栈底)已用栈区 „ 65535 “STK” 100 个单元
第4章 TMS320C54x的软件开发
3. 重复操作( 3条指令) RPT(重复下条指令)、 RPTZ(累加器清0并重复下条指令) RPTB(块重复指令)。 (1) 重复执行单条指令 含义:RPT或RPTZ允许重复执行紧随其后的那一条指 令。 重复次数:如重复执行n次,则重复指令中计数值为n -1。 说明:与BANZ指令进行循环相比,效率要高得多。 特别是对于那些乘法累加和数据传送的多周期 指令(如MAC、MVDK、MVDP和MVPD等),在执行 一次之后就变成了单周期指令,大大提高了运行速度。
第4章 TMS320C54x的软件开发
4.5 汇编源程序的编辑、汇编和链接过程
P103图4.4
链接命令文件 .cmd
.asm 源文件 文本编辑器 汇编器
.obj 目标文件
.out 输出文件 链接器
测试程序
-l
-m
-1
.lst 列表文件
.map 存储器映像文件
十六进制 转换程序
第4章 TMS320C54x的软件开发
第4章 TMS320C54x的软件开发
【例4.15】 编写一段程序,首先对数组x[20]赋值,再
将数据存储器中的数组x[20]复制到数组y[20]。
.title “exp15.asm” .mmregs STACK .usect “STACK”, 30h .bss .bss .data table: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 .def .text start x, 20 y, 20
.text ;code follows" 7728 start: STM #0,SWWSR ;adds no wait states 0000
第4章 TMS320C54x的软件开发
【例4.8】 链接命令文件(file.cmd)的编写。
file1.obj file2.obj -m prog.map -o prog.out MEMORY { PAGE 0: EPROM :org=0E00h,len=100h PAGE 1: SPRAM :org=0060h,len=0020h DARAM :org=0080h,len=100h } SECTIONS { .text : > . data : > .bss : > STACK : > }
第4章 TMS320C54x的软件开发
【例4.11】 条件分支转移指令BC举例。 BC new, AGT, AOV ; 若累加器A>0且溢出,则转至
new,否则往下执行
单条指令中的多个条件是“与”的关系。
如果需要两个条件相“或”,只能写成两条指令。
如上一条指令改为“若累加器A大于0或溢出,则转移 至new”,可以写成如下两条指令 BC new, AGT BC new, AOV
.mmregs .bss DATA,100 STM #DATA,AR1 LD #0,A STM #99,BRC RPTB begin-1 ADD #1,A STL A,*AR1+ begin: LD #1,16,B STM #99,BRC STM #DATA,AR4 RPTB next-1 ADD *AR4,16,B,A STH A,*AR4+ next: LD #0, B
第4章 TMS320C54x的软件开发
堆栈: 16位堆栈指针(SP)寻址的软件堆栈。 堆栈是一个特殊的存储区域,遵循先进后出的原则, 当向堆栈中压入数据时,堆栈从高地址向低地址增长, 堆栈指针SP始终指向栈顶。 堆栈用法: 压入操作:SP先减1,然后再将数据压入栈顶。 弹出操作:数据弹出后,再将SP加1。 堆栈设置: size .set 100 stack .usect “STK”, size ;自定义一个名为STK的保留 空间,共100个单元 STM #stack+size, SP ;将这个保留空间的高地址 (#stack+size)赋给SP, 作为栈底,
第4章 TMS320C54x的软件开发
• P131习题9.将程序存储器中的10个数据首先传送到 数据存储器(以DATA1开始),再将DATA1开始的 10个单元内容传送到DATA2开始的数据存储器中。
第4章 TMS320C54x的软件开发
.title "ex4-9.asm" .mmregs .bss DATA1, 10 .bss DATA2, 10 .data table: .word 1,2,3,4,5,6,7,8,9,10 .def start .text start: STM #DATA1, AR1 RPT #9 MVPD table, *AR1+ STM #DATA1, AR2 STM #DATA2, AR3 RPT #9 MVDD *AR2+, *AR3+ end: B end .end
第4章 TMS320C54x的软件开发
1. 分支程序
根据条件判断改写PC值,使程序发生分支转移。
两种形式:有条件分支转移和无条件转移。
常用指令: B[D]、BACC[D] ;BC[D]、BANZ[D]
P74表3-14[D]表示延时执行,为可选项 合理地设计延迟转移指令,可以提高程序的效率。 应当注意,紧跟在延迟指令后面的两个字,不能是造成 PC不连续的指令(如分支转移、调用、返回或软件中断 指令)。
第4章 TMS320C54x的软件开发
/ exp15.cmd*/链接命令 vectors.obj exp15.obj -o exp15.out -m exp15.map -e start MEMORY { PAGE 0: EPROM: org=0E000h VECS: org=0FF80h PAGE 1: SPRAM: org=00060h DARAM: org=00090h }
第4章 TMS320C54x的软件开发
4.6.2 数据块传送程序 共有4种类型(10条指令): (1) 程序存储器←→数据存储器(MVPD,MVDP)。 (2) 数据存储器←→数据存储器(MVDK,MVKD, MVDD)。 (3) 数据存储器←→MMR(MVMD、MVDM,MVMM) (4) 程序存储器(由ACC寻址)←→数据存储器(READA, WRITA) 这些指令的特点如下: •传送速度比加载和存储指令要快; •传送数据不需要通过累加器; •可以寻址程序存储器; •与RPT相结合时,都变成单周期指令,可以实现数据 块传送。
程序存储器 Table 0E000h 0E001h EPROM 1 2 „ „ 19 0E013h 20 00073h 00060h 00061h
数据存储器 SPRAM x1=1 x2=1 00074h 00075h
数据存储器 SPRAM y1=1 y2=1
x19=19 x20=20 00087h
y19=19 y20=20
EPROM EPROM SPRAM DARAM
PAGE PAGE PAGE PAGE
0 0 1 1
第4章 TMS320C54x的软件开发
4.6 汇编语言程序设计
基本程序设计分为3大类: (1) 程序的控制与转移。
(2) 数据块传送程序。
(3) 算术运算类程序。
第4章 TMS320C54x的软件开发