null第3章 TMS320C54x的指令系统第3章 TMS320C54x的指令系统3.1 寻址方式
3.2 TMS320C54x的指令
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示方法
3.3 TMS320C54x的指令系统 3.1 寻址方式 3.1 寻址方式 当硬件执行指令时,寻找指令所指定的参与运算的操作数的方法——寻址方式。
根据程序的
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
采用不同的寻址方式,可以有效地缩短程序的运行时间和提高代码执行效率。
’C54x芯片的寻址方式可以分为两类:
● 数据寻址 ● 程序寻址 3.1 寻址方式 3.1 寻址方式 ’C54x有7种基本的数据寻址方式:
立即寻址:由指令提供一个操作数
绝对寻址:由指令提供一个操作数地址
累加器寻址:以累加器的
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
为地址访问程序空间 某单元
直接寻址:寻址地址为DP或SP的值加上指令提供的 偏移量
间接寻址:利用辅助寄存器访问存储器
存储器映像寄存器寻址:用来改变映像寄存器, 但不影响DP或SP的值
堆栈寻址:用来管理系统堆栈中的操作3.1 寻址方式 3.1 寻址方式 部分寻址缩略语 P(31)部分寻址缩略语 P(31)3.1.1 立即寻址 3.1.1 立即寻址 指令中含有执行指令所需的操作数。操作数紧随操作码存放在程序存储器中。
例如:LD #F180,A;将立即数F180加载到A
立即数的数值形式:
① 短立即数。3、5、8、9位,单字指令;
② 长立即数。16位,双字指令。
特点:指令中含有一个固定的立即数,运行速度较快,但需占用程序存储空间,并且数值不能改变。
用途:用于表示常数或对寄存器初始化。3.1.1 立即寻址 3.1.1 立即寻址 支持立即数的指令 注意:在立即寻址的指令中,应在数值或符号前面加
一个“#”,表示是一个立即数,以区别于地址。 3.1.2 绝对寻址 3.1.2 绝对寻址 指令中含有所要寻找的操作数的16位存储单元地址。
16位地址表示形式:
① 地址标号,如:TABLE;
② 16位符号常量,如:89AB、1234。
特点:指令中包含一个固定的16位地址,能寻
址所有数据存储空间,但运行速度慢,
需要较大的存储空间。
用途:用于对速度要求较低的场合。3.1.2 绝对寻址 3.1.2 绝对寻址 绝对寻址是利用16位地址来寻址操作数的存储单元。由于绝对地址代码的位数为16位,所以绝对地址寻址的指令至少应为2个字长。
绝对寻址有四种类型 :
① 数据存储器地址(dmad)寻址;
② 程序存储器地址(pmad)寻址;
③ 端口(PA)寻址;
④ *(1k)寻址。 1.数据存储器地址寻址 1.数据存储器地址寻址 用于确定操作数存于数据存储单元的地址。
语法:使用一个程序标号或一个数字来指定数据空间的一个地址。
例如,将数据存储器EXAM1地址单元中的数据复制到AR5寄存器所指向的数据存储单元中。
MVKD EXAM1, * AR5数据存储器的
16位地址dmad值 2.程序存储器地址寻址 2.程序存储器地址寻址 用于确定程序存储器中的一个地址。
语法:使用一个符号或具体的数字来指定程序空间的一个地址。
例如,将程序存储器TABLE地址单元中的内容复制到AR2寄存器所指向的数据存储单元中。
MVPD TABLE, * AR2 程序存储器的
16位地址pmad值 3.端口(PA)寻址 3.端口(PA)寻址 用一个符号或一个数字来确定外部I/O端口的地址。
例如,把一个数从端口为FIFO的I/O口复制到AR5寄存器所指向的数据存储单元中。
PORTR FIFO, * AR5
I/O端口地址PA 4. *(1k)寻址 4. *(1k)寻址 使用一个指定数据空间的地址来确定数据存储器中的一个地址。
语法:允许所有使用单数据存储器(Smem)寻址的指令去访问数据空间的任意单元,而不改变DP的值,也不用对AR进行初始化。
例如,把地址为PN的数据单元中的数据装到累加器A中。
LD *(PN), A
这种寻址可用于支持单数据存储器操作数的指令。
注意:*(1k)寻址的指令不能与循环指令(RPT,RPTZ)一起使用。 3.1.3 累加器寻址 3.1.3 累加器寻址 将累加器的内容作为地址去访问程序存储单元,即将累加器中的内容作为地址,用来对存放数据的程序存储器寻址。
用途:用于完成程序存储空间与数据存储空间之间的数据传输。
注意:
① 大多数’C54x用A的低16位作为程序存储器的地址,而’C548和’C549是以A的低23位作为程序存储器地址,’C5402是以A的低20位作为程序存储器地址;
② 上述两条指令重复使用时,累加器A自动增减;
③ 只能使用累加器A寻址程序空间。
④ 累加器A用来寻址程序空间。Smem用来寻址数据空间。3.1.4 直接寻址 3.1.4 直接寻址 利用数据指针DP和堆栈指针SP寻址。
指令格式:
特点:① 指令中只含有数据存储器的低7位地址(偏移地址dmad); ②16位数据存储器地址由基地址(数据页指针DP或堆栈指针SP)和偏移地址(dmad)共同构成。 3.1.4 直接寻址 3.1.4 直接寻址 所要寻址的数据存储器16位地址是由基地址和偏移地址构成。
基地址: ① 数据页指针DP(9位);
② 堆栈指针SP。
当CPL=0时,数据存储器16位地址由DP和偏移地址dmad构成;(ST1)
当CPL=1时,数据存储器16位地址由SP加偏移地址dmad构成。null 地址形成过程:
当CPL=0时,高9位低7位16位数据
存储器地址null地址形成过程:
当CPL=1时,高9位低7位16位数据
存储器地址SP+dmad3.1.4 直接寻址 3.1.4 直接寻址 DP地址的范围是从0~511(29-1),将存储器分成512页。
7位dmad范围是从0~127,每页有128个可以访问的单元。
以DP为基准的直接寻址是由DP值确定是512页中的哪一页,由dmad确定是该页中的哪一个单元。
SP可以指向存储器中的任意一个地址。dmad可以指向当前页中具体的单元,从而允许访问存储器任意基地址中的连续的128个单元
3.1.4 直接寻址 3.1.4 直接寻址 直接寻址标识:
① 变量前加@,如@x;
② 在偏移量前加@,如@5。
利用直接寻址可以在不改变DP或SP的情况下,随机寻址128个存储单元中的任何一个单元。
直接寻址的优点:每条指令只需要一个字。3.1.4 直接寻址 3.1.4 直接寻址 直接寻址特点:
① 所寻址数据存储器的16位地址是由DP或SP与7位偏移地址dmad构成;
② 可在单周期寻址128个单元;
③ 寻址速度快,能进行流水线并行操作。
用途:主要用于要求运算速度较快的场合。
注意:①上述两种直接寻址方式是相互排斥的;
②采用DP寻址时,要注意数据所在的页面指针。3.1.5 间接寻址 3.1.5 间接寻址 是根据辅助寄存器(AR0~AR7)给出的16位地址进行寻址。
每一个辅助寄存器都可以用来寻址64K字数据存储空间中任何一个单元。
两个辅助寄存器算术运算单元(ARAU0和ARAU1) 可以根据辅助寄存器的内容进行操作,完成16位无符号数算术运算。 3.1.5 间接寻址 3.1.5 间接寻址 可完成以下操作:
① 用单指令对存储器进行16位数据的读操作或写操作;
② 用单指令可以完成对两个独立的数据存储单元的读操作;
③ 用单指令可以读和写两个连续的数据存储单元;
④ 用单指令可以在读一个数据存储单元的同
时,向另一个存储单元进行写操作。3.1.5 间接寻址 3.1.5 间接寻址 1. 单操作数寻址(P35)
用来完成存储单元中16位单数据的读写操作。
指令格式:null[注1]:寻址16位字时增/减量为1,32位字时增/减量为2。
[注2]:这种方式只能用写操作指令。
[注3]:这种方式不允许对存储器映像寄存器寻址。 null[注1]:寻址16位字时增/减量为1,32位字时增/减量为2。null[注3]:这种方式不允许对存储器映像寄存器寻址。 null特殊的间接寻址功能:
(1) 循环寻址(P38)
在存储器中设置一个缓冲区作为滑动窗,来保存最新的一批数据,并用新的数据覆盖旧的数据,实现循环寻址。
循环缓冲区的长度R,由循环缓冲区长度寄存器BK确定,可通过指令设定。
其指令:
STM #LK,BK ;将立即数LK存放BK中(1) 循环寻址(1) 循环寻址长度为R的缓冲区必须从N位地址的边界开始,即循环缓冲区基地址的N个最低有效位必须为0。
N应满足:2N次>R的最小整数
例如:缓冲区长度R=32, 若2的N次>32, 则N=6。
缓冲区开始的地址:xxxx xxxx xx00 0000B
缓冲区长度R=32装入循环缓冲长度寄存器BK中。循环寻址是以BK的值为模,对缓冲区长度R进行取模运算。null 循环缓冲区的有效基地址(EFB)就是用户选定的辅助寄存器(ARx)的低N位置0后所得到的值,循环缓冲区的的尾地址(EOB)是通过用BK的低N位代替ARx的低N位得到的。循环缓冲区的指针index就是ARx的低N位,step就是加到辅助寄存器或从辅助寄存器中减去的值。下图说明了BK、辅助寄存器(ARx)、循环缓冲区的尾地址和首地址以及循环缓冲器的指针关系。(P38)
null(1) 循环寻址(1) 循环寻址① 步长小于BK,其大小与所用指令有关;
② 若步长为正,进行循环加寻址;否则进行循环减寻址;
③ 若BK=0,则为不作修正的辅助寄存器间接寻址。 1. 单操作数寻址 1. 单操作数寻址 (2)位倒序寻址
用于快速傅氏变换算法FFT。
位码顺序寻址:按照二进制递增规律寻址。如:0000,0001,0010,0011,…,1111。
位码倒序寻址:根据二进制递增码,按其位码倒序的规律进行寻址。
如:0000,1000,0100,1100,…,1111。(2)位倒序寻址 (2)位倒序寻址 null(2)位倒序寻址 (2)位倒序寻址 实现过程:
① 根据FFT算法进行转换,按转换顺序将X(0)、X(8) 、X(4)、…、 X(15)的转换
结果存入数据存储器。
② 按照位码倒序的方法寻址,可将乱序
的转换结果进行整序输出。
(2)位倒序寻址 (2)位倒序寻址 实现方法:
① 设AR2=01100000,作为基地址,指向X(0)
的存储单元。
② 设AR0=00001000,取FFT长度的一半。
程序:
RPT #15 ;重复执行下条指令16次
PORTW *AR2+0B,PA ;采用位码倒序的间接寻址,向PA口输出数据 null2. 双操作数寻址
用于完成执行2次读操作或者1次读和1次写的并行存储操作(用‖表示)。这些指令代码都是1个字长,而且只能以间接寻址方式进行操作。
两个数据存储器操作数由Xmem和Ymem表示。
Xmem:读操作数;
在两次读操作的指令中,表示一个读操作数; 在一次读和一次写的指令中,表示写操作数。 Ymem:2. 双操作数寻址 2. 双操作数寻址 用于完成执行2次读操作或者1次读和1次写并行存储操作。这些指令代码都是1个字长,而且只能以间接寻址方式进行操作。
指令格式:2. 双操作数寻址 2. 双操作数寻址 2. 双操作数寻址 2. 双操作数寻址 在指令中,由于只有2位可以用于选择辅助寄存器,所以根据Xar或Yar的值可以选择4个寄存器。3.1.5 间接寻址 3.1.5 间接寻址 间接寻址特点:通过辅助寄存器和辅助寄存器指针来寻址数据空间存储单元,并自动实现增量、减量、变址寻址、循环寻址,共有16种修正地址的方式。
用途:用于需要按固定步长寻址的场合。3.1.6 存储器映像寄存器寻址 3.1.6 存储器映像寄存器寻址 是一种不考虑DP和SP为何值,以0为基地址来访问MMR的寻址方式。
主要用于修改存储器映像寄存器的内容。
1.采用直接寻址方式
高9位数据存储器地址置0,利用指令中的低7位地址直接访问MMR。
2.采用间接寻址方式
高9位数据存储器地址置0,按照当前辅助寄存器ARx的低7位地址访问MMR。 3.1.6 存储器映像寄存器寻址 3.1.6 存储器映像寄存器寻址 ’C54x共有8条指令可以进行MMR寻址。
LDM MMR,dst ;将MMR加载到累加器
MVDM dmad,MMR ;数据存储器向MMR传送数据
MVMD MMR,dmad ;MMR向指定地址传送数据
MVMM MMRx,MMRy ;MMRx向MMRy传送数据
POPM MMR ;将数据从栈顶弹至MMR
PSHM MMR ;将MMR数据压入堆栈
STLM src,MMR ;累加器低位存入MMR
STM #lk,MMR ;长立即数lk存入MMR3.1.6 存储器映像寄存器寻址 3.1.6 存储器映像寄存器寻址 MMR寻址特点:
① 寻址速度快,对MMR执行写操作开销小;
② 可直接利用MMR的名称快速访问数据存储空间的0页资源;
③ 只能寻址数据空间的0页单元。
用途:主要用于不改变DP、SP的情况下,修改MMR中的内容。 3.1.7 堆栈寻址 3.1.7 堆栈寻址 ’C54x的堆栈是向低地址生长,并由16位堆栈指针SP管理。SP总是指向栈顶。
堆栈寻址:利用SP指针,按照先进后出的原则进行寻址。
当进栈操作时,SP先减小,然后数据进入堆栈;
当出栈操作时,数据先出栈,然后SP增加。 3.1.7 堆栈寻址 3.1.7 堆栈寻址 采用堆栈寻址的指令: (P69)
PSHD Smem ;将Smem中的数据压入堆栈
PSHM MMR ;将MMR中的数据压入堆栈
POPD Smem ;将数据从栈顶弹至Smem中
POPM MMR ;将数据从栈顶弹至MMR中3.2 TMS320C54x的指令表示方法 3.2 TMS320C54x的指令表示方法 ’C54x的助记符指令是由操作码和操作数两部分组成。在进行汇编以前,操作码和操作数都是用助记符表示。
例如:
LD #0FFh, A ;将立即数0FF传送至A 操作码源操作数目的操作数注释3.2.1 指令系统中的符号(P42) 3.2.1 指令系统中的符号(P42) 1.指令系统中的符号和缩略语1.指令系统中的符号和缩略语1.指令系统中的符号和缩略语1.指令系统中的符号和缩略语1.指令系统中的符号和缩略语1.指令系统中的符号和缩略语1.指令系统中的符号和缩略语1.指令系统中的符号和缩略语1.指令系统中的符号和缩略语1.指令系统中的符号和缩略语1.指令系统中的符号和缩略语1.指令系统中的符号和缩略语1.指令系统中的符号和缩略语1.指令系统中的符号和缩略语1.指令系统中的符号和缩略语3.2.2 指令系统中的运算符 3.2.2 指令系统中的运算符 1.指令系统中使用的记号2.指令系统的运算符号2.指令系统的运算符号3.3 TMS320C54x的指令系统 3.3 TMS320C54x的指令系统 ’C54x的指令系统共有129条基本指令,由于操作数的寻址方式不同,由它们可以派生多至205条指令。
按指令的功能可分成六大类:
算术运算指令
数据传送指令
逻辑运算指令
程序控制指令
并行操作指令
重复操作指令 3.3.1 算术运算指令 3.3.1 算术运算指令 算术运算指令是实现数学计算的重要指令集合。
’C54x的算术指令具有运算功能强、指令丰富等特点。
包括:
加法指令(ADD)
减法指令(SUB)
乘法指令(MPY)
乘法-累加/减指令(MAC/MAS)
双字运算指令(DADD)
特殊用途指令(1)加法指令 (1)加法指令 ’C54x的加法指令共有13条,可完成两个操作数的加法运算、移位后的加法运算、带进位的加法运算和不带符号位扩展的加法运算。
指令格式:操作码 源操作数 [,移位数] ,目的操作数
操 作 码: ADD、ADDC、ADDM、ADDS
源操作数: Smem、Xmem、Ymem、#lk、src
移 位 数: TS、16、SHIFT、SHFT、ASM
目的操作数:src、dst、Smem (1)加法指令 (1)加法指令 操作码 源操作数 指令格式 ADD Smem
Xmem
#lk
srcADD Smem,src
ADD Smem,TS,src
ADD Smem,16,src[,dst]
ADD Smem,[,SHIFT],src[,dst]ADD Xmem,SHIFT,src
ADD Xmem,Ymem,dstADD #lk[,SHFT],src[,dst]
ADD #lk,16,src[,dst]ADD src,[,SHIFT][,dst]
ADD src,ASM[,dst](1)加法指令 (1)加法指令 操作码 源操作数 指令格式
ADDC Smem ADDC Smem,src ADDM #lk ADDC #lk,Smem ADDS Smem ADDC Smem,src 加法指令功能 加法指令功能 3.3.1 算术运算指令3.3.1 算术运算指令(2)减法指令
’C54x的减法指令共有13条,可完成两个操作数的减法运算、移位后的减法运算、带借位的减法运算、条件减法运算和不带符号位扩展的减法运算。SUB
SUBB
SUBC
SUBS 指令格式:操作码 源操作数 [,移位数] ,目的操作数 Smem
Xmem
Ymem
#lk
src TS
16
SHIFT
SHFT
ASM src
dst (2)减法指令 (2)减法指令 操作码 源操作数 指令格式 SUB Smem
Xmem
#lk
srcSUB Smem,src
SUB Smem,TS,src
SUB Smem,16,src[,dst]
SUB Smem,[,SHIFT],src[,dst]SUB Xmem,SHIFT,src
SUB Xmem,Ymem,dstSUB #lk[,SHFT],src[,dst]
SUB #lk,16,src[,dst]SUB src,[,SHIFT][,dst]
SUB src,ASM[,dst](2)减法指令 (2)减法指令 SUBB 操作码 源操作数 目的操作数 指令格式Smem SUBB Smem,src SUBC Smem SUBC Smem,src SUBS Smem ADDC Smem,src src src src 减法指令功能 减法指令功能 (3)乘法指令 (3)乘法指令 ’C54x的指令系统提供了10条乘法运算指令,其运算结果都是32位的,存放在累加器A和B中。而参与运算的乘数可以是T寄存器、立即数、存储单元和累加器A或B的高16位。
格式:操作码 源操作数1 [,源操作数2] ,目的操作数
操 作 码: MPY、MPYR、MPYA、MPYU、SQUR
源操作数1:Smem、Xmem、#lk
源操作数2:Ymem、#lk
目的操作数:dst (3)乘法指令 (3)乘法指令 操作码 源操作数 指令格式 MPY Smem
Xmem
#lkMPY Smem,dst
MPY Smem,#lk,dstMPY Xmem,Ymem,dstMPY #lk,dst MPYA MPYA dstMPYA Smem(3)乘法指令 (3)乘法指令 操作码 源操作数 目的操作数 指令格式 MPYR Smem MPYR Smem, dst MPYU Smem MPYU Smem,dst SQUR Smem SQUR Smem,dst dst dst dst A dst SQUR A, dst 乘法指令功能 乘法指令功能 (4)乘法-累加和乘法-减法指令 (4)乘法-累加和乘法-减法指令 这类指令共计22条,除了完成乘法运算外,还具有加法或减法运算。因此,在一些复杂的算法中,可以大大提高运算速度。
参与运算的乘数可以是T寄存器、立即数、存储单元和累加器A或B的高16位。
乘法运算结束后,再将乘积与目的操作数进行加法或减法运算。(4)乘法-累加和乘法-减法指令 (4)乘法-累加和乘法-减法指令 格式:操作码 源操作数1 [,源操作数2] ,目的操作数 操 作 码:MAC、MACR、MACA、MACAR、
MACD、MACP、MACSU、MAS、MASR源操作数1:Smem、Xmem、#lk、T 源操作数2:Ymem、#lk、pmad 目的操作数:src、dst、B (4)乘法-累加和乘法-减法指令 (4)乘法-累加和乘法-减法指令 操作码 源操作数 指令格式 MAC Smem
Xmem
#lkMAC Smem,src
MAC Smem,#lk,src[,dst]MAC Xmem,Ymem,src[,dst]MAC #lk,src[,dst] MACR MACR Smem,srcMACR Xmem,Ymem,src[,dst]Smem
Xmem(4)乘法-累加和乘法-减法指令 (4)乘法-累加和乘法-减法指令 操作码 源操作数1 源操作数2 指令格式 MACA MACA Smem[,B]MACA T,src[,dst]Smem
T MACAR MACAR Smem[,B]MACAR T,src[,dst]Smem
T MACD MACD Smem,pmad,srcSmempmad MACP MACP Smem,pmad,srcSmempmad MACSU XmemYmem(4)乘法-累加和乘法-减法指令 (4)乘法-累加和乘法-减法指令 操作码 源操作数 指令格式 MAS MAS Smem,srcMAS Xmem,Ymem,src[,dst]Smem
Xmem MASR MASR Smem,srcMASR Xmem,Ymem,src[,dst]Smem
Xmem乘法-累加和乘法-减法指令功能 乘法-累加和乘法-减法指令功能 乘法-累加和乘法-减法指令功能 乘法-累加和乘法-减法指令功能 乘法-累加和乘法-减法指令功能 乘法-累加和乘法-减法指令功能 (5)双字算术运算指令 (5)双字算术运算指令 双字算术运算指令共计6条,完成双16位数的加j减运算。
① DADD Lmem,src[,dst]
功能:
若C16 = 0,则完成双精度加法
dst = Lmem +src ;
若C16 = 1,则双16位数加法
dst(39-16)= Lmem(31-16)+src(31-16)
dst(15-0)= Lmem(15-0)+src(15-0)null② DADST Lmem, dst
功能:
若C16 = 0,则完成双精度加法
dst = Lmem +(T<<16+T) ;
若C16 = 1,则双16位数加/减法
dst(39-16)= Lmem(31-16)+T
dst(15-0)= Lmem(15-0)-T
null③ DRSUB Lmem,src
功能:
若C16 = 0,则完成双精度减法
src = Lmem -src ;
若C16 = 1,则完成双16位数减法
src(39-16)=Lmem(31-16)-src(31-16)
src(15-0)= Lmem(15-0)-src(15-0)
null④ DSADT Lmem, dst
功能:
若C16 = 0,则完成双精度减法
dst = Lmem -(T<<16+T) ;
若C16 = 1,则完成双16位数加/减法
dst(39-16)= Lmem(31-16)-T
dst(15-0)= Lmem(15-0)+T
null⑤ DSUB Lmem,src
功能:
若C16 = 0,则双精度方式,
累加器减去32位数
src = src - Lmem ;
若C16 = 1,则双16位方式,
完成双16位数减法
src(39-16)= src(31-16)- Lmem(31-16)
src(15-0)= src(15-0) - Lmem(15-0)null⑥ DSUBT Lmem, dst
功能:
若C16 = 0,则双精度操作数减去T值
dst = Lmem -(T<<16 + T)
若C16 = 1,则双16位操作数减去T值
dst(39-16)= Lmem(31-16)-T
dst(15-0)= Lmem(15-0)-T(6)特殊运算指令(15条) (6)特殊运算指令(15条) (6)特殊运算指令 (6)特殊运算指令 3.3.2 逻辑运算指令(P62) 3.3.2 逻辑运算指令(P62) ’C54x的指令系统具有丰富的逻辑运算指令。
包括:
与运算指令(AND)
或运算指令(OR)
异或运算指令(XOR)
移位操作指令(SHIFT)
测试操作指令(TEST)(1)与运算指令 (1)与运算指令 指令格式:操作码 源操作数 [,移位数] ,目的操作数
操 作 码: AND、ANDM
源操作数: Smem、#lk、src
移 位 数: 16、SHIFT、SHFT
目的操作数:src、dst、Smem
与逻辑运算指令共有5条。 与逻辑运算指令共有5条。 (2)或运算指令 (2)或运算指令 或运算指令共计5条。 指令格式:操作码 源操作数 [,移位数] ,目的操作数 1Smem[,SHFT],srcOR2 #lk,src[,dst]OR 163 #lk,src[,dst]OR[,SHIFT]4 src [,dst]OR5 #lk ,SmemORM或运算指令 或运算指令 (3)异或运算指令 (3)异或运算指令 异或运算指令共计5条。 指令格式:操作码 源操作数 [,移位数] ,目的操作数 异或运算指令 异或运算指令 (4)移位操作指令 (4)移位操作指令 ’C54x共有6条移位指令,可实现带进位位循环移位、带TC位循环左移、算术移位、条件移位和逻辑移位等操作。 指令格式:操作码 源操作数 [,移位数] [,目的操作数] 操 作 码: ROL、ROLTC、ROR、SFTA、SFTC、SFTL 源操作数: src 移 位 数: SHIFT 目的操作数:dst (4)移位操作指令 (4)移位操作指令 ① 带进位位循环左移 操作数src:累加器A或B 指令功能: 累加器src与进位位C循环左移一位。 执行过程: C → src(0)
src(30~0)→ src(31~1)
src(31)→ C
0 → src(39~32) 指令格式: ROL src ;C的值移入src的最低位;src左移一位;src的最高位移入C;src的保护位清0null② 带测试位循环左移 操作数src:累加器A或B 指令功能: 累加器src与测试位TC循环左移一位。 执行过程: 指令格式: ROLTC src ① ① TC的值移入src的最低位 ② 累加器src左移一位②③ src的最高位移入TC③④ src的保护位清0④ 0 ③ 带进位位循环右移③ 带进位位循环右移 操作数src:累加器A或B 指令功能: 累加器src与进位位C循环右移一位。 执行过程: 指令格式: ROR src ① C的值移入src的31位
② 累加器src右移一位
③ src的最低位移入C
④ src的保护位清0①②③④ 0 ④ 算术移位④ 算术移位指令格式: SFTA src, SHIFT [, dst]
指令功能: 根据SHIFT,src的内容算术移位。
操作数src:累加器A或BIf SHIFT< 0
Then src((-SHIFT)-1) → C
src(39~0)<
>SHIFT→src或dst
0→src ((SHIFT-1)~0)
或 0→dst ((SHIFT-1)~0) ④ 算术移位④ 算术移位执行过程:
当SHIFT < 0时,进行算术右移
1) src的第(-SHIET-1)位复制到进位位C;
2) 40位src右移SHIFT位,结果存入src或dst;
3) 符号扩展处理
若SXM=1,进行符号位扩展。
src(39)写入dst(39~(39+SHIFT+1))
若SXM=0,不进行符号位扩展。
0写入dst(39~(39+SHIFT+1))null执行过程:
当SHIFT > 0时,进行算术左移
(1)src的第(39-SHIET)位复制到进位位C;
(2)40位src左移SHIFT位,结果存入src或dst;
(3)将0置入dst的低SHIFT的各位
0写入dst((SHIFT-1)~0)
⑤ 条件移位 ⑤ 条件移位 操作数src:累加器A或B 指令功能: 指令格式: SFTC src If src=0 Then 1 → TC
Else If src(31)=src(30)
Then src<<1 → src
0 → TC
Else 1 → TC ⑤ 条件移位⑤ 条件移位执行过程:
当src = 0时,将1写入测试位TC;
当src≠0时,进行条件移位。
若src有两个有效符号位,则移位。
32位src左移一位;
保护位src(39~32)不变;
0写入测试位TC。
若src只有一个符号位,则不移位。
1写入测试位TC。⑥ 逻辑移位⑥ 逻辑移位指令功能:
If SHIFT<0 Then src((-SHIFT) -1) → C
src(31~0)< 0,则进行逻辑左移。
src的第(31-(SHIFT-1))位复制到进位位C;
src((31-SHIFT)~0)左移SHIFT位存入dst;
0写入dst的低SHIFT位,即0→dst((SHIFT-1)~0);
0写入dst的高8位,即0→dst(39~32)。(5)测试操作指令 (5)测试操作指令 ’C54x共有5条测试操作指令。
① BIT 指令格式: BIT Xmem,BITC 指令功能: (Xmem(15-BITC))→TC
功能说明: 将Xmem的指定位复制到TC位。 操 作 数: Xmem——双数据存储操作数
BITC——测试位的位代码, 取值:0~15 ② BITF ② BITF 指令格式: BITF Smem,#lk 指令功能: If((Smem)AND lk)= 0 Then 0 →TC
Else 1 →TC
功能说明: 测试Smem中由1k指定的某些位。
若指定的测试位为0,TC=0,否则,TC=1。
lk在测试指定位中起屏蔽作用。操 作 数: Smem——单数据存储操作数
#lk——16位长立即数, 取值:0 ~ 65 535 ③ BITT ③ BITT 指令格式: BITT Smem 指令功能: (Smem(15-T(3~0)))→TC
功能说明: 将Smem的指定位复制到TC中。
T寄存器的低4位T(3~0)用于确定测试位
的位代码,位地址对应于15-T(3~0)。操 作 数: Smem——单数据存储操作数④ CMPM ④ CMPM 指令格式: CMPM Smem,#lk 操 作 数: Smem——单数据存储操作数
#lk——长立即数, 取值:-32 768 ~ 32 768指令功能: If (Smem)= lk Then 1 →TC
Else 0 →TC
功能说明: 比较Smem中的操作数与常量1k是否相等。
若(Smem)= 1k,则TC = 1,否则,TC = 0。⑤ CMPR ⑤ CMPR 指令格式: CMPR CC,ARx 操 作 数: CC——条件代码,取值:00b~11b
ARx——辅助寄存器AR0~AR7 指令功能: If (cond) Then 1 →TC
Else 0 →TC
功能说明: 根据条件代码CC,将指定的ARx与AR0比较。
若满足条件,则TC = 1,否则,TC = 0。⑤ CMPR ⑤ CMPR 注意:所有的条件都以无符号操作数的形式参与运算。3.3.3 程序控制指令 3.3.3 程序控制指令 ’C54x的程序控制指令共有31条,可分为6类:
包括:
分支转移指令
子程序调用指令
中断指令
返回指令
堆栈操作指令
其他程序控制指令1.分支转移指令 1.分支转移指令 分支转移指令共有6条,可实现无条件转移、有条件转移和远程转移等。
① B[D]
指令格式: B[D] pmad
操 作 数: pmad——立即数表示的程序存储器地址。取值:0~65 535
指令功能: pmad →PC
功能说明: 将pmad指定的程序存储器地址赋给PC,实现分支转移。
注 意: 若指令带后缀D,则为延迟方式,紧随该指令的两条单字指令或一条双字指令先被取出执行,然后程序再转移。该指令不能被循环执行。
② BACC[D] ② BACC[D] 指令格式: BACC[D] src
操 作 数: src——累加器A或B
指令功能: src(15~0) →PC
功能说明: 由src低16位所确定的地址赋给PC。
注 意: 若指令带后缀D,则为延迟方式。该指令不能被循环执行。
③ BANZ[D] ③ BANZ[D] 指令格式: BANZ[D] pmad,Sind
操 作 数: Sind——单间接寻址操作数
pmad——程序存储器地址
指令功能: If ((ARx) ≠ 0)
Then pmad→PC Else (PC)+2→PC
功能说明: 若当前ARx≠0,则pmad的值赋给PC,否则,PC值加2。
注 意: 带后缀D为延迟方式。指令不能循环执行。 ④ BC[D] ④ BC[D] 指令格式: BC[D] pmad, cond[, cond[, cond]]
操 作 数: pmad——程序存储器地址。
指令功能: If (cond(s))
Then pmad→PC Else (PC)+2→PC
功能说明: 若满足特定条件,则pmad的值赋给PC,否则,PC值加2。
注 意: 带后缀D为延迟方式。指令不能循环执行。 ⑤ FB[D] ⑤ FB[D] 指令格式: FB[D] extpmad
操 作 数: extpmad——23位立即数表示的程序存储器地址。取值:0~7F FFFF
指令功能: (extpmad(15~0))→PC;
(extpmad(22~16))→XPC
功能说明: 将extpmad的高7位(22~16)确定的页赋给XPC,extpmad的低16位赋给PC。
注 意: 带后缀D为延迟方式。指令不能循环执行。 ⑥ FBACC[D] ⑥ FBACC[D] 指令格式: FBACC[D] src
操 作 数: src——累加器A或B
指令功能: (src(15~0))→PC;(src(22~16))→XPC
功能说明: 将src的高7位(22~16) 赋给XPC,src的低16位(15~0) 赋给PC。
注 意: 带后缀D为延迟方式。指令不能循环执行。 2.子程序调用指令 2.子程序调用指令 子程序调用指令共有5条,可实现子程序的无条件调用、有条件调用和远程调用等,并具有延时操作。
① CALA[D]
指令格式: CALA[D] src
操 作 数: src——累加器A或B
指令功能: 若非延时,(SP)-1→SP (PC)+1→TOS
(src(15~0))→PC
若延时,(SP)-1→SP (PC)+3→TOS
(src(15~0))→PC
功能说明: 首先将返回的地址压入栈顶保存,然后将src的低16位赋给PC,实现子程序调用。null② CALL[D]
指令格式: CALL[D] pmad
操 作 数: pmad——程序存储器地址。
指令功能:若非延时,(SP)-1→SP (PC)+2→TOS pmad→PC
若延时,(SP)-1→SP (PC)+4→TOS
pmad→PC
功能说明: 首先将返回的地址压入栈顶保存,然后将pmad的值赋给PC,实现子程序调用。null③ CC[D]
指令格式: CC[D] pmad, cond[, cond[, cond]]
指令功能:若非延时,
If (cond(s))
Then (SP)-1→SP
(PC)+2→TOS
pmad→PC
Else (PC)+2→PC
若延时,
If (cond(s))
Then (SP)-1→SP
(PC)+4→TOS
pmad→PC
Else (PC)+2→PC
功能说明:若满足条件,则将返回地址压入栈顶,将
pmad的值赋给PC,实现子程序调用。
null④ FCALA[D]
指令格式: FCALA[D] src
指令功能: 若非延时,(SP)-1→SP (PC)+1→TOS (SP)-1→SP (XPC)→TOS
(src(15~0))→PC (src(22~16))→XPC
若延时,(SP)-1→SP (PC)+3→TOS
(SP)-1→SP (XPC)→TOS
(src(15~0))→PC (src(22~16))→XPC
功能说明: 先将返回地址PC、XPC压入栈顶,然后将src的低16位值赋给PC,高7位值赋给XPC。null⑤ FCALL[D]
指令格式: FCALL[D] extpmad
指令功能:若非延时,(SP)-1→SP (PC)+2→TOS
(SP)-1→SP (XPC)→TOS
(extpmad(15~0))→PC (extpmad(22~16))→XPC
若延时,(SP)-1→SP (PC)+4→TOS
(SP)-1→SP (XPC)→TOS
(extpmad(15~0))→PC (extpmad(22~16))→XPC
功能说明:先将返回地址PC、XPC压入栈顶,然后将extpmad的低16位赋给PC,高7位赋给XPC。
3.中断指令 3.中断指令 ① INTR
指令格式: INTR K
操 作 数: K——小于9位的短立即数
指令功能: (SP)-1→SP (PC)+1→TOS
功能说明: 首先将PC值压入栈顶,然后将K所确定的中断向量赋给PC,执行中断服务子程序。
中断标志寄存器IFR对应位清0且INTM=1。null② IRAP
指令格式: IRAP K
操 作 数: K——小于9位的短立即数
指令功能: (SP)-1→SP (PC)+1→TOS
功能说明:首先将PC值压入栈顶,然后将K所确定的中断向量赋给PC,执行中断服务子程序。4.返回指令 4.返回指令 返回指令共有5条,可实现无条件返回、有条件返回和远程返回等,并具有延时操作。
① FRET[D]
指令格式: FRET[D]
指令功能: (TOS)→XPC (SP)+1→SP
(TOS)→PC (SP)+1→SP
功能说明: 长返回指令。先将栈顶低7位赋给XPC。再把下一个单元的16位值赋给PC,SP加1修正。null② FRETE[D]
指令格式: FRETE[D]
指令功能: (TOS)→XPC (SP)+1→SP
(TOS)→PC (SP)+1→SP 0→INTM
功能说明: 长中断返回指令。先将栈顶低7位赋给XPC。再将下一个单元的16位值赋给PC,同时中断屏蔽位INTM清0。null③ RC[D]
指令格式: RC[D] cond[, cond[, cond]]
指令功能: If (cond(s))
Then (TOS)→PC (SP)+1→SP
Else (PC)+1→PC
功能说明: 若满足条件,栈顶数据弹出到PC,SP加1,
若不满足条件,执行PC加1。null④ RET[D]
指令格式: RET[D]
指令功能: (TOS)→PC (SP)+1→SP
功能说明: 栈顶16位数据弹出到PC,SP加1。
⑤ RETE[D]
指令格式: RETE[D]
指令功能: (TOS)→PC (SP)+1→SP 0→INTM
功能说明: 栈顶16位数据弹出到PC,SP加1,INTM清0。null⑥ RETF[D]
指令格式: RETF[D]
指令功能: (RTN)→PC (SP)+1→SP 0→INTM
功能说明: 将快速返回寄存器RTN中的内容赋给PC,然后SP加1,INTM清0。
3.3.3 程序控制指令 3.3.3 程序控制指令 5.堆栈操作指令
堆栈操作指令共有5条,可对系统堆栈进行管理,实现数据的进栈和出栈。
① FRAME
指令格式: FRAME K
操 作 数: K——9位短立即数,取值:-128~127
指令功能: (SP)+K→SP
功能说明: 将短立即数偏移K加到SP中。null② POPD
指令格式: POPD Smem
指令功能:(TOS)→Smem (SP)+1→SP
功能说明:由SP寻址的数据存储器单元中的内容复制到由Smem确定的数据存储器单元中。然后SP加1。
null③ POPM
指令格式: POPM MMR
操 作 数: MMR——存储器映像寄存器
指令功能: (TOS)→MMR (SP)+1→SP
功能说明:由SP寻址的数据存储器单元中的内容复制到MMR中,然后修改SP。null④ PSHD
指令格式: PSHD Smem
指令功能: (SP)-1→SP Smem →TOS
功能说明: SP减1操作后,将存储单元Smem的内容压入SP指向的数据存储单元。
⑤ PSHM
指令格式: PSHM MMR
指令功能: (SP)-1→SP MMR →TOS
功能说明: SP减1操作后,将MMR的内容压入SP指向的数