1、指令的表示方法指令的表示方法寻址方式寻址方式指令系统指令系统目录3.2 指令的表示方法指令的两种表示法指令的两种表示法:助记符形式助记符形式和和代数表达式代数表达式 助记符形式:助记符形式:代数表达式:代数表达式:MPY MPY*(volume),B(volume),B B=T B=T*(volume)(volume)ADD#1h,5,A,BADD#1h,5,A,B B=A+#1h5 B=A+#1hR,R为循环缓冲区长度)位必须为0:若R=31,则N=5 若R=32,则N=6v循环寻址时,首先要指定一个辅助寄存器ARx指向循环缓冲区,并实现循环缓冲区首尾单元相邻。v循环寻址算法:循环寻址举例:
2、v(BK)=8,(AR1)=0060H,用”*AR1+%”间接寻址.第1次间接寻址后,AR1指向0061H单元;第2次间接寻址后,AR1指向0062H单元;第7次间接寻址后,AR1指向0067H单元;第8次间接寻址后,AR1又回到0060H单元.循环寻址举例:v(BK)=10,N=4,(AR1)=0100H,用”*+AR1(8)%”间接寻址:STM#10,BK LD*+AR1(8)%,A ;寻址0108H单元 STL A,*+AR1(8)%;寻址0106H单元位倒序寻址v主要用于FFT算法。v8点FFT的位码倒序:若输入顺序:X(0)、X(1)、X(2)、X(3)、X(4)、X(5)、X(6)
3、、X(7);则输出顺序:Y(0)、Y(4)、Y(2)、Y(6)、Y(1)、Y(5)、Y(3)、Y(7).v16点FFT的位码倒序:表3.1.6位反转寻址v通常,在进行FFT算法之前,先让输入数据实现位码倒置。v位倒序寻址用B表示,典型:ARx+0Bn用用*AR2+0B实现位倒序寻址:实现位倒序寻址:从左向从左向右加右加。v例如:STM#8,AR0 RPT#15 MVDD*AR2+0B,*AR4+;AR2:输入数据X的首地址 ;AR4:位码倒置后输入数据X的首地址v第1次*AR2+0B寻址 ;AR2=2068h,即X(8)v第2次*AR2+0B寻址 ;AR2=2064h 即X(4)v第3次*AR
4、2+0B寻址 ;AR2=206Dh 即X(12)v第4次*AR2+0B寻址 ;AR2=2062h 即X(2)v第5次*AR2+0B寻址 ;AR2=206ah 即X(10)存储器映射寄存器寻址v仅有8条指令堆栈寻址v常用于中断和调用子程序过程v“后进先出”的原则v堆栈:保存PC值和保存数据参数v堆栈存放数据:从高地址向低地址增长,SP总是指向堆栈中最后存入的数据单元v入栈:先(SP)-1,数据再入栈.v出栈:数据出栈,SP+1.v4条指令:堆栈寻址举例:PSHM TPSHD*AR3+;SP-1,*AR3所指单元数据入栈POPM TPOPD*AR2 ;数据出栈,存入*AR2所指向单元,SP+1寻址
5、方式举例 DDAT1.set 1000H PDAT1 .set 2000H RSBX CPL LD#1234h,A ;立即数寻址 ST#5678h,*(DDAT1);立即数寻址和绝对地址寻址LD#PDAT1,A READA 2H ;立即数寻址,直接寻址(DP指针)和累加器寻址SSBX CPLST#9876h,3H ;直接寻址(SP指针)RSBX CPLSTM#DDAT1,AR2ST#9876h,*AR2 ;间接寻址MVDK 3H,DDAT1 MVKD DDAT1,1H ;直接寻址和绝对地址(dmad)寻址MVDP 2H,PDAT1 ;直接寻址和绝对地址(pmad)寻址 STM#8888h,T
6、;立即数寻址和存储器映射寄存器寻址PSHM TPOPM T ;堆栈寻址和存储器映射寄存器寻址STM#4000h,AR0RPT#29MVPD 1000H,*AR0+;程序存储器到数据存储器数据块的复制STM#2000H,AR2 STM#3000H,AR3 LD#0,A RPT#19MAC*AR2+,*AR3+,A STL A,*(y);完成20次乘累加操作用循环缓冲区实现FIRSTM#xn+79,AR3STM#h+79,AR4STM#80,BKSTM#-1,AR0PORTR PA1,*(xn)Fir:RPTZ A,#79MAC*AR3+0%,*AR4+0%,ASTH A,*(y)PORTW*(y
7、),PA0PORTR PA1,*AR3+0%3.3 C54X的指令系统共有129条基本指令,包含了6种基本类型的操作:v数据传送指令v算术运算指令v逻辑运算指令v程序控制指令v并行操作指令v重复操作指令v数据传送指令:装载、存储、混合装载存储。v算术指令:包括加减、乘法、乘累加、乘累减、32位操作数运算指令以及其他一些专用指令v逻辑指令:包括与、或、异或、移位和测试指令等v程序控制指令:包括跳转、调用、中断、返回、重复v并行操作指令:v重复操作指令:3.3.1 数据传送指令v指从存储器中将源操作数传送到目的操作数所指定的存储器中。v数据传送指令包括:装载指令:存储指令:混合装载和存储指令:装载
8、指令装载指令v将立即数或存储器内容赋值给目的寄存器。v目的寄存器主要有:dst、T、DP、ASM、ARP等v典型:LD Smem,dst LD#k,dstLD Smem,T LD Smem,DPLD#k5,ASM LDM MMR,dst举例:v给累加器赋值:例1、2、4、6注:SXM、OVB、OVM等标志位的影响v给其他寄存器赋值DP、T、ASM等v长字指令:DLD Lmem,dst例:DLD*AR3+,B ;增量为2v给DP赋值:.bss x,1 ;x=2000h .text ld#x,dp ld#40h,dp ;dp=40h stm#0200h,ar4 st#0fedch,*ar4 ld*
9、ar4,dp ;dp=0dch存储指令v将源操作数或立即数存入指定存储器或MMR。v目的操作数:Smem,Lmem,MMR等 存储指令条件存储指令存储指令vST:源操作数为寄存器或立即数例1、3vSTH/STL:源操作数为累加器例1、2vSTM/STLM:目的操作数为MMRSTM:例1vDST:长字vCMPS:CSSU电路,例:混合装载和存储指令v在存储器之间或内部传送数据表3.3.3缩写:Smem,Xmem,Ymem,dmad,pmad,PA,包括I/O端口绝对地址寻址包括累加器寻址v例:算术运算指令v加法指令ADD,ADDC(带进位,如32位扩展精度加法),ADDM(长立即数),ADDS(
10、无符号数)v减法指令SUB,SUBB(带借位),SUBC(条件减),SUBS(无符号)举例例:使用ADD指令完成加法 LD TEMP1,A ;TEMP1A ADD TEMP2,A ;TEMP2+AA STL A,TEMP3 (STH A,TEMP4);将结果TEMP3,TEMP4 例:用ADDS实现32位数据装入 LD 4,DP ;设置DP LD 60h,16,A ;将(0260H)装入A的高16位 ADDS 61h,A ;(0261H)A的低16位或 DLD 60h,B ;32位数B (C16=0)减法指令 SUB SUBB SUBC减法指令举例 STM 2061H,AR2 STM 2060
11、H,AR3 SUB *AR2+,*AR3+,B ;(2061H)左移16位,同时(2060H)也左移16位,然后相减,结果B STH B ,*(2062H);相减的结果(16位)(2062H)v乘法指令MPY,MPYR(凑整),MPYA(A(3216),MPYU(无符号),SQUR(平方)后缀R和A,状态标志位FRCT,另一乘数在T寄存器。v乘加和乘减指令乘加:MAC MACA MACD MACP MACSU乘减:MAS MASA SQURA SQURS乘法指令乘法指令举例vMPY 13,AvMPY*AR2,*AR4+0,BvMPY#0FFFEh,AvMPYR 0,BvMPYA*AR2vMPY
12、A BvMPYU*AR0,AvSQUR A,B乘法-累加指令举例v区别:凑整MAC*AR5+,AMACR*AR5+,Av区别:MAC*AR5+,*AR6+,A,BMACR*AR5+,*AR6+,A,Bv存储器延迟:(Smem+1)=SmemMACD*AR3,COEFFS,AMACP*AR3,COEFFS,A乘法-减法指令举例vMAS*AR5+,AvMAS*AR5+,*AR6+,A,BvSQURA*AR3+,AvSQURS*AR3+,A算术运算指令v长操作数,长字指令(共6条)DADD,DSUB,DRSUB,DADST,DSAD,DSUBTC16(ST1)决定指令工作方式,0:双精度方式;1:双
13、字方式Lmem:两个连续单元,低地址存放高16位字,高地址存放低16位字*AR3-(减量为2)特殊应用指令vABDST:两矢量的距离vABS:绝对值vCMPL:累加器的反码vDELAY:存储器延迟vEXP,NORM:累加器归一化vFIRS、LMS、POLYvMAX,MIN,NEGvRND,SAT,SQDST等特殊指令举例:vDELAY*AR3vEXP B与NORM B联合使用vMAX AvSAT B逻辑运算指令分为:与、或、异或、移位、测试v与 AND,ANDM(立即数)v或 OR,ORM(立即数)v异或 XOR,XORM(立即数)v循环移位ROL:带进位位的循环左移,C-D0,D31-C,保
14、护位清零。ROR、ROLTC:v条件移位SFTC srcv算术移位和逻辑移位SFTA、SFTL算术移位vSFTA:对累加器的整个40位操作右移:SXM=1,高位符号扩展;SXM=0,高位0填充左移:低位以0填充逻辑移位vSFTL:对累加器的低32位操作,高8位填0均不受SXM的影响右移时高位填0左移时低位填0举例:SFTA与SFTL的区别v例1:SFTA A,5,BSFTL A,5,Bv例2:SFTA B,+5SFTL B,+5测试指令vBIT:测试指定位vBITF:测试指定的多个位vBITT:测试T指定位vCMPM:比较两数是否相等如:CMPM*AR4+,0404hvCMPR:比较ARx和A
15、R0程序控制指令v长转移,长调用:前缀F(PC,XPC)v延时转移:后缀D1)分支指令 B,BACC,BANZ,BC,FB,FBACC 2)调用指令 CALA,CALL,CC,FCALA,FCALL3)中断指令 INTR k,TRAP k4)返回指令 RET,RETE,RETF,RC,FRET,FRETE5)堆栈操作指令 FRAME K,POPD,POPM,PSHD,PSHM6)其他程序控制指令 IDLE,MAR,NOP,RESET,RSBX,SSBX,XC分支指令v无条件转移 B:BACC:无条件转移到ACC指定的地址v条件转移BANZ:当ARx不为0时转移如:BANZ LOOP,*AR2-
16、条件指令vBC:条件转移vCC:条件调用vRC:条件返回例:RC TC ;TC=1,则返回CC SUB1,BNEQ ;B不为0,则调用SUB1BC NEXT,AGT,AOV;A0并且溢出(两条件相与),则转到NEXT 分支指令 调用指令 中断指令 返回指令 堆栈操作指令其他程序控制指令vRSBX:指定标志位清0vSSBX:指定标志位置1vXC:条件执行指令如果满足条件,则执行紧接的n条单字指令n:1或2注:条件的修改v例:SUBC DEN,AXC 1,BLT NEG A STL A,QUOT 其他程序控制指令重复指令v重复指令:RPT,RPTB,RPTZv可省去跳转,条件判断,流水线打断等,高
17、效率循环执行指令vRPT,RPTZ:可将多周期指令变为单周期指令(如,MVPD)vRPT:单指令重复循环计数器RCvRPTB:块重复指令几个寄存器:BRC,RSA,REA,标志位BRAFvRPTZ:v多重循环,合理安排可减少执行时间最内层循环:RPT或RPTZ次内层循环:RPTB其余层循环:BANZ并行操作指令1)并行装入和存储指令 ST LD 2)并行装入和乘法指令 LD MAC,LD MAS3)并行存储和加减指令 ST ADD,ST SUB4)并行存储和乘法 ST MAC,ST MAS,ST MPY 并行装载和存储指令并行指令v所有并行指令均为单字指令v多总线同时工作v注意移位vST LDDB总线和EB总线同时工作先读后写原则