10DSP技术第十讲程序地址的生成

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.title "example3_7" .bss x , 5 .def _c_int00 .mmregs _c_int00: B begin NOP begin: STM #4 ,BRC STM #x ,AR4 RPTB next-1 LD #1 , A next1: B next2 NOP next3: ADD *AR4, A STL A ,*AR4+ next: NOP LD #1234h , B NOP next2: LD #2345h ,B NOP B next3 .end
例3-4 比较操作后条件分支转移
STM #5 , AR1 ;设置特比较初值
STM #10 , AR0 ;设置比较的基准值 LOOP: …

AR1+ …

CMPR LT , AR1 ;当AR1小于10时循环 BC LOOP ,TC
四、单条指令的重复操作(RPT和RPTZ) 1。重复操作指令可以使乘法/累加和数据块传送这类多周期指令在执行一次之 后变成单周期指令(进行流水线操作),从而大提高执行速度。 2。一旦重复指令被取指、译码,直到重复循环完成以前,对所有的中断(包 括NMI,但不包括RS)均不响应。 3。在执行重复操作期间,若C54x响应保持输入HOLD信号,重复操作是否执 行则取决于状态寄存器ST1的HM位,若HM=0,则继续操作,否则暂停操作。 4。重复操作是由C54x片内的16位重复计数器(RC)和两条能对其下条指令 进行重复操作的指令RPT和RPTZ来完成的,重复执行的次数等于(RC)+1。 5。RC中的内容只能由重复指令(RPT和RPTZ)中的操作数加载 ,该操作数 (加载的重复次数)可以是一个16位的单数据存储器操作数Smem或一个8位 或16位常数k或lk给定。 6。当RPT执行时,首先把重复次数n装入RC,接着执行其下指令n+1次。
.title "example3_7" .bss x , 5 .def _c_int00 .mmregs _c_int00: B begin NOP begin: STM #4 ,BRC STM #x ,AR4 RPTB next-1 LD #1 , A ADD *AR4, A STL A ,*AR4+ next: NOP NOP LD #1234h , B NOP .end
3
3 2 2 4 2 2 3 5 5
例3-5 利用单条指令的重复操作对数组x[5]={0,0,0,0,0} 进行初始化
.title "example3-5" .def _c_int00 .mmregs .bss x , 5 _c_int00: STM #x , AR1 LD #0 , A RPT #4 STL A , *AR1+ .end _c_int00: STM #x , AR1 RPTZ #4 STL A , *AR1+ .end .title "example3-5" .def _c_int00 .mmregs .bss x , 5
五、块重复操作(RPTB) 1。块程序重复操作指令将重复操作的范围扩大到任意长度的循环回路。
2。重复次数由块重复计数器BRC(由指令STM #lk ,BRC 加载)决定
3。起点由块重复起始地址寄存器RSA(由RPTB所在的PC+2加载)决定 4。终点由块重复结束地址寄存器REA(由RPTB中的操作数加载)决定
子程序调用
从累加器调用子程 序
硬件或软件中断
将PC+1压入堆栈,用累加器A或B的低16位加载PC, 返回指令将栈顶弹出至PC,回到原先的程序处继续执 行
将PC压入堆栈,用适当的中断向量地址加载PC,返回 指令将栈顶弹出至PC,回到原先的程序处继续执行
Loading Addresses into XPC
程序地址生成器的作用: 产生程序执行所需地址并加载到程序地址总线(PAB)上,用于指定当前指令所 在程序存储区的位置
程序计数器(PC)的作用:
1)保存即将执行的指令所在内部或外部程序存储器的地址
2)当前指令取出后,下一条指令的地址加载到程序计数器
将程序地址加载到程序计数器的途径:
操作
复位 顺序执行指令 分支转移 PC=FF80h PC=PC+1
当条件满足,把T寄存器的值存放到数据存储器单元Xmem中去
当条件不满足,指令执行从数据存储器单元Xmem中读数据,然后又 把它写回到原来的单元中去,Xmem单元的值保持不变。
4。块循环计数器条件存储指令(SRCCD): STRCD Xmem , cond 中去 当条件满足,把块循环计数器(BRC)中的内容存放到数据存储器单元 Xmem
5。每执行一次块操作,BRC减1.
6。块重复操作执行时ST1中的块重复操作标志位自动置1,结束后自动清0.
STM #lk , BRC ;初始化块重复计数器,设置重复次数为lk+1次 RPTB NEXT-1 ;对下条指令至标号为NEXT前的程序块执行lk+1次重复操作

NEXT:…
用PC+1加载RSA,用NEXT-1加载REA
当条件不满足,指令执行从数据存储器单元Xmem中读数据,然后又把它写回
到原来的单元中去,Xmem单元的值保持不变。
例3-3 编写计算 y xi
i 1
4
的主要程序部分
其相应的程序为: .bss x , 4 ;为x建立4 个字单元,放置x1、x2 、x3、x4
.bss
y,1
;为y建立1 个字单元,放置y
三、条件指令中的条件判断:
多重条件判断: 当所有的条件都满足时才执行分支转移或调用返回
如:BC pmad , cond1[ , cond2[ ,…]]
相互排斥的条件不能作为条件组
1)同一条指令中的多外条件是相与的关系,但不能使用and连接
如:若累加器A的值大于0且溢出,则转移到标号为new的程序块,其指 令为: BC new, AGT,AOV 若多个条件是相或的关系,则必须用多条指令表示,因不能用or连接 如:若累加器A的值大于0或溢出,则转移到标号为new的程序块,其指 令为: BC new, AGT BC new,AOV 2)以下指令为右非法的: BC new,AGT ,ALT BC new ,AGT ,BOV BC new , AEQ , TC
加载到PC的地址
用紧跟在分支转移指令后面的16位立即数加载PC
由累加器分支转移
块重复循环
用累加器A或B的ຫໍສະໝຸດ Baidu16位立即数加载PC
若ST1中的块重复有效位BRAF=1,PC=PC+1,当 PC+1等于块重复结束地址(REA)+1时,将块重复起 始地址(RSA)加载PC, 将PC+2压入堆栈,并用紧跟在调用指令后面的16位立 即数加载PC,返回指令将栈顶弹出至PC,回到原先的 程序处继续执行
一、分支转移操作:
无条件分支转移指令: B[D] label ;转到标号为label的程序段处往下执行PC=#label
BACC[D] A或B ;转到由A或B的低16指定的程序段处往下执行PC=(A或B)L
条件分支转移指令:
BC[D] 条件, label ;条件满足转到标号为label的程序段处往下执行 PC=#label,否则继续往下执行PC=PC+1
带延迟的乘法,并将乘法结果加到累加器
乘法,并将乘法结果加到累加器 在数据存储器之间传送数据 将数据存储器中的数据传送到MMR 将数据存储器中的数据传送到程序存储器 在数据存储器之间传送数据 将MMR中的数据传送到数据存储器 将程序存储器中的数据传送到数据存储器 将以A中内容为地址的程序存储器中的内 容复制到数据存储器 将数据存储器的内容复制到以A中内容为 地址程序存储器中
7。当RPTZ执行时,首先把重复次数n装入RC,并对目的累加器清0,接着执 行其下指令n+1次。
重复操作时变成单周期的多周期指令
指令
FIRS Xmem,Ymem,pmad 对称FIR滤波器
说明
不重复操 作周期数
3
MACD Smem,Pmad,src
MACP Smem.Pmad,src MVDK Smem,dmad MVDM dmad,MMR MVDP Smem,Pmad MVKD dmad,Smem MVMD MMR,dmad MVPD Pmad,Smem READA Smem WRITA Smem
SACCD src , Xmem ,cond
当条件满足,源累加器src左移(ASM-16)位后存放到Xmem指定的数据存储 器单元,
当条件不满足时,指令执行从Xmem中读数据,然后又把它写回到原来的
单元中去,Xmem单元的值保持不变。
3。T寄存器条件存储指令(STRCD): STRCD Xmem , cond
六、循环的嵌套:
程序地址生成器的组成:
Program counter (PC) Repeat counter (RC) Block-repeat counter (BRC) Block-repeat start address register (RSA) Block-repeat end address register (REA) Program counter extension register (XPC)
条件指令: 1。条件执行指令(XC):
XC n ,cond1 [ ,cond2 [ ,… ]]
当n=1,且条件满足,则执行紧跟此条件指令后的1条单字指令 当n=2,且条件满足,则执行紧跟此条件指令后的2条单字或1双单字指令
当条件不满足时,按n的值执行1条或2条NOP指令
该指令可用于条件分支转移出去的地方只有1~2字的程序段。 2。累加器条件存储指令(SACCD):
STM #x , AR1 ;将x1的地址传给AR1 STM #3 , AR2 ;将循环次数3传给AR2
LD
#0 , A ; 对A清0
LOOP: ADD *AR1+ , A ;对x1、x2、x3、x4循环累加,结束放A中 BANZ LOOP, *AR2- ;检查循环是否应该结束
STL
A,y
辅助寄存器比较指令(CMPR): 将AR1~AR7中的数据跟AR0中的数据比较,结束放TC位
单重复指令(RPT、RPTZ)和块重复指令(RPTB)的区别: 1)RPT指令一旦执行,不会停止操作,即使有中断请求也不响应
RPTB指令一旦执行,不会停止操作,但可以响应中断
2)RPTB指令的重复块中可以有转移,但转移后必须要返回,否 则会出现不可预知的结果。
3)RPTB指令用到了BRC、RSA、REA寄存器,RPTB指令嵌套时
第十讲 程序地址的生成
一、分支转移操作:B[D]、BACC[D]、BC[D]、BANZ[D]
二、调用和返回:CALL[D]、CALA[D]、RET[D]、 RETE[D]、
RETF[D]、CC[D]、RD[D] 三、条件指令中的条件判断: 四、单条指令的重复操作RPT、RTPZ
五、块重复操作(RPTB)
BANZ[D] label ,辅助寄存器 ;辅助寄存器的值不等于0转到由标号为 label
的程序段处往下执行PC=#label,否则继续往下执行。
[D]选项:为延迟分支转移,执行紧跟分支转移指令后的1条双字指令或2条单字指令 执行完再转移,该指令不能造成PC不连续(如分支、调用、返回或软件中断指令) 若不带延迟,则立即进行分支转移。
必需对三个寄存器压栈并在弹出后对BRAF位置1。
.title "example3_7" .bss x , 5 .def _c_int00 .mmregs _c_int00: B begin NOP begin: STM #0085h ,AR1 STM #4 ,BRC STM #x ,AR4 RPTB next-1 RPT #2 ST #0456h ,*AR1+ LD #1 , A ADD *AR4, A STL A ,*AR4+ next: NOP NOP LD #1234h , B NOP .end
Far Branch Instructions
二、调用和返回:
当采用调用指令进行子程序或函数调用时,DSP会中断当前运行的程序, 转移到程序存储器的其它地址继续运行,转移前,程序的下条指令的地址 被压入堆栈,而在返回时则将这个地址弹出到PC,使被中断了的原程序能 继续执行。 无条件调用与返回: CALL[D]:将返回地址压入堆栈,用指令所规定的地址加载PC CALA[D]:将返回地址压入堆栈,用指定累加器所低16位的加载PC RET[D]:用栈顶的返回地址加载PC RETE[D]:用栈顶的返回地址加载PC,并开放中断 RETF[D]:用快速返回寄存器RTN中的返回地址加载PC,并一开放中断 条件调用与返回: CC[D]:若条件满足,则先将返回地址压入堆栈,再用指定的地址加载PC RC[D]:若条件满足,则将堆栈顶部的返回地址加载PC
相关文档
最新文档