1、DSP指令大全附录6 TMS320C54x 指令系统一览表(按指令功能排列)一、算术运算指令1. 加法指令 句 法表 达 式说 明字数周期ADD Smem,srcsrc=src+Smem操作数加至累加器11ADD Smem,TS,srcsrc=src+SmemTS操作数移位后加至累加器11ADD Smem,16,src,dstdst=src+Smem16操作数左移16位加至累加器11ADD Smem,SHIFT,src,dstdst=src+SmemSHIFT操作数移位后加到累加器22ADD Xmem,SHFT,srcsrc=src+XmemSHFT操作数移位后加到累加器11ADD Xmem,
2、Ymem,dstdst=Xmem16+Ymem16两个操作数分别左移16位后加到累加器11ADD #lk,SHFT,src,dstdst=src+#lkSHFT长立即数移位后加到累加器22ADD #lk,16,src,dstdst=src+#lk16长立即数左移16位后加到累加器22ADD src,SHIFT,dstdst=dst+srcSHIFT累加器移位后相加11ADD src,ASM,dstdst=dst+srcASM累加器按ASM移位后相加11ADDC Smem,srcsrc=src+Smem+C操作数带进位加至累加器11ADDM #lk,SmemSmem=Smem+#lk长立即数加至
3、存储器22ADDS Smem,srcsrc=src+uns(Smem)符号位不扩展的加法112. 减法指令 句 法表 达 式说 明字数周期SUB Smem,srcsrc=srcSmem从累加器中减去操作数11SUB Smem,TS,srcsrc=srcSmemTS从累加器中减去移位后的操作数11SUB Smem,16,src,dstdst=srcSmem16从累加器中减去左移16位后的操作数11SUB Smem,SHIFT,src,dstdst=srcSmemSHIFT操作数移位后与累加器相减22SUB Xmem,SHFT,srcsrc=srcXmemSHFT操作数移位后与累加器相减11SUB
4、 Xmem,Ymem,dstdst=Xmem16Ymem16两个操作数分别左移16位后相减11SUB #lk,SHFT,src,dstdst=src#1kSHFT长立即数移位后与累加器相减22SUB #lk,16,src,dstdst=src#1k16长立即数左移16位后与累加器相减22SUB src,SHIFT,dstdst=dstsrcSHIFT源累加器移位后与目的累加器相减11SUB src,ASM,dstdst=dstsrcASM源累加器按ASM移位后与目的累加器相减llSUBB Smem,srcsrc=srcSmemC从累加器中带借位减操作数11SUBC Smem,srcIf (sr
5、cSmem15)0src=(srcSmem15)1+1Elsesrc=srcl有条件减法11SUBS Smem,srcsrc=srcuns(Smem)符号位不扩展的减法113. 乘法指令 句 法表 达 式说 明字数周期MPY Smem,dstdst=T*SmemT寄存器值与操作数相乘11MPYR Smem,dstdst=rnd(T*Smem)T寄存器值与操作数相乘(带舍入)11MPY Xmem,Ymem,dstdst=Xmem*Ymem,T=Xmem两个操作数相乘11MPY Smem,#lk,dstdst=Smem*#lk,T=Smem长立即数与操作数相乘22MPY #lk,dstdst=T*
6、#lk长立即数与T寄存器值相乘22MPYA dstdst=T*A(32-16)T寄存值与累加器A高位相乘11MPYA SmemB=Smem*A(32-16),T=Smem操作数与累加器A高位相乘11MPYU Smem,dstdst=uns(T)*uns(Smem)无符号数乘法11SQUR Smem,dstdst=Smem*Smem,T=Smem操作数的平方11SQUR A,dstdst=A(3216)*A(3216)累加器A的高位平方114. 乘法累加/减指令 句 法表 达 式说 明字数周期MAC Smem,srcsrc=src+T*Smem操作数与T寄存器值相乘后加到累加器11MAC Xme
7、m,Ymem,src,dstdst=src+Xmern*Ymem,T=Xmem两个操作数相乘后加到累加器11MAC #lk,src,dstdst=src+T*#lk长立即数与T寄存器值相乘后加到累加器22MAC Smem,#lk,src,dstdst=src+Smem*#lk,T=Smem长立即数与操作数相乘后加到累加器22MACR Smem,srcdst=rnd(src+T*Smem)操作数与T寄存器值相乘后加到累加器(带舍入)11MACR Xmem,Ymem,src,dstdst=rnd(src+Xmem*Ymem),T=Xmem两个操作数相乘后加到累加器(带舍入)11MACA Smem,
8、BB=B+Smem*A(3216),T=Smem操作数与累加器A高位相乘后加到累加器B11MACA T,src,dstdst=src+T*A(3216)T寄存器值与累加器A高位相乘11MACAR Smem,BB=rnd(B+Smem*A(3216),T=SmemT寄存器值与累加器A高位相乘后加到累加B(带舍入)11MACAR T,src,dstdst=rnd(src+T*A(3216)累加器A高位与T寄存器值相乘后与源、累加器相加(带舍入)11MACD Smem,pmad,srcsrc=src+Smem*pmad,T=Smem,(Smem+1)=Smem操作数与程序存储器值相乘后累加并延迟23
9、MACP Smem,pmad,srcsrc=src+Smem*pmad,T=Smem操作数与程序存储器值相乘后加到累加器23MACSU Xmem,Ymem,srcsrc=src+uns(Xmem)*Ymem,T=Xmem元符号数与有符号数相乘后加到累加器11MAS Smem,srcsrc=srcT*Smem从累加器中减去T寄存器值与操作数的乘积11MASR Xmem,Ymem,src,dstdst=rnd(srcXmem*Ymem),T=Xmem从累加器中减去两操作数的乘积(带舍入)11MAS Xmem,Ymem,src,dstdst=srcXmem*Ymem,T=Xmem从源累加器中减去两操
10、作数的乘积11MASR Smem,srcsrc=rnd(srcT*Smem)从累加器中减去T寄存器值与操作数的乘积(带舍入)11MASA Smem,BB=BSmem*A(3216),T=Smem从累加器B中减去操作数与累加器A高位的乘积11MASA T,src,dstdst=srcT*A(3216)从源累加器中减去T寄存器值与累加器A高位的乘积11MASAR T,src,dstdst=rnd(srcT*A(3216)从源累加器中减去T寄存器值与累加器A高位的乘积(带舍入)11SQURA Smem,srcsrc=src+Smem*Smem,T=Smem操作数平方并累加11SQURS Smem,s
11、rcsrc=srcSmem*Smem,T=Smem从累加器中减去操作数的平方115. 双精度(32位操作数)指令 句 法表 达 式说 明字数周期DADD Lmem,src,dstIf C16=0dst=Lmem+srcIf C16=1dst(3916)=Lmem(3116)+src(3116)dst(150)=Lmem(150)+src(150)双精度/双16位数加到累加器11DADST Lmem,dstIf C16=0dst=Lmem+(T16+T)If C16=1dst(3916)=Lmem(3116)+Tdst(150)=Lmem(150)T双精度/双16位数与T寄存器值相加/减11DR
12、SUB Lmem,srcIf C16=0src=LmemsrcIf C16=1src(3916)=Lmem(3116)src(3116)src(150)=Lmem(150)src(150)双精度/双16位数中减去累加器值11DSADT Lmem,dstIf C16=0dst=Lmem(T16+T)If C16=1dst(3916)=Lmem(3116)Tdst(150)=Lmem(150)+T长操作数与T寄存器值相加/减11DSUB Lmem,srcIf C16=0src=srcLmemIf C16=1src(3916)=src(3116)Lmem(3116)src(150)=src(150)
13、Lmem(150)从累加器中减去双精度/双16位数11DSUBT Lmem,dstIf C16=0dst=Lmem(T16+T)If C16=1dst(3916)=Lmem(3116)Tdst(150)=Lmem(150)T从长操作数中减去T寄存器值116. 专用指令 句 法表 达 式说 明字数周期ABDST Xmem,YmemB=B+|A(3216)|,A=(XmemYmem)16绝对距离11ABS src,dstdst=|src|累加器取绝对值11CMPL src,dstdst=src累加器取反11DELAY Smem(Smem+1)=Smem存储器单元延迟11EXP srcT=numbe
14、r of sign bits(src)8求累加器的指数11FIRS Xmem,Ymem,pmadB=B+A*pmad,A=(Xmem+Ymem)16对称FIR滤波23LMS Xmem,YmemB=B+Xmem*Ymem,A=(A+Xmem16)+215求最小均方值11MAX dstdst=max(A,B)求累加器(A,B)最大值11MIN dstdst=min(A,B)求累加器(A,B)最小值11NEG src,dstdst=-src累加器变负11NORM src,dstdst=srcTS,dst=norm(src,TS)归一化11POLY SmemB=Smem16,A=rnd(A*T+B)求
15、多项式的值11RND src,dstdst=src+215累加器舍入运算11SAT srcsaturate(src)累加器饱和运算11SQDST Xmem,YmemB=B+A(3216)*A(3216),A=(XmemYmem)16求距离的平方11二、逻辑运算指令1. 与逻辑运算指令 句 法表 达 式说 明字数周期AND Smem,srcsrc=src&Smem操作数和累加器相与11AND #lk,SHFT,src,dstdst=srclkSHFT长立即数移位后和累加器相与22AND #lk,16,src,dstdst=srclk16长立即数左移16位后和累加器相与22AND src,
16、SHIFT,dstdst=dst&srcSHIFT源累加器移位后和目的累加器相与11ANDM #lk,SmemSmem=Smemlk操作数和长立即数相与222. 或逻辑运算指令 句 法表 达 式说 明字数周期OR Smemsrc=src|Smem操作数和累加器相或l1OR #lk,SHFT,src,dstdst=src|#lkSHFT长立即数移位后和累加器相或22OR #lk,16,src,dstdst=src|#lk16长立即数左移16位后和累加器相或22OR src,SHIFT,dstdst=dst|srcSHIFT源累加器移位后和目的累加器相或11ORM #lk,SmemSmem=S
17、mem|#lk操作数和长立即数相或223. 异或逻辑运算指令 句 法表 达 式说 明字数周期XOR Smem,srcsrc=srcSmem操作数和累加器相异或11XOR #lk,SHFT,src,dstdst=src#lkSHFT长立即数移位后和累加器相异或22XOR #lk,16,src,dstdst=src#lk16长立即数左移16位后和累加器相异或22XOR src,SHIFT,dstdst=dstsrcSHIFT源累加器移位后和目的累加器相异或11XORM #lk,SmemSmem=Smem#lk操作数和长立即数相异或224. 移位指令 句 法表 达 式说 明字数周期ROL srcRo
18、tate left with carry in累加器经进位位循环左移11ROLTC srcRotate left with TC in累加器经TC位循环左移11ROR srcRotate right with carry in累加器经进位位循环右移11SFTA src,SHIFT,dstdst=srcSHIFTarithmetic shift累加器算术移位11SFTC srcif src(31)=src(30)then src=src1累加器条件移位11SFTL src,SHIFT,dstdst=srcSHIFTlogical shift累加器逻辑移位115. 测试指令 句 法表 达 式说 明
19、字数周期BIT Xmem,BITCTC=Xmem(15BITC)测试指定位1lBITF Smem,#lkTC=(Smemlk)测试由立即数规定的位域22BITT SmemTC=Smem(15T(3O)测试由T寄存器指定的位11CMPM Smem,#lkTC=(Smem=#lk)存储单元与长立即数比较22CMPR CC,ARxCompare ARx with AR0辅助寄存器ARx与ARO比较11三、程序控制指令1. 分支转换指令 句 法表 达 式说 明字数周期BD pmadPC=pmad(150)无条件分支转移24/2BACCD srcPC=src(150)按累加器规定的地址转移16/4B
20、ANZD pmad,Sindif(Sind0) then PC=pmad(150)辅助寄存器不为O就转移24/2/2BCD pmad,cond,cond,condif(cond(s) then PC=pmad(150)条件分支转移25/3/3FBD extpmadPC=pmad(150),XPC=pmad(2216)无条件远程分支转移24/2FBACCD srcPC=src(150),XPC=src(2216)按累加器规定的地址远程分支转移16/42. 调用指令 句 法表 达 式说 明字数周期CALAD srcSP=PC,PC=src(150)按累加器规定的地址调用子程序16/4CALLD p
21、madSP=PC,PC=pmad(150)无条件调用子程序24/2CCD pmad,cond,cond,condif(cond(s)thenSP=PC,PC=pmad(150)有条件调用子程序25/3/3FCALAD srcSP=PC,SP=XPC,PC=src(150),XPC=src(2216)按累加器规定的地址远程调用子程序16/4FCALLD extpmadSP=PC,SP=XPC,PC=pmad(150),XPC=pmad(2216)无条件远程调用子程序2423. 中断指令 句 法表 达 式说 明字数周期INTR KSP=PC,PC=IPTR(157)+K2,INTM=1不可屏蔽的软
22、件中断,关闭其他可屏蔽中断13TRAP KSP=PC,PC=IPTR(157)+K2不可屏蔽的软件中断,不影响INTM位134. 返回指令 句 法表 达 式说 明字数周 期FRETDXPC=SP+,PC=SP+远程返回16/4FRETEDXPC=SP+,PC=SP+,INTM=O开中断,从远程中断返回16/4RCD cond,cond,condif(cond(s) then PC=SP+条件返回153/3RETDPC=SP+返回15/3RETEDPC=SP+,INTM=O开中断,从中断返回15/3RETFDPC=RTN,SP+,INTM=O开中断,从中断快速返回13/15. 重复指令 句 法表
23、 达 式说 明字数周 期RPT SmemRepeat single,RC=Smem重复执行下条指令(Smem)+1次11RPT #KRepeat single,RC=#K重复执行下条指令k十1次11RPT #lkRepeat single,RC=#lk重复执行下条指令#lk+1次22RPTBD pmadRepeat block,RSA=PC+24#,REA=pmad1块重复指令24/2RPTZ dst,#lkRepeat single,RC=#lk,dst=O重复执行下条指令,累加器清O226. 堆栈管理指令 句 法表 达 式说 明字数周期FRAME KSP=SP+K,-128k127堆栈指针
24、偏移一个立即数值11POPD SmemSmem=SP+将数据从栈顶弹出至数据存储器11POPM MMRMMR=SP+将数据从栈顶弹出至MMR11PSHD SmemSP=Smem将数据压人堆栈11PSHM MMRSP=MMR将MMR压人堆栈l17. 其他程序控制指令句 法表 达 式说 明字数周期IDLE Kidle(K),1k3保持空转状态,直到中断发生14MAR SmemIf CMPT=0,then modify ARx,ARP is unchangedIf CMPT=1 and ARxAR0,then modify ARx,ARP=xIf CMPT=1 and ARx=AR0,then mo
25、dify AR(ARP),ARP is unchanged修改辅助寄存器11NOPno operation空操作11RESETsoftware reset软件复位13RSBX N,SBITSTN(SBIT)=0状态寄存器位复位11SSBX N,SBITSTN(SBIT)=1状态寄存器位置位11XC n,cond,cond,condIf(cond(s)then execute the next n instructions;n=1or2有条件执行11注:条件“真”,条件“假”,延迟指令。四、加载和存储指令1. 加载指令 句 法表 达 式说 明字数周期DLD Lmem,dstdst=Lmem双精度/双16位长字加载累加器11LD Smem,dstdst=Smem将操作数加载到累加器11LD Smem,TS,dstdst=SmemTS操作数按TREG(50)移位后加
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1