重复操作程序_第1页
重复操作程序_第2页
重复操作程序_第3页
重复操作程序_第4页
重复操作程序_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

重复操作程序2026/7/919:442

堆栈的使用方法

当程序调用中断服务程序或子程序时,需要将程序计数器PC的值和一些重要的寄存器值进行压栈保护,以便程序返回时能从间断处继续执行。

’C54x提供一个用16位堆栈指针SP寻址的软件堆栈。当向堆栈中压入数据时,堆栈是从高地址向低地址方向填入,堆栈指针SP先减1,然后将数据压入堆栈。当从堆栈中弹出数据时。数据先从堆栈中弹出,然后堆栈指针SP加1。2026/7/919:443

堆栈的使用方法

1.

堆栈的设置

size.set120stack.usect“STACK”,sizeSTM#

stack

+

size,SP

在数据RAM空间开辟一个堆栈区。

在RAM中定义一个STACK的保留空间,共120个单元

设置堆栈指针,#

stack+size→SP。保留区的高地址赋给SP,作为堆栈的栈底

若程序中要使用堆栈,必须先进行设置,如:

设置好堆栈后,就可以使用堆栈了,如:

CALLpmad;(SP)-1→SP,(PC)+2→TOS,pmad→PCRET;(TOS)→PC,(SP)+1→SP

2026/7/919:444

重复操作程序

’C54x的重复操作是使CPU重复执行一条指令或一段指令。可以分为单指令重复和块程序重复。

实现重复操作的指令:RPT——

重复下条指令;

RPTZ——

累加器清0,并重复下条指令;

RPTB——

块重复指令。

使用RPT、RPTZ能重复下一条指令;而RPTB用于重复代码块若干次。利用重复指令可实现比BANZ指令更快的循环程序。2026/7/919:445

重复操作程序

利用RPT和RPTZ可重复执行紧随其后的一条指令。重复次数由该指令的操作数决定,并且等于操作数加1。

若要重复执行N+1次,则重复指令中应规定重复次数为N。该数值保存在16位重复计数器RC中,可通过RPT或RPTZ指令加载。一条指令的最大重复次数为65536。

由于要重复的指令只需要取指一次,对于多周期指令,采用重复操作后,可使多周期指令变成单周期指令,提高运行速度。

1

单指令重复操作2026/7/919:4461

单指令重复操作【例1】对数组进行初始化,使x[8]={0,0,0,0,0,0,0,0}。.bssx,8STM#x,AR1LD#0,ARPT#7STL

A,*AR1+

.bssx,8STM#x,AR1

RPTZA,#7

STLA,*AR1+注意:

①对x[8]中的8个元素置0,重复次数为7,即执行1次STLA,

AR1+指令后,再重复执行7次;②RPTZ指令设定重复次数后,再对累加器清零。

2026/7/919:4471

单指令重复操作在执行重复操作期间,除了RS外所有中断被禁止,直到重复循环完成。

’C54x能响应HOLD信号,若HM=0,CPU继续执行重复操作,若HM=1,则暂停重复操作。

2026/7/919:448

重复操作程序5.块程序重复操作

对于整个程序块需要重复操作时,可采用程序块重复操作。

用于块程序重复操作指令为RPTB和RPTBD。程序块的长度由块程序重复指令RPTB的操作数来确定,而重复次数由块重复计数器BRC来决定。

通常RPTB的操作数为程序块的结束地址,而重复次数可用STM指令对BRC进行设定。

2026/7/919:4495.块程序重复操作块重复操作的特点:

①程序块的起始地址RSA是RPTB指令的下一行;

②块结束地址REA由RPTB指令的操作数规定;

③对程序块进行重复操作时,不论程序块多长,重复次数多大,所用的机器周期为0;

④与单指令重复操作不同,块重复操作可以响应中断。

2026/7/919:44105.块程序重复操作

块程序重复指令的特点是对任意长程序段的循环开销为0。循环由ST1状态寄存器的块重复标志位(BRAF)和紧跟在ST1状态寄存器后面的存储器映像寄存器控制。

循环过程:

①将块重复标志位BRAF置1,激活块程序重复循环;

②将一个取值在0~65535范围里的循环次数N加载到BRC;

③块重复指令把块重复的起始地址放在块重复开始地址寄存器RSA中;

④块重复指令把块重复的末地址放在块重复结束地址寄存器REA中。

2026/7/919:44115.块程序重复操作【例5.】对数组x[8]中的每一元素加1。

.bssx,8begin:LD#1,16,BSTM#7,BRCSTM#x,AR4RPTBnext-1ADD*AR4,16,B,ASTHA,*AR4+next:LD#0,B

…;设置数组空间;立即数1送入BH;设置重复次数,BRC=7,循环8次;数组首地址x送入AR4;设置循环结束地址;数组数据左移16位与BH相加;存入数组结果,并修改地址;B清0注意①块结束地址REA通常取程序块最后一条指令的下一条指令地址-1;②重复次数为7次③RPTB指令可以响应中断。

2026/7/919:4412

重复操作程序3

循环嵌套

循环嵌套是程序编制中常用的技巧,可以用来简化较为复杂的程序。

块程序重复指令RPTB所用的寄存器有:

BRC——重复计数器;

RSA——起始地址寄存器;

REA——结束地址寄存器。

RPT重复操作可以和块重复操作RPTB以及循环操作BANZ进行嵌套,实现多重嵌套。2026/7/919:4413【例5.】三重循环嵌套程序。

STM#L-1,AR7

;2T

1st:外部

STM#M-1,BRC

;2T

RPTB2nd-1

;4T

中间中间

RPT#N-1

;1T

内部

中间中间

2nd:

外部外部

BANZ1st,*AR7-

;4T内层中层外层2026/7/919:44143

循环嵌套三重循环嵌套结构:

内层

中层

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论