版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1Smem:16位单寻址操作数。Xmem:16位双寻址操作数,从DB数据总线上读出。Ymem:16位双寻址操作数,从CB数据总线上读出。dmad:16位立即数,数据存储器地址。pmad:16位立即数,程序存储器地址。PA: 16位立即数,I/O口地址。src: 源累加器(A或B)。dst: 目的累加器(A或B)。lk: 16位长立即数。第一节 TMS320C54x的寻址方式 缩写第1页,共157页。21立即数寻址2绝对地址寻址3累加器寻址4直接寻址5间接寻址6存储器映象寄存器寻址7堆栈寻址寻址分类第2页,共157页。3 1立即数寻址 在操作数前面需要加字号来说明该操作数为立即数。否则会把该操作
2、数误认为是一个地址,从而把立即数寻址变成绝对地址寻址。 特点指令中包含有执行指令所需要的操作数。立即数分为3、5、8或9位的短立即数和16位的长立即数两种。短立即数可包含在单字或双字指令中,长立即数在双字指令中。 注意LD #93h,A LD 93h,A 举例第3页,共157页。4 特点:指令中含有一个固定的立即数,运行速度较快,但需占用程序存储空间,并且数值不能改变。 用途:用于对寄存器初始化。3位立即数 5位立即数 8位立即数 9位立即数 16位立即数 LD LD FRAME LD RPT LD ADD ADDM ANDANDM BITF CMPMLD MAC OR ORM RPT RPT
3、Z ST STM SUBXOR XORM 支持立即数的指令 第4页,共157页。5 2绝对地址寻址特点在指令中包含有所要寻址的存储单元的16位地址。这个16位的地址可以用其所在单元的地址标号或者16位符号常数来表示。 绝对寻址有四种类型 : 数据存储器地址(dmad)寻址; 程序存储器地址(pmad)寻址; 端口(PA)寻址; *(1k)寻址。 第5页,共157页。6(1)数据存储器地址(damd)寻址 用一个符号或一个数来确定数据空间的一个地址。 方法MVKD SAMPLE,*AR3LD 93h,A 举例第6页,共157页。7用一个符号或一个具体的数来确定程序存储器中的一个地址 (2)程序存
4、储器地址(pmad)寻址 方法MVPD TABLE,*AR4MVPD 90h,*AR4 举例第7页,共157页。8用一个符号或一个常数来确定外部I/O口地址 (3)PA寻址 端口(PA) 方法PORTR FIFO,*AR5PORTR 90h,*AR5 举例第8页,共157页。9用一个符号或一个常数来确定数据存储器中的一个地址 (4)*(lk)寻址 方法LD *(BUFFER),A 举例特点允许所有使用Smem寻址的指令去访问数据空间的任意单元而不改变数据页指针(DP)的值,也不用对ARx进行初始化 第9页,共157页。10绝对寻址总结 16位地址表示形式: 地址符号,如:TABLE; 16位数
5、值,如:89AB、1234。 特点:指令中包含一个固定的16位地址,能寻 址所有数据、程序和I/O存储空间,但 运行速度慢,需要较大的存储空间。 用途:用于对速度要求较低的场合。第10页,共157页。11用累加器中的数值作为地址来读写程序存储器。 方法READA Smem WRITA Smem 举例特点可用来完成程序存储器单元的数据与数据存储器单元的数据进行交换 3累加器寻址第11页,共157页。12 注 意: 大多数C54x用A的低16位作为程序存储器的地址,而C548和C549是以A的低23位作为程序存储器地址,C5402是以A的低20位作为程序存储器地址; 上述两条指令重复使用时,累加器
6、A自动增减; 只能使用累加器A寻址程序空间。第12页,共157页。13用一个符号或一个常数来确定7位偏移值,与DP或SP共同形成16位的数据存储器实际地址。4直接寻址 方法15 8 7 6 0 操 作 码 I = 0 数据存储器地址(dmad) 指令的8位操作码指令的标识符表示指令为直接寻址 数据存储器地址 包含了数据存储器偏移地址 指令格式:第13页,共157页。14 地址形成过程:当CPL=0时,直接寻址指 令158760操作码I=0dmad页指针DP(位于ST0中)9位数据页指针DP9位数据页指针DP高9位dmad低7位16位数据存储器地址CPL=0 7位dma域与9bit的DP相结合形
7、成16位的数据存储器地址。CPL=1 7位dma域加上(正偏移)SP的值形成16位的数据存储器地址。 第14页,共157页。15 地址形成过程:当CPL=1时,直接寻址指 令158760操作码I=0dmad高9位dmad低7位16位数据存储器地址16位堆栈指针SP堆栈指针SPSP+dmad16位SP+dmad第15页,共157页。16 DP地址的范围是从0511(29-1),将存储器分成512页。 以DP为基准的直接寻址是由DP值确定是512页中的哪一页,由dmad确定是该页中的哪一个单元。 7位dmad范围是从0127,每页有128个可以访问的单元。 SP可以指向存储器中的任意一个地址。dm
8、ad可以指向当前页中具体的单元,从而允许访问存储器任意基地址中的连续的128个单元 第16页,共157页。17可以在不改变DP或SP的情况下,随机地寻址128个存储单元中的任何一个单元。RSBX CPLLD #x,DPLD u,A ADD v,A =SSBX CPL LD X1,A ADD Y2,A 举例特点用途主要用于要求运算速度较快的场合第17页,共157页。18 例1:数据存储器存储数据如图所示,采用数据页指针DP直接寻址,完成x,y单元的两个数据求和。RSBX CPL数据存储器地址数据01800001.X:01FF1000y:02000500.第3页第4页LD #3,DPLD x,AA
9、DD y,A;CPL复位;立即数3赋给DP;x单元的数据送入A;完成x和y单元的数 据相加DPdmaLD #3,DPLD #3,DP0 0000 0011LD x,ALD x,A111 1111操作码 0 111 1111机器码x0 0000 0011111 11110 1 F Fx01FF1000A00 0000 100001FF1000ADD y,A操作码 0 000 0000机器码000 0000y0 0000 0011000 00001 8 0 0y018000010180H0001+100101800001100100 0000ADD y,A00 0000 1001A结果ADD y,
10、ALD x,ALD #3,DPRSBX CPLADD y,ALD #4,DPLD #4,DPRSBX CPLLD #3,DPDP0 0000 0011LD x,Adma111 11110 1 F FxA00 0000 1000LD #4,DPDP0 0000 0100ADD y,Adma000 00000 2 0 0y05000200H05000200H+005100 0000 00 0000 150000 0000 1500A结果第18页,共157页。19 例2:数据存储器存储数据如图所示,利用堆栈指针SP直接寻址,求堆栈中距栈顶两个数x,y的和。SSBX CPL数据存储器002001000
11、050A000.LD 1,AADD 2,A;CPL置位;x单元的数据送入A;完成x和y单元的数 据相加12SPx:y:SPx:y:0000 0010 0000 0000SP000 0001dmax000 0010dmay0 2 0 1X地址0 2 0 2y地址SSBX CPLLD 1,Ax:0200H1=0201H0100A00 0000 01000100 x:ADD 2,A2=0202Hy:00500202H0050000 0000510+y:005000 0000 015000 0000 0150A执行结果第19页,共157页。205间接寻址 方法特点根据辅助寄存器(AR0AR7)给出的1
12、6位地址进行寻址。寻址范围为64K 能在一个指令中访问两个数据存储器单元两个独立的存储器单元读数据读一个、写另一个存储器单元读写两个连续的存储器单元 第20页,共157页。21(1)单操作数寻址 LD *AR1,B15 8 7 6 3 2 0 操作码 I 1 MOD ARF 指令的8位操作码指令的标识符表示指令为间接寻址4位的方式域 用来定义间接寻址的类型3位辅助寄存器域 用来定义所使用的辅助寄存器第21页,共157页。22单操作数间接寻址形式MOD域 操作句法功 能说 明0000 * ARx 地址=ARx ARx的内容为数据存储器地址0001 * ARx- 地址=ARx ARx=ARx-1
13、寻址结束后,ARx地址减1 。注2 0010 * ARx+ 地址=ARx ARx=ARx+1 寻址结束后,ARx地址加1。 注1 0011 * +ARx ARx=ARx+1 地址=ARx ARx中的地址加1后,再寻址。 注1 、注2、注3 0100 * ARx-0B 地址=ARx ARx=B(ARx-AR0) 寻址结束后,用位倒序进位的方法从 ARx中减去AR0的值。 注1:寻址16位字时增/减量为1,32位字时增/减量为2。注2:这种方式只能用写操作指令。注3:这种方式不允许对存储器映像寄存器寻址。 第22页,共157页。23单操作数间接寻址形式MOD域 操作句法功 能说 明0101 * A
14、Rx-0 地址=ARx ARx=ARx-AR0 寻址结束后,从ARx中减去AR0的值。0110 * ARx+0 地址 = ARx ARx=ARx+AR0 寻址结束后,把AR0加到ARx中。0111 * ARx+0B 地址=ARx ARx=B(ARx+AR0) 寻址结束后,用位倒序进位的方法将 AR0加到ARx中1000 * ARx-% 地址=ARx ARx=Circ(ARx-1)寻址结束后,ARx中的地址值按循环减的方法减1。注1 1001 * ARx-0% 地址=ARx ARx=Circ(ARx-AR0) 寻址结束后,按循环减的方法从ARx中减去AR0中的值 注1:寻址16位字时增/减量为1
15、,32位字时增/减量为2。第23页,共157页。24单操作数间接寻址形式 MOD域 操作句法功 能说 明1010 * ARx+% 地址=ARx ARx=Circ(ARx+1)寻址结束后,ARx中的地址值按循环加的方法加1。注1 1011 * ARx+0% 地址=ARx ARx=Circ(ARx+AR0) 寻址结束后,按循环加的方法将AR0中的值加到ARx。 1100 * ARx(lk) 地址=ARx+lk ARx=ARx以ARx与16位数之和作为地址,寻址结束后,ARx中的值不变。 1101 * +ARx(lk) 地址=ARx+lk ARx=ARx+lk将一个16位带符号数加到ARx,然后寻址
16、。注31110 * ARx(lk)% 地址=Circ(ARx+lk) ARx=Circ(ARx+lk) 将一个16位带符号数按循环加的方法加至ARx,然后再寻址1111 * (lk) 地址=(lk)利用16位无符号数作为地址,寻址数据存储器注3:这种方式不允许对存储器映像寄存器寻址。 第24页,共157页。251) 循环寻址 许多算法,如卷积,相关和FIR滤波等,都需要在存储器中实现一个循环缓冲器。在这些算法中,一个循环缓冲器就是一个包含了最近的数据的滑动窗口。当新的数据来到时,缓冲器就会覆盖最早的数据。 循环缓冲器实现的关键是循环寻址的实现。C54x间接寻址中提供了循环寻址的方式,以%表示。
17、第25页,共157页。26循环寻址的有效地址计算 循环缓冲区的参数主要包括:长度寄存器(BK)、有效基地址(EFB)、尾地址(EOB)。BK:定义了循环缓冲区的大小R。大小为R的循环缓冲器其地址要始于最低N位为零的地址。并且R要满足下面的条件:2NREFB:循环缓冲器的有效基地址(EFB)就是用户选定的辅助寄存器(ARx)的低N位置 0后所得到的值。EOB:是通过用BK的低N位代替ARx的低N位得到。 例如:缓冲区长度R=32, 若2N32, 则N=6。 缓冲区开始的地址:xxxx xxxx xx00 0000B 缓冲区长度R=32装入循环缓冲长度寄存器BK中。 第26页,共157页。27第2
18、7页,共157页。28 循环缓冲器的指示index就是ARx的低N位,步长step就是加到辅助寄存器,或从辅助寄存器中减去的值。循环寻址的算法如下:if 0 index+step BK; index = index + stepelse if index + step BK; index = index + step BKelse if index + step 0; index = index + step + BK第28页,共157页。29 循环寻址要遵循的原则 :循环缓冲区的长度R小于2N,且地址从一个低N位为0的地址开始;步长小于或等于循环缓冲区的长度;所使用的辅助寄存器必须指向缓冲区
19、单元。第29页,共157页。302) 位倒序寻址 用于快速傅氏变换算法FFT。 位码顺序寻址:按照二进制递增规律寻址。如:0000,0001,0010,0011,1111。如:0000,1000,0100,1100,1111。 位码倒序寻址:根据二进制递增码,按其位码倒序的规律进行寻址。第30页,共157页。31 WN0WN0WN0W0N-1-1-1-1X (0)X (1)X (0)X (1)X (0)X (1)X (0)X (1)33445566WN0WN2WN0WN2-1-1-1-1X (0)X (1)X (2)X (3)X (0)X (1)X (2)X (3)11121222WWWWN0
20、N1N2N3-1-1-1-1X(0)X(1)X(2)X(3)X(4)X(5)X(6)X(7)8点DFT的FFT的运算流图(0)(4)(2)(6)(1)(5)(3)(7)第31页,共157页。32-1X(0)X(1)X(2)X(3)X(4)X(5)X(6)X(7)-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1X(8)X(9)X(10)X(11)X(12)X(13)X(14)X(15)-1第32页,共157页。33位码顺序和倒序对照表序号位码顺序寻 址位码倒序寻 址序号位码顺序寻 址位码倒序寻 址00000000081000
21、0001100011000910011001200100100101010010130011110011101111014010000101211000011501011010131101101160110011014111001117011111101511111111第33页,共157页。34 倒序寻址主要用于FFT算法中,位倒序寻址提高了执行速度和在FFT算法程序中使用存储器的效率。 在这种寻址方式中,用到两个辅助寄存器: AR0:存放的整数N是FFT点数的一半。 ARx:指向数据存放的物理单元。 倒序寻址将AR0加到辅助寄存器ARx中,产生数据存储器的16位地址。 当使用位倒序寻址把A
22、R0加到辅助寄存器中时,地址以位倒序的方式产生,即进位是从左向右,而不是从右向左。 间接寻址中*ARx+0B表示位倒序寻址。 0110 1000 + 0000 1000 0110 0100第34页,共157页。35例: 设FFT长度为16,则AR0赋值为8,位倒序方式读入数据情况如下:第35页,共157页。36(2)双操作数寻址方式 用于完成执行2次读操作或者1次读和1次写存储的并行操作。这些指令代码都是1个字长,而且只能以间接寻址方式进行操作。 两个数据存储器操作数由Xmem和Ymem表示。 Xmem:读操作数; Ymem: 在两次读操作的指令中,表示一个读操作数; 在一次读和一次写的指令中
23、,表示写操作数。 第36页,共157页。37指令格式 MPY *AR2,*AR3,A15 8 7 6 5 4 3 2 1 0 操 作 码 Xmod Xar Ymod Yar 指令的8位操作码用来定义Xmem操作数间接寻址方式的类型用来定义存储Xmem地址的辅助寄存器用来定义Ymem操作数间接寻址方式的类型用来定义存储Ymem地址的辅助寄存器第37页,共157页。38Xar或Yar 辅助寄存器00 AR201 AR310 AR411 AR5辅助寄存器选择Xmod或Ymod操作码语法功 能说 明00*ARxaddr=ARxARx是数据存储器地址01*ARx-addr=ARxARx=ARx-1访问后
24、,ARx中的地址减110*ARx+addr=ARxARx=ARx+1访问后,ARx中的地址加111*ARx+0%addr=ARxARx=circ(ARx+AR0)访问后,AR0以循环寻址的方式加到ARx中双数据存储器操作数寻址的类型第38页,共157页。39 总结:间接寻址通过辅助寄存器和辅助寄存器指针来寻址数据空间存储单元,并自动实现增量、减量,进行变址寻址、循环寻址,共有16种修正地址的方式。 用途:用于需要按固定步长寻址的场合。第39页,共157页。400页寻址。不影响当前DP或SP值 。用于直接寻址和间接寻址用来修改存储器映象寄存器 6存储器映象寄存器寻址功能LDM PRD,A举例特点
25、方法高9位数据存储器地址被置0,利用指令中的低位地址访问MMR。第40页,共157页。41 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存入MMR第41页,共157页。427堆栈寻址 从高地址向低地址方向生
26、长,SP用来管理堆栈,SP始终指向堆栈中所存放的最后一个数据,即SP指针始终指向栈顶。在压入操作时,先减小SP的值,再将数据压入堆栈;在弹出操作时,先从堆栈弹出数据,再增加SP的值。用来在中断和子程序调用时自动保存程序计数器(PC)中的数值,也能用来保护现场或传送参数 功能特点第42页,共157页。43 进栈操作时,SP先减小,然后数据进入堆栈; 数据存储器03FFH1234SP567813FFsmem SPSP-1,使SP指向03FEH;SP03FEH 数据进栈,SP=03FEH。13FFSP 出栈操作时,数据先出栈,然后SP增加。 XXXXsmem SP=03FEH,数据出栈;SP13FF
27、 SPSP+1,使SP指向03FFH。SP第43页,共157页。44 采用堆栈寻址的指令: PSHD Smem ;将Smem中的数据压入堆栈 PSHM MMR ;将MMR中的数据压入堆栈 POPD Smem ;将数据从栈顶弹至Smem中 POPM MMR ;将数据从栈顶弹至MMR中第44页,共157页。45寻址方式用 途举 例指令含义立即寻址主要用于初始化LD #10,A立即数10 A绝对寻址利用16位地址寻址存储单元STL A,dmad将AL内容存入y所在的存储单元累加器寻址将累加器中的内容作为地址READA x将A的内容作为地址读程序存储器,并存入x存储单元直接寻址利用数据页指针和堆栈指针
28、寻址LD x,A(DP+x的低7位地址) A间接寻址利用辅助寄存器作为地址指针LD *AR1,A(AR1) A存储器映像寄存器寻址快速寻址存储器映象寄存器LDM ST1,B(ST1) B堆栈寻址压入/弹出数据存储器和存储器映像寄存器MMRPSHM AG(SP)-1 SP,(AG) (SP)寻址方式总结第45页,共157页。46第二节 程序地址的生成程序地址生成器(PAGEN)构成程序计数器(PC)重复计数器(RC)块重复计数器(BRC)块重复起始地址寄存器(RSA)块重复结束地址寄存器(REA)核心16位程序计数器(PC)中保存某个内部或外部程序存储器的地址。地址内容为:即将取指的某条指令;某
29、个16位立即操作数;系数表。在程序存储器中的地址第46页,共157页。47操作加载到PC的地址复位PC=FF80h。顺序执行指令PC=PC+1。分支转移用紧跟在分支转移指令后面的16位立即数加载PC。由累加器分支转移用累加器A或B的低16位立即数加载PC。块重复循环假如ST1中的块重复有效位BRAF=1,当PC+1等于块重复结束地址(REA)+1,将块重复起始地址(RSA)加载PC。子程序调用将PC+2压入堆栈,并用紧跟在调用指令后面的16位立即数加载PC。返回指令将栈顶弹出至PC,回到原先的程序处继续执行。从累加器调用子程序将PC+1压入堆栈,用累加器A或B的低16位加载PC。返回指令将栈顶
30、弹出至PC,回到原先的程序处继续执行。硬件中断或软件中断将PC压入堆栈,用适当的中断向量地址加载PC。中断返回时,将栈顶弹出至PC,继续执行被中断了的子程序。将程序存储器地址加载到程序计数器的途径第47页,共157页。481分支转移操作 通过分支转移指令改写PC,来改变程序的流向。可执行:分支转移循环控制子程序操作 功能方法第48页,共157页。49条件分支转移无条件分支转移 BD用指令中所给出的地址加载PCBACCD用所指定的累加器的低16位作为地址加载PC。 带延迟不带延迟操作转移种类BCD如果指令中所规定的条件得到满足,就用指令中所给出的地址加载PC;BANZD如果当前辅助寄存器不等于0
31、,就用指令中所规定的地址加载PC。 BC new,AOV BANZ loop,*AR2-B nextBACC A第49页,共157页。502调用和返回 转移前,原程序的下条指令的地址被压入堆栈,而在返回时则将这个地址弹出至PC,使被中断了的原程序能继续执行。 当采用调用指令进行子程序或函数调用时,DSP中断当前运行的程序,转移到程序存储器的其它地址继续运行。功能方法无条件调用与返回有条件调用与返回带延迟不带延迟第50页,共157页。51RC cond CALL sub CALA srcCC sub , cond RET RETE RETF条件调用指令无条件调用指令无条件返回指令条件返回指令第5
32、1页,共157页。523条件指令中的条件判断第52页,共157页。53多重条件判断 BC pmad,cond,cond,cond相与关系相或关系BC pmad,condBC pmad,cond第1组第2组A 类B 类A 类B 类C 类EQOVTCCBIONEQNOVNTCNCNBIOLTLEQGTGEQ第53页,共157页。54第1组 例如 可以从A类中选一个条件,同时可以从B类中选择一个条件。但是不能从同一类中选择两个条件。另外,两种条件测试的累加器必须是同一个。可以同时测试AGT和AOV,但不能同时测试AGT和BGT。 BC pmad,AGT,AOVBC pmad,AGT,BOV第54页,
33、共157页。55第2组 例如 可以在A、B、C三类中各选择一个条件,但不能从同一类中选择两个条件 BC pmad,TC,C,BIOBC pmad,NTC,TC,NBIO第55页,共157页。56特例如果条件分支转移出去的地方只有12字的程序段,则可以用一条单周期条件执行指令(XC)来代替分支转移指令:XC n,cond,cond,cond当n=1,且条件得到满足,就执行紧随此条件指令后的个字指令。当n=2,且条件得到满足,就执行紧随此指令后的1个双字指令或者2条单字指令。当条件不满足,就依n的值执行1条或2条NOP指令。第56页,共157页。57例3-3 编写计算 的主要程序部分。 .bss
34、x,4 ;为X建立4个单元, ;放置X1、X2、X3、X4 .bss y,1 ;为Y建立1个单元,放置Y STM #x,AR1 ;将X1的地址传给AR1 STM #3,AR2 ;将循环次数3传给AR2 LD #0,A ;对A清零loop:ADD *AR1+,A ;对X1、X2、X3、X4循环 ;累加,结果放A中 BANZ loop, *AR2- ;检查循环是否应结束 STL A,y ;将累加结果存入Y中第57页,共157页。584单条指令的重复操作 利用RPT和RPTZ可重复执行其后的一条指令。重复的次数是指令操作数加1,这个值保存在16位的重复计数寄存器(RC)中。实现第58页,共157页。
35、59特点1RC内容不能编程设置,只能由重复指令(RPT和RPTZ)中的操作数加载。操作数n的最大值为65 535,最大重复执行次数为65 535+1。 一旦重复指令被取指、译码,直到重复循环完成以前,对所有的中断(包括NMI,但不包括RS)均不响应。第59页,共157页。60重复过程当RPT指令执行时:首先把循环的次数装入循环计数器(RC),其循环次数n由一个16位单数据存储器操作数 Smem或一个8位或16位常数k或lk给定。这样, 紧接着的下一条指令会循环执行n+1次。循环,RC在执行减1操作时不能被访问。注意:该循环内不能套用循环。 当RPTZ指令执行时:对目的累加器dst清0, 循环执
36、行下一条指令n+1次。 第60页,共157页。61例3-5 利用单条指令的重复操作对数组x5=0,0,0,0,0进行初始化。.bss x,5 ;为数组x分配5个存储单元STM #x,AR1 ;将x的首地址赋给AR1LD #0,A ;对A清零RPT #4 ;设置重复执行下条指令5次STL A,*AR1+;对x5各单元清零或者.bss x,5STM #x,AR1RPTZ A,#4;对A清零并设置重复执行下条指令5次STL A,*AR1+第61页,共157页。62特点5块重复操作 利用C54x内部的块重复计数器(BRC,加载值可为065 535)、块重复起始地址寄存器(RSA)、块重复结束地址寄存器
37、(REA)与程序块重复指令RPTB,可对紧随RPTB、由若干条指令构成的程序块进行重复操作。功能使用RPTB指令将重复操作的范围扩大到64K长度的循环回路 注意1.RPT指令一旦执行,不会停止操作,即使有中断请求也不响应;2.RPTB指令可以响应中断;第62页,共157页。63块程序重复指令RPTB的操作数是循环回路的结束地址;其下条指令就是重复操作的内容;在使用RPTB之前必须先用STM指令将所规定的迭代次数加载到块重复计数器(BRC)中。单条重复指令执行时关闭所有可屏蔽中断,而块重复操作执行期间可以响应中断。 说明第63页,共157页。64 .bss x,5start: LD #1,16,
38、B STM #4,BRC STM #x,AR4 RPTB next-1 ADD *AR4,16,B,A STH A,*AR4+next: LD #0,B例3-6对数组x5中的每个元素加1。第64页,共157页。65对寄存器的占用6循环的嵌套 执行RPT指令时占用RC寄存器(重复计数器);执行RPTB指令时要用到BRC、RSA和RSE寄存器。只有一套块重复寄存器,故块重复操作不能嵌套。 由于RPT与RPTB两者用了不同的寄存器,因此RPT指令可以嵌套在RPTB指令的循环中,实现循环的嵌套。执行BANZ指令只占用辅助寄存器ARx。不会与RPT RPTB指令相冲突。嵌套原则参与嵌套循环的寄存器不能重
39、复使用 第65页,共157页。66图3-3 一个三重循环嵌套结构第66页,共157页。67第四节 指令系统概述TMS320C54x的指令系统分助记符形式和代数式形式两种。共有指令129条,由于操作数的寻址方式不同,派生至205条。第67页,共157页。68 C54x的助记符指令是由操作码和操作数两部分组成。在进行汇编以前,操作码和操作数都是用助记符表示。 例如: LD #0FFh, A ;将立即数0FF传送至A 操作码源操作数目的操作数注释第68页,共157页。694.1 指令系统中的符号 1.指令系统中的符号和缩略语序号符 号含 义1A累加器A2ALU算术逻辑运算单元3AR泛指通用辅助寄存器
40、4ARx指定某一辅助寄存器AR0AR75ARPST0中的3位辅助寄存器指针6ASMST1中的5位累加器移位方式位-16157B累加器B8BRAFST1中的块重复操作标志9BRC块重复操作寄存器10BITC或bit_code用于测试指令,指定数据存储器单元中的哪一位被测试,取指范围:015第69页,共157页。701.指令系统中的符号和缩略语序号符 号含 义11C16ST1中的双16位/双精度算术运算方式位12CST0中的进位位13CC2位条件码(0CC3)14CMPTST1中的ARP修正方式位15CPLST1中的直接寻址编辑标志位16cond表示一种条件的操作数,用于条件执行指令17d,D延时
41、选项18DABD地址总线19DARDAB地址寄存器20dmad16位立即数数据存储器地址(065535)第70页,共157页。711.指令系统中的符号和缩略语序号符 号含 义21Dmem数据存储器操作数22DPST0中的数据存储器页指针(0DP511)23dst目的累加器(A和B)24dst_与dst相反的目的累加器25EABE地址总线26EAREAB地址总线27extpmad23位立即程序存储器地址28FRCTST1中的小数方式位29hi(A)累加器的高阶位(AH或BH)30HMST1中的保持方式位第71页,共157页。721.指令系统中的符号和缩略语序号符 号含 义31IFR中断标志寄存器
42、32INTMST1中的中断屏蔽位33K少于9位的短立即数34k33位立即数(0k37)35k55位立即数(-16k515)36k99位立即数(0k9511)37lk16位长立即数38Lmem利用长字寻址的32位单数据存储器操作数39Mmr,MMR存储器映像寄存器40MMRx,MMRy存储器映像寄存器,AR0AR7或SP第72页,共157页。731.指令系统中的符号和缩略语序号符 号含 义41nXC指令后面的字数,取1或242N指定状态寄存器,N=0为ST0,N=1为ST143OVAST0中的累加器A溢出标志44OVBST0中的累加器B溢出标志45OVdst指定目的累加器(A或B)的溢出标志46
43、OVdst_指定与Ovdst相反的目的累加器的溢出标志47OVsrc指定源累加器(A或B)的溢出标志48OVMST1中的溢出方式位49PA16位立即端口地址(0PA65535)50PAR程序存储器地址寄存器第73页,共157页。741.指令系统中的符号和缩略语序号符 号含 义51PC程序计数器52pmad16位立即程序存储器地址(0pmad65535)53pmem程序存储器操作数54PMST处理器工作方式状态寄存器55prog程序存储器操作数56R舍入选项57rnd循环寻址58RC重复计数器59RTN快速返回寄存器60REA块重复结束地址寄存器第74页,共157页。751.指令系统中的符号和缩
44、略语序号符 号含 义61RSA块重复起始地址寄存器62SBIT用于指定状态寄存器位的4位地址(015)63SHFT4位移位值(015)64SHIFT5位移位值(-1615)65Sind间接寻址的单数据存储器操作数66Smem16位单数据存储器操作数67SP堆栈指针寄存器68src源累加器(A或B)69ST0,ST1状态寄存器0,状态寄存器170SXMST1中的符号扩展方式位第75页,共157页。761.指令系统中的符号和缩略语序号符 号含 义71T暂存器72TCST0中的测试/控制标志73TOS堆栈顶部74TRN状态转移寄存器75TS由T寄存器的50位所规定的移位数(-1631)76uns无符
45、号数77XFST1中的外部标志状态位78XPC程序计数器扩展寄存器79Xmem16位双数据存储器操作数,用于双数据操作数指令80Ymem16位双数据存储器操作数,用于双数据操作数指令和单数据操作指令第76页,共157页。772.指令操作码符号和缩略语序号符 号含 义1A数据存储器的地址位2ARx指定辅助寄存器的3位数区3BITC4位码区4CC2位条件码区5CCCC CCCC8位条件码区6COND4位条件码区7D目的累加器位。D=0为累加器A,D=1为累加器B8I寻址方式位。 I=0直接寻址,I=1间接寻址9K少于9位的短立即数区10MMRx,MMRy指定映像寄存器中的4位数(08)第77页,共
46、157页。782.指令操作码符号和缩略语序号符 号含 义11N单独一位数12NN决定中断形式的2位数13R舍入选项位。R=0不带舍入指令,R=1对结果舍入处理14S源累加器位。S=0为累加器A,S=1为累加器B15SBIT状态寄存器的4位位号数16SHFT4位移位数区(015)17SHIFT5位移位数区(-1615)18X数据存储器位19Y数据存储器位20Z延迟指令位。Z=0无延迟操作,Z=1带延迟操作第78页,共157页。794.2 TMS320C54x的指令系统 C54x的指令系统共有129条基本指令,由于操作数的寻址方式不同,由它们可以派生多至205条指令。 按指令的功能可分成五大类:
47、算术运算指令 逻辑运算指令 程序控制指令装入指令重复操作指令 第79页,共157页。801. 算术运算指令 算术运算指令是实现数学计算的重要指令集合。C54x的算术指令具有运算功能强、指令丰富等特点。 包括:加法指令(ADD) 减法指令(SUB) 乘法指令(MPY) 乘法-累加/减指令(MAC/MAS)双字运算指令(DADD) 特殊用途指令第80页,共157页。81(1)加法指令序号指 令功 能说 明1ADD Smem , srcsrc=src+Smem操作数加至累加器2ADD Smem , TS,srcsrc=src+SmemTS操作数移位后加至累加器3ADD Smem ,16 ,src,d
48、st dst=src+Smem16操作数左移16位加至累加器4ADD Smem,SHIFT,src,dstdst=src+Smem SHIFT操作数移位后加至累加器5ADD Xmem ,SHFT ,src src=src+Xmem SHFT操作数移位后加至累加器6ADD Xmem ,Ymem ,dstdst=Xmem16+Ymem16两操作数分别左移16位后相加送至累加器7ADD #lk,SHFT,src,dstdst=src+#lk SHFT长立即数移位后加至累加器8ADD #lk,16,src,dstdst=src+#lk 16长立即数左移16位加至累加器9ADD src,SHIFT,ds
49、tdst=dst+src SHIFT累加器移位后相加10ADD src,ASM,dstdst=dst+src ASM累加器按ASM移位后相加11ADDC Smem , srcsrc=src+Smem+C操作数带进位加至累加器12ADDM #lk, SmemSmem=Smem+#lk长立即数加至存储器13ADDS Smem , srcsrc=src+uns(Smem)操作数符号位不扩展加至累加器第81页,共157页。82(2)减法指令序号指 令功 能说 明1SUB Smem , srcsrc=src-Smem从累加器中减去操作数2SUB Smem , TS,srcsrc=src-SmemTS从累
50、加器中减去移位后的操作数3SUB Smem ,16 ,src,dst dst=src-Smem16累加器减去左移16位的操作数4SUB Smem,SHIFT,src,dstdst=src-Smem SHIFT操作数移位后与累加器相减5SUB Xmem ,SHFT ,src src=src-Xmem SHFT操作数移位后与累加器相减6SUB Xmem ,Ymem ,dstdst=Xmem16-Ymem16两操作数分别左移16位后相减送至累加器7SUB #lk,SHFT,src,dstdst=src-#lk SHFT长立即数移位后与累加器相减8SUB #lk,16,src,dstdst=src-#
51、lk 16长立即数左移16位与累加器相减9SUB src,SHIFT,dstdst=dst-src SHIFT目标累加器减去移位后的源累加器10SUB src,ASM,dstdst=dst-src ASM源累加器按ASM移位与目标累加器相减11SUBB Smem , srcsrc=src-Smem-C累加器与操作数带借位减操作12SUBC Smem , srcIf(src-Smem0,src=(src-Smem15)1+1Else src=src1条件减法操作13SUBS Smem , srcsrc=src-uns(Smem)累加器与符号位不扩展的操作数减操作第82页,共157页。83(3)乘
52、法指令序号指 令功 能说 明1MPY Smem , dstdst=T*SmemT寄存器与操作数相乘2MPYR Smem , dstdst=rnd(T*Smem)T寄存器与操作数带舍入相乘3MPY Xmem ,Ymem ,dst dst= Xmem *Ymem,T=Xmem两操作数相乘4MPY Smem ,#lk ,dstdst= Smem *#lk ,T=Smem长立即数与操作数相乘5MPY #lk ,dstdst= T*#lk长立即数与T寄存器相乘6MPYA dstdst=T*A(32-16)T寄存器与累加器A高位相乘7MPYA SmemB= Smem*A(32-16),T=Smem操作数与
53、累加器A高位相乘8MPYU Smem , dstdst=uns(T)*uns(Smem)无符号数相乘9SQUR Smem , dstdst= Smem *Smem ,T=Smem操作数的平方10SQUR A , dstdst=A(32-16)*A(32-16)累加器A高位的平方第83页,共157页。84(4)乘法-累加和乘法-减法指令序号指 令功 能说 明1MAC Smem , srcsrc=src+T*Smem操作数与T相乘加到累加器2MAC Xmem ,Ymem ,src,dst dst= src+ Xmem *Ymem, T=Xmem两操作数相乘加到累加器3MAC #lk ,src ,d
54、stdst= src+T*#lk长立即数与T相乘加到累加器4MAC Smem ,#lk ,src ,dstdst= src+ Smem*#lk ,T=Smem长立即数与操作数相乘加到累加器5MACR Smem , srcsrc=rnd(src+T*Smem)操作数与T相乘加到累加器(带舍入)6MACR Xmem ,Ymem ,src,dstdst=rnd(src+Xmem *Ymem),T=Xmem两操作数相乘加到累加器(带舍入)7MACA Smem,BB= B+Smem*A(32-16),T=Smem操作数与累加器A高位相乘加到累加器B8MACA T,src ,dst dst= src+T*
55、A(32-16)T与A的高位相乘加到累加器第84页,共157页。85(4)乘法-累加和乘法-减法序号指 令功 能说 明9MACAR Smem,BB=rnd(B+Smem*A(32-16),T=Smem操作数与累加器A高位相乘加到累加器B(带舍入)10MACAR T,src ,dst dst=rnd(src+T*A(32-16)T与A高位相乘加到累加器(带舍入)11MACD Smem ,Pmad ,srcsrc=src+Smem*Pmad,T=Smem, (Smem+1)=Smem操作数与程序存储器内容相乘后加到累加器并延迟12MACP Smem ,Pmad ,srcsrc=src+Smem*P
56、mad,T=Smem操作数与程序存储器内容相乘后加到累加器13MACSU Xmem ,Ymem ,srcsrc= src+uns(Xmem)*Ymem,T=Xmem无符号操作数与有符号操作数相乘后加到累加器14MAS Smem ,srcsrc=src-T*Smem累加器减去T与操作数的乘积15MAS Xmem ,Ymem ,src ,dstdst= src- Xmem *Ymem, T=Xmem累加器减去两操作数的乘积第85页,共157页。86(4)乘法-累加和乘法-减法指令序号指 令功 能说 明16MASR Xmem ,Ymem ,src ,dstdst=rnd(src-Xmem *Ymem
57、),T=Xmem累加器减去两操作数的乘积(带舍入)17MASR Smem ,srcsrc=rnd(src-T*Smem)累加器减去T与操作数的乘积(带舍入)18MASA Smem ,B B= B-Smem*A(32-16),T=Smem累加器B减去操作数与累加器A高位的乘积19MASA T,src ,dst dst= src-T*A(32-16)累加器减去T与A高位的乘积20MASAR T,src ,dst dst=rnd(src-T*A(32-16)累加器减去T与A高位的乘积(带舍入)21SQURA Smem,srcsrc=src+Smem*Smem,T=Smem操作数的平方与累加器相加22
58、SQURS Smem,srcsrc=src-Smem*Smem,T=Smem操作数的平方与累加器相减第86页,共157页。87(5)双字算术运算指令 第87页,共157页。88(6)特殊运算指令 序号指 令功 能说 明1ABDST Xmem , YmemB = B + |A(32-16)|,A = (Xmem-Ymem)16绝对距离2ABS src ,dst dst = |src |累加器求绝对值3CMPL src ,dst dst = src累加器求反4DELAY Smem(Smem +1)= Smem存储单元延迟5EXP srcT = 带符号数(src)-8求累加器的指数6FIRS Xme
59、m ,Ymem , PmadB = B A*Pmad,A = (Xmem+Ymem)16对称FIR滤波7LMS Xmem ,YmemB = B + Xmem *Ymem,A = (A +Xmem16)+215求最小均方值第88页,共157页。89(6)特殊运算指令 序号指 令功 能说 明8MAX dstdst = max(A,B)求A和B的最大值9MIN dstdst = min(A,B)求A和B的最小值10NEG src ,dst dst = -src累加器变负11NORM src ,dst dst = srcTS,dst = norm(src,T)归一化12POLY Smem B = Sm
60、em16,A = rnd(A *T + B )求多项式的值13RND src ,dst dst = src +215累加器舍入运算14SAT src Saturate(src)累加器饱和运算15SQDST Xmem ,Ymem B = B + A(32-16)*A(32-16)A = (Xmem-Ymem)16求距离的平方第89页,共157页。902. 逻辑运算指令 C54x的指令系统具有丰富的逻辑运算指令。 包括:与运算指令(AND) 或运算指令(OR) 异或运算指令(XOR) 移位操作指令(SHIFT)测试操作指令(TEST)第90页,共157页。91(1)与运算指令 与逻辑运算指令共有5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年宜昌市卫生健康委所属事业单位“招才兴业”高层次人才引进公开招聘111人备考题库参考答案详解
- 2025年第四季度芜湖市第一人民医院公开招聘劳务派遣工作人员备考题库及1套完整答案详解
- 2026年成都市龙王庙正街小学员额教师招聘补招备考题库完整答案详解
- 2026年安龙县美团合伙人招聘备考题库及答案详解一套
- 2026年惠州大亚湾开发区管委会石化能源产业局公开招聘事业单位编外人员备考题库及参考答案详解1套
- 2026年东台市市级机关公开转任公务员备考题库及答案详解1套
- 2026年扬州市新华中学公开招聘教师6人备考题库及完整答案详解一套
- 2026年司法鉴定所鉴定助理招聘备考题库含答案详解
- 2026年孟定海关综合技术中心医学检验工作人员招聘备考题库及参考答案详解一套
- 2026年成都市锦江区东华小学公开招聘员额教师的补招备考题库附答案详解
- 2025年荆楚理工学院马克思主义基本原理概论期末考试真题汇编
- 2026年恒丰银行广州分行社会招聘备考题库带答案详解
- 纹绣风险协议书
- 【语文】湖南省长沙市雨花区桂花树小学小学一年级上册期末试卷(含答案)
- 贵港市利恒投资集团有限公司关于公开招聘工作人员备考题库附答案
- 广东省部分学校2025-2026学年高三上学期9月质量检测化学试题
- 【道 法】期末综合复习 课件-2025-2026学年统编版道德与法治七年级上册
- 中国心力衰竭诊断和治疗指南2024解读
- 冬季防静电安全注意事项
- 2025年国家工作人员学法用法考试题库(含答案)
- 2025版煤矿安全规程题库
评论
0/150
提交评论