第6章 'C54x的汇编语言程序设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012年9月23日 DSP原理及应用 9
第6章 TMS320C54x汇编语言程序设计
3. 子程序返回程序
子程序返回指令
分 类 指 令 说 明
RET[D] 无条件返回 RETE[D] RETF[D] 条件返回 RC[D] FCALL [D] 远程返回 FCALA [D]
2012年9月23日
将堆栈顶部的返回地址加载到PC。 将堆栈顶部的返回地址加载到PC,并使能可屏蔽中断。 将RTN寄存器中的返回地址加载到PC,并使能可屏蔽中断。 如果满足指令给定条件,将堆栈顶部的返回地址加载到PC。 将堆栈顶部的值弹出加载到XPC, 将堆栈中下一个值弹出加载到PC。 将堆栈顶部的值弹出加载到XPC, 将堆栈中下一个值弹出加载到PC,并使能可屏蔽中断。
RC NTC
; 条件返回 若TC = 0,则返回,否则往下执行
2012年9月23日
DSP原理及应用
16
第6章 TMS320C54x汇编语言程序设计
4. 条件操作程序 注意: 若需要多个条件相与时,用单条指令表示。 如:BC new, AGT, AOV 转移条件:AGT和AOV的与逻辑
若需要两个条件相或时,需用两条指令分 别表示。 如:若累加器A大于0或溢出,则转移至sub 转移条件:AGT和AOV的或逻辑 BC sub, AGT BC sub, AOV
2012年9月23日 DSP原理及应用 1
第6章 TMS320C54x汇编语言程序设计
6.1 控制程序
’C54x具有丰富的程序控制指令,利用这些指 6.1.1 分支操作程序 令可以执行分支转移、子程序调用、子程序返回, 程序控制中的分支操作包括: 条件执行以及循环等控制操作。 分支转移程序 子程序调用
LT,AR1 loop, TC
;若AR1-AR0<0,则TC=1,否则为0 若AR1-AR0<0,则循环
若AR1=AR0,则顺序执行
DSP原理及应用 19
第6章 TMS320C54x汇编语言程序设计
6.1 控制程序
6.1.2 循环操作程序
在程序设计时,经常需要重复执行某一段程序。 利用BANZ(当辅助寄存器不为0时转移)指令可实现循 环计数和操作。 循环操作指令:
多重条件算符
第1组 第2组
A类
EQ LT
2012年9月23日
B类
OV NOV
A类
TC NTC
B类
C NC
C类
BIO NBIO
NEQ GT
LEQ GEQ
DSP原理及应用
14
第6章 TMS320C54x汇编语言程序设计
4. 条件操作程序
选用多重条件时应当注意以下几点:
① 第1组:分为两类,最多可选择两个条件, 组内两类条件可以与/或构成多重条件,但不 能用组内同类条件构成与/或多重条件。 当选择两个条件时,累加器必须是同一个。 ② 第2组:分为三类,最多可选三个条件,可 以在每类中各选一个条件进行与/或构成多重 例如,可以同时选择AGT和AOV,但不能同时选 条件,但不能在同类选两个以上条件。 择AGT和BOV。 ③ 组与组之间可用或构成多重条件。 例如,可以同时测试TC、C和BIO,但不能同时 测试NTC、C和NC。
2012年9月23日 DSP原理及应用 18
第6章 TMS320C54x汇编语言程序设计
6. 比较转移程序 例如:比较操作后条件分支转移
STM STM … … … … CMPR BC
2012年9月23日
#5,AR1 #10,AR0
; AR1=5 ; AR0=10
loop:
*AR1+
; AR1=AR1+1
;将操作数#88H装入AR0 ;将操作数#1000H装入ACC
;将A中的内容减去AR0中的
;内容结果装入A ;若累加器A>0且溢出,
4 ;则转至zhong,否则往下执行
BC
2012年9月23日
zhong,AGT,AOV
DSP原理及应用
第6章 TMS320C54x汇编语言程序设计
6.1.1 分支操作程序
2. 子程序调用程序 与分支转移一样,通过传送控制到程序存储器的 其他位置,子程序调用会中断连续的指令流。但是与 分支转移不同的是,这种传送是临时的。 当函数的子程序被调用时,紧跟在调用后的下一 条指令的地址保存在堆栈中。这个地址用于返回到调 用程序并继续执行调用前的程序。 子程序调用操作分成两种形式:无条件调用和条 件调用,两者都可以带延时操作和不带延时操作。
BGT B>0 累加器B大于0 NBIO AGEQ UNC A0 累加器A大于等于0 BGEQ B0 累加器B大于等于0 2012年9月23日 DSP原理及应用
BIO高 BIO信号电平为高 无 无条件操作
13
第6章 TMS320C54x汇编语言程序设计
4. 条件操作程序
在条件操作时也可以要求有多个条件,只有所 有条件满足时才被认为是满足条件。这种多个条件 的组合就构成了指令的多重条件。
子程序返回
条件操作程序
2012年9月23日 DSP原理及应用 2
第6章 TMS320C54x汇编语言程序设计
6.1.1 分支操作程序
1. 分支转移程序
分支转移指令 通过传送控制到程序存储器的其他位置,分支转 分 类 指 令 说 明 移会中断连续的指令流。
B[D] 用该指令指定的地址加载PC 无条件 分支转移指令可以改写PC值,使程序改变流向。 分支转移 BACC[D] 用累加器的低16位指定的地址加载PC
BANZ
转移地址,辅助寄存器
指令功能:当辅助寄存器不为0时,则转至转移地址, 否则顺序执行。
2012年9月23日 DSP原理及应用 20
第6章 TMS320C54x汇编语言程序设计
6.1.2 循环操作程序
【例6.1.4】 计算
y
10
xi
STM STM LD loop: ADD BANZ
.bss x,10 ;给x保留10个空间 用AR2作为循环计数器,由BANZ实现程序的循环 .bss y,1 ;给y保留1个空间 控制。
DSP原理及应用
12
第6章 TMS320C54x汇编语言程序设计
4. 条件操作程序
条 件 算 符
操作符号 条 件 AEQ BEQ ANEQ BNEQ ALT BLT ALEQ BLEQ AGT A=0 B=0 A0 B0 A<0 B<0 A0 B0 A>0 说 明 操作符号 条 件 AOV BOV ANOV BNOV C NC TC NTC BIO AOV=1 BOV=1 AOV=0 BOV=0 C=1 C=0 TC=1 TC=0 BIO低 说 明 累加器A等于0 累加器B等于0 累加器A不等于0 累加器B不等于0 累加器A小于0 累加器B小于0 累加器A小于等于0 累加器B小于等于0 累加器A大于0 累加器A溢出 累加器B溢出 累加器A不溢出 累加器B不溢出 ALU进位位置1 ALU进位位置0 测试/控制标志位置1 测试/控制标志位置0 BIO信号电平为低
2012年9月23日 DSP原理及应用 5
第6章 TMS320C54x汇编语言程序设计
2. 子程序调用程序
子程序调用指令
分 类 指 令 说 明 CALL[D] 无条件调用 CALA[D] 条件调用 CC[D] 将返回的地址压入堆栈,用累加器A或B指定的地址加载PC 将返回的地址压入堆栈,并用该指令指定的地址加载PC
其指令分为无条件分支转移和条件分支转移两类。两 BC[D] 若满足指令给定条件,用该指令指定的地址加载PC 条 件 者都可以带延时操作和不带延时操作。 分支转移
BANG[D] FB[D] FBACC[D] 远 程 分支转移 用该指令指定的地址加载PC和XPC
若当前选择辅助寄存器不等于0,用该指令指定的地址加载PC
DSP原理及应用
11
第6章 TMS320C54x汇编语言程序设计
6.1.1 分支操作程序
4. 条件操作程序 ’C54x的一些指令只有在满足一个或是多个条 件后才被执行,如条件分支转移、条件调用和条件 返回等指令。
这些指令都用条件来限制分支转移、调用和返
回操作。这些条件可用条件算符来表示。
2012年9月23日
用累加器的低23位指定的地址加载PC和XPC
DSP原理及应用 3
2012年9月23日
第6章 TMS320C54x汇编语言程序设计
1. 分支转移程序
无条件分支转移:无条件执行分支转移; 条件分支转移:要在满足用户一个或多个条件时 才执行分支转移; 远程分支转移:允许分支转移到扩展存储器。
【例6.1.1】 分支转移举例。 STM #88H,AR0 LD #1000H,A zhong: SUB AR0,A
第6章 TMS320C54x汇编语言程序设计 内容提要
汇编语言程序设计是应用软件设计的基础,主要 任务是利用汇编指令和伪指令编写源程序以完成指定 的功能。 本章将结合例子介绍TMS320C54x汇编语言源程 序设计的基本方法,涉及的内容包括: 堆栈的使用方法1 分支、调用、返回控制程序 加法、乘法、除法、长字和并行运算程序 单指令、块重复、循环嵌套等重复操作程序 数据块传送程序 小数运算程序和浮点运算程序
DSP原理及应用 10
第6章 TMS320C54x汇编语言程序设计
3. 子程序程序 无条件返回是无条件执行返回操作。
条件返回可以给予被调用函数或中断服务程序
(ISR)更多的返回方式,以便根据被处理的数据选
择返回路径,通过使用条件返回指令来实现返回。
远程返回允许从扩展存储器的子程序或函数返
回。
2012年9月23日
i 1
#x,AR1 #9,AR2 #0,A *AR1+,A loop,*AR2-
;设置数据段的首地址 ;设置循环计数值 ;累加器清0 ;累加运算,并修改地址 ;若计数值不为0,则循环,并计数值减1
若计数值为0,则结束循环 ;累加和存入y中
STL 注意: BANZ 2012年9月23日
A, @y loop, *AR2;先判断,再修正AR2=AR2-1 DSP原理及应用
2012年9月23日 DSP原理及应用 15
第6章 TMS320C54x汇编语言程序设计
4. 条件操作程序
【例6.1.3】 条件操作程序。 BC sub,BLEQ
; 条件分支转移
若累加器B≤0,则转至sub, 否则,往下执行
CC start,AGEQ,AOV
; 条件调用 若累加器A≥0且溢出, 则调用start,否则往下执行
;将操作数#123H装入AR0 ;将操作数#456H装入AR1 ;调子程序new ;将AR1的内容左移16位后装入A ;AR0与AR1的内容相乘,结果放入A中
RET
2012年9月23日
;子程序返回
DSP原理及应用 8
第6章 TMS320C54x汇编语言程序设计
6.1.1 分支操作程序
3. 子程序返回程序 子程序返回程序可以使程序重新在被中断的连续 指令处继续执行。 返回指令通过将弹出堆栈的值(包含将要执行的 下一条指令的地址),送到程序计数器PC来实现返回 功能。 ’C54x可以执行无条件返回和条件返回,并且它 们都可以带延时或不带延时操作。
2012年9月23日 DSP原理及应用 17
第6章 TMS320C54x汇编语言程序设计
6.1.1 分支操作程序
6. 比较转移程序 比较操作指令: 利用比较指令CMPR可实现比较转移操作。 CMPR 测试条件,辅助寄存器ARx 指令功能:辅助寄存器ARx与AR0进行比较, 若比较结果使所给定的测试条件成立, 则TC位置1。 实现方法:① 通过CMPR的比较结果得TC值; ② 根据TC值,由条件转移指令实现分 支转移。
2. 子程序调用程序 无条件调用是指无条件执行调用。
条件调用和无条件调用操作相同,但是条件调
用要在满足一个或多个条件时才执行调用。
远程调用允许对扩展存储器的子程序或函数进
行调用。
2012年9月23日
DSP原理及应用
7
第6章 TMS320C54x汇编语言程序设计
2. 子程序调用程序
【例6.1.2】 子程序调用举例。 STM LD CALL LD new:MPY #123H,AR0 #456H,AR1 new AR1,16,A AR0,AR1,A
如果满足指令给定条件,将返回的地址压入堆栈,并用该 指令指定的地址加载PC
将XPC和PC压入堆栈,并用该指令指定的地址加载PC和XPC 将XPC和PC压入堆栈,用累加器的低23位指定的地址加载 PC和XPC
DSP原理及应用 6
FCALL [D] 远程调用 FCALA [D]
2012年9月23日
第6章 TMS320C54x汇编语言程序设计
第6章 TMS320C54x汇编语言程序设计
3. 子程序返回程序
子程序返回指令
分 类 指 令 说 明
RET[D] 无条件返回 RETE[D] RETF[D] 条件返回 RC[D] FCALL [D] 远程返回 FCALA [D]
2012年9月23日
将堆栈顶部的返回地址加载到PC。 将堆栈顶部的返回地址加载到PC,并使能可屏蔽中断。 将RTN寄存器中的返回地址加载到PC,并使能可屏蔽中断。 如果满足指令给定条件,将堆栈顶部的返回地址加载到PC。 将堆栈顶部的值弹出加载到XPC, 将堆栈中下一个值弹出加载到PC。 将堆栈顶部的值弹出加载到XPC, 将堆栈中下一个值弹出加载到PC,并使能可屏蔽中断。
RC NTC
; 条件返回 若TC = 0,则返回,否则往下执行
2012年9月23日
DSP原理及应用
16
第6章 TMS320C54x汇编语言程序设计
4. 条件操作程序 注意: 若需要多个条件相与时,用单条指令表示。 如:BC new, AGT, AOV 转移条件:AGT和AOV的与逻辑
若需要两个条件相或时,需用两条指令分 别表示。 如:若累加器A大于0或溢出,则转移至sub 转移条件:AGT和AOV的或逻辑 BC sub, AGT BC sub, AOV
2012年9月23日 DSP原理及应用 1
第6章 TMS320C54x汇编语言程序设计
6.1 控制程序
’C54x具有丰富的程序控制指令,利用这些指 6.1.1 分支操作程序 令可以执行分支转移、子程序调用、子程序返回, 程序控制中的分支操作包括: 条件执行以及循环等控制操作。 分支转移程序 子程序调用
LT,AR1 loop, TC
;若AR1-AR0<0,则TC=1,否则为0 若AR1-AR0<0,则循环
若AR1=AR0,则顺序执行
DSP原理及应用 19
第6章 TMS320C54x汇编语言程序设计
6.1 控制程序
6.1.2 循环操作程序
在程序设计时,经常需要重复执行某一段程序。 利用BANZ(当辅助寄存器不为0时转移)指令可实现循 环计数和操作。 循环操作指令:
多重条件算符
第1组 第2组
A类
EQ LT
2012年9月23日
B类
OV NOV
A类
TC NTC
B类
C NC
C类
BIO NBIO
NEQ GT
LEQ GEQ
DSP原理及应用
14
第6章 TMS320C54x汇编语言程序设计
4. 条件操作程序
选用多重条件时应当注意以下几点:
① 第1组:分为两类,最多可选择两个条件, 组内两类条件可以与/或构成多重条件,但不 能用组内同类条件构成与/或多重条件。 当选择两个条件时,累加器必须是同一个。 ② 第2组:分为三类,最多可选三个条件,可 以在每类中各选一个条件进行与/或构成多重 例如,可以同时选择AGT和AOV,但不能同时选 条件,但不能在同类选两个以上条件。 择AGT和BOV。 ③ 组与组之间可用或构成多重条件。 例如,可以同时测试TC、C和BIO,但不能同时 测试NTC、C和NC。
2012年9月23日 DSP原理及应用 18
第6章 TMS320C54x汇编语言程序设计
6. 比较转移程序 例如:比较操作后条件分支转移
STM STM … … … … CMPR BC
2012年9月23日
#5,AR1 #10,AR0
; AR1=5 ; AR0=10
loop:
*AR1+
; AR1=AR1+1
;将操作数#88H装入AR0 ;将操作数#1000H装入ACC
;将A中的内容减去AR0中的
;内容结果装入A ;若累加器A>0且溢出,
4 ;则转至zhong,否则往下执行
BC
2012年9月23日
zhong,AGT,AOV
DSP原理及应用
第6章 TMS320C54x汇编语言程序设计
6.1.1 分支操作程序
2. 子程序调用程序 与分支转移一样,通过传送控制到程序存储器的 其他位置,子程序调用会中断连续的指令流。但是与 分支转移不同的是,这种传送是临时的。 当函数的子程序被调用时,紧跟在调用后的下一 条指令的地址保存在堆栈中。这个地址用于返回到调 用程序并继续执行调用前的程序。 子程序调用操作分成两种形式:无条件调用和条 件调用,两者都可以带延时操作和不带延时操作。
BGT B>0 累加器B大于0 NBIO AGEQ UNC A0 累加器A大于等于0 BGEQ B0 累加器B大于等于0 2012年9月23日 DSP原理及应用
BIO高 BIO信号电平为高 无 无条件操作
13
第6章 TMS320C54x汇编语言程序设计
4. 条件操作程序
在条件操作时也可以要求有多个条件,只有所 有条件满足时才被认为是满足条件。这种多个条件 的组合就构成了指令的多重条件。
子程序返回
条件操作程序
2012年9月23日 DSP原理及应用 2
第6章 TMS320C54x汇编语言程序设计
6.1.1 分支操作程序
1. 分支转移程序
分支转移指令 通过传送控制到程序存储器的其他位置,分支转 分 类 指 令 说 明 移会中断连续的指令流。
B[D] 用该指令指定的地址加载PC 无条件 分支转移指令可以改写PC值,使程序改变流向。 分支转移 BACC[D] 用累加器的低16位指定的地址加载PC
BANZ
转移地址,辅助寄存器
指令功能:当辅助寄存器不为0时,则转至转移地址, 否则顺序执行。
2012年9月23日 DSP原理及应用 20
第6章 TMS320C54x汇编语言程序设计
6.1.2 循环操作程序
【例6.1.4】 计算
y
10
xi
STM STM LD loop: ADD BANZ
.bss x,10 ;给x保留10个空间 用AR2作为循环计数器,由BANZ实现程序的循环 .bss y,1 ;给y保留1个空间 控制。
DSP原理及应用
12
第6章 TMS320C54x汇编语言程序设计
4. 条件操作程序
条 件 算 符
操作符号 条 件 AEQ BEQ ANEQ BNEQ ALT BLT ALEQ BLEQ AGT A=0 B=0 A0 B0 A<0 B<0 A0 B0 A>0 说 明 操作符号 条 件 AOV BOV ANOV BNOV C NC TC NTC BIO AOV=1 BOV=1 AOV=0 BOV=0 C=1 C=0 TC=1 TC=0 BIO低 说 明 累加器A等于0 累加器B等于0 累加器A不等于0 累加器B不等于0 累加器A小于0 累加器B小于0 累加器A小于等于0 累加器B小于等于0 累加器A大于0 累加器A溢出 累加器B溢出 累加器A不溢出 累加器B不溢出 ALU进位位置1 ALU进位位置0 测试/控制标志位置1 测试/控制标志位置0 BIO信号电平为低
2012年9月23日 DSP原理及应用 5
第6章 TMS320C54x汇编语言程序设计
2. 子程序调用程序
子程序调用指令
分 类 指 令 说 明 CALL[D] 无条件调用 CALA[D] 条件调用 CC[D] 将返回的地址压入堆栈,用累加器A或B指定的地址加载PC 将返回的地址压入堆栈,并用该指令指定的地址加载PC
其指令分为无条件分支转移和条件分支转移两类。两 BC[D] 若满足指令给定条件,用该指令指定的地址加载PC 条 件 者都可以带延时操作和不带延时操作。 分支转移
BANG[D] FB[D] FBACC[D] 远 程 分支转移 用该指令指定的地址加载PC和XPC
若当前选择辅助寄存器不等于0,用该指令指定的地址加载PC
DSP原理及应用
11
第6章 TMS320C54x汇编语言程序设计
6.1.1 分支操作程序
4. 条件操作程序 ’C54x的一些指令只有在满足一个或是多个条 件后才被执行,如条件分支转移、条件调用和条件 返回等指令。
这些指令都用条件来限制分支转移、调用和返
回操作。这些条件可用条件算符来表示。
2012年9月23日
用累加器的低23位指定的地址加载PC和XPC
DSP原理及应用 3
2012年9月23日
第6章 TMS320C54x汇编语言程序设计
1. 分支转移程序
无条件分支转移:无条件执行分支转移; 条件分支转移:要在满足用户一个或多个条件时 才执行分支转移; 远程分支转移:允许分支转移到扩展存储器。
【例6.1.1】 分支转移举例。 STM #88H,AR0 LD #1000H,A zhong: SUB AR0,A
第6章 TMS320C54x汇编语言程序设计 内容提要
汇编语言程序设计是应用软件设计的基础,主要 任务是利用汇编指令和伪指令编写源程序以完成指定 的功能。 本章将结合例子介绍TMS320C54x汇编语言源程 序设计的基本方法,涉及的内容包括: 堆栈的使用方法1 分支、调用、返回控制程序 加法、乘法、除法、长字和并行运算程序 单指令、块重复、循环嵌套等重复操作程序 数据块传送程序 小数运算程序和浮点运算程序
DSP原理及应用 10
第6章 TMS320C54x汇编语言程序设计
3. 子程序程序 无条件返回是无条件执行返回操作。
条件返回可以给予被调用函数或中断服务程序
(ISR)更多的返回方式,以便根据被处理的数据选
择返回路径,通过使用条件返回指令来实现返回。
远程返回允许从扩展存储器的子程序或函数返
回。
2012年9月23日
i 1
#x,AR1 #9,AR2 #0,A *AR1+,A loop,*AR2-
;设置数据段的首地址 ;设置循环计数值 ;累加器清0 ;累加运算,并修改地址 ;若计数值不为0,则循环,并计数值减1
若计数值为0,则结束循环 ;累加和存入y中
STL 注意: BANZ 2012年9月23日
A, @y loop, *AR2;先判断,再修正AR2=AR2-1 DSP原理及应用
2012年9月23日 DSP原理及应用 15
第6章 TMS320C54x汇编语言程序设计
4. 条件操作程序
【例6.1.3】 条件操作程序。 BC sub,BLEQ
; 条件分支转移
若累加器B≤0,则转至sub, 否则,往下执行
CC start,AGEQ,AOV
; 条件调用 若累加器A≥0且溢出, 则调用start,否则往下执行
;将操作数#123H装入AR0 ;将操作数#456H装入AR1 ;调子程序new ;将AR1的内容左移16位后装入A ;AR0与AR1的内容相乘,结果放入A中
RET
2012年9月23日
;子程序返回
DSP原理及应用 8
第6章 TMS320C54x汇编语言程序设计
6.1.1 分支操作程序
3. 子程序返回程序 子程序返回程序可以使程序重新在被中断的连续 指令处继续执行。 返回指令通过将弹出堆栈的值(包含将要执行的 下一条指令的地址),送到程序计数器PC来实现返回 功能。 ’C54x可以执行无条件返回和条件返回,并且它 们都可以带延时或不带延时操作。
2012年9月23日 DSP原理及应用 17
第6章 TMS320C54x汇编语言程序设计
6.1.1 分支操作程序
6. 比较转移程序 比较操作指令: 利用比较指令CMPR可实现比较转移操作。 CMPR 测试条件,辅助寄存器ARx 指令功能:辅助寄存器ARx与AR0进行比较, 若比较结果使所给定的测试条件成立, 则TC位置1。 实现方法:① 通过CMPR的比较结果得TC值; ② 根据TC值,由条件转移指令实现分 支转移。
2. 子程序调用程序 无条件调用是指无条件执行调用。
条件调用和无条件调用操作相同,但是条件调
用要在满足一个或多个条件时才执行调用。
远程调用允许对扩展存储器的子程序或函数进
行调用。
2012年9月23日
DSP原理及应用
7
第6章 TMS320C54x汇编语言程序设计
2. 子程序调用程序
【例6.1.2】 子程序调用举例。 STM LD CALL LD new:MPY #123H,AR0 #456H,AR1 new AR1,16,A AR0,AR1,A
如果满足指令给定条件,将返回的地址压入堆栈,并用该 指令指定的地址加载PC
将XPC和PC压入堆栈,并用该指令指定的地址加载PC和XPC 将XPC和PC压入堆栈,用累加器的低23位指定的地址加载 PC和XPC
DSP原理及应用 6
FCALL [D] 远程调用 FCALA [D]
2012年9月23日
第6章 TMS320C54x汇编语言程序设计