附录6TMS320C54x指令系统一览表(按指令功能排列)一、算术运算指令1.加法指令句法表达式说明字数周期ADDSmem,srcsrc=src+Smem操作数加至累加器11ADDSmem,TS,srcsrc=src+SmemTS操作数移位后加至累加器11ADDSmem,16,src[,dst]dst=src+Smem16操作数左移16位加至累加器11ADDSmem[,SHIFT],src[,dst]dst=src+SmemSHIFT操作数移位后加到累加器22ADDXmem,SHFT,srcsrc=src+XmemSHFT操作数移位后加到累加器11ADDXmem,Ymem,dstdst=Xmem16+Ymem16两个操作数分别左移16位后加到累加器11ADD#lk[,SHFT],src[,dst]dst=src+#lkSHFT长立即数移位后加到累加器22ADD#lk,16,src[,dst]dst=src+#lk16长立即数左移16位后加到累加器22ADDsrc,[,SHIFT][,dst]dst=dst+srcSHIFT累加器移位后相加11ADDsrc,ASM[,dst]dst=dst+srcASM累加器按ASM移位后相加11ADDCSmem,srcsrc=src+Smem+C操作数带进位加至累加器11ADDM#lk,SmemSmem=Smem+#lk长立即数加至存储器22ADDSSmem,srcsrc=src+uns(Smem)符号位不扩展的加法112.减法指令句法表达式说明字数周期SUBSmem,srcsrc=src—Smem从累加器中减去操作数11SUBSmem,TS,srcsrc=src—SmemTS从累加器中减去移位后的操作数11SUBSmem,16,src[,dst]dst=src—Smem16从累加器中减去左移16位后的操作数11SUBSmem[,SHIFT],src[,dst]dst=src—SmemSHIFT操作数移位后与累加器相减22SUBXmem,SHFT,srcsrc=src—XmemSHFT操作数移位后与累加器相减11SUBXmem,Ymem,dstdst=Xmem16—Ymem16两个操作数分别左移16位后相减11SUB#lk[,SHFT],src[,dst]dst=src—#1kSHFT长立即数移位后与累加器相减22SUB#lk,16,src[,dst]dst=src—#1k16长立即数左移16位后与累加器相减22SUBsrc[,SHIFT][,dst]dst=dst—srcSHIFT源累加器移位后与目的累加器相减11SUBsrc,ASM[,dst]dst=dst—srcASM源累加器按ASM移位后与目的累加器相减llSUBBSmem,srcsrc=src—Smem—C—从累加器中带借位减操作数11SUBCSmem,srcIf(src—Smem15)≥0src=(src—Smem15)1+1Elsesrc=srcl有条件减法11SUBSSmem,srcsrc=src—uns(Smem)符号位不扩展的减法113.乘法指令句法表达式说明字数周期MPYSmem,dstdst=T*SmemT寄存器值与操作数相乘11MPYRSmem,dstdst=rnd(T*Smem)T寄存器值与操作数相乘(带舍入)11MPYXmem,Ymem,dstdst=Xmem*Ymem,T=Xmem两个操作数相乘11MPYSmem,#lk,dstdst=Smem*#lk,T=Smem长立即数与操作数相乘22MPY#lk,dstdst=T*#lk长立即数与T寄存器值相乘22MPYAdstdst=T*A(32-16)T寄存值与累加器A高位相乘11MPYASmemB=Smem*A(32-16),T=Smem操作数与累加器A高位相乘11MPYUSmem,dstdst=uns(T)*uns(Smem)无符号数乘法11SQURSmem,dstdst=Smem*Smem,T=Smem操作数的平方11SQURA,dstdst=A(32—16)*A(32—16)累加器A的高位平方114.乘法累加/减指令句法表达式说明字数周期MACSmem,srcsrc=src+T*Smem操作数与T寄存器值相乘后加到累加器11MACXmem,Ymem,src[,dst]dst=src+Xmern*Ymem,T=Xmem两个操作数相乘后加到累加器11MAC#lk,src[,dst]dst=src+T*#lk长立即数与T寄存器值相乘后加到累加器22MACSmem,#lk,src[,dst]dst=src+Smem*#lk,T=Smem长立即数与操作数相乘后加到累加器22MACRSmem,srcdst=rnd(src+T*Smem)操作数与T寄存器值相乘后加到累加器(带舍入)11MACRXmem,Ymem,src[,dst]dst=rnd(src+Xmem*Ymem),T=Xmem两个操作数相乘后加到累加器(带舍入)11MACASmem[,B]B=B+Smem*A(32—16),T=Smem操作数与累加器A高位相乘后加到累加器B11MACAT,src[,dst]dst=src+T*A(32—16)T寄存器值与累加器A高位相乘11MACARSmem[,B]B=rnd(B+Smem*A(32—16)),T=SmemT寄存器值与累加器A高位相乘后加到累加B(带舍入)11MACART,src[,dst]dst=rnd(src+T*A(32—16))累加器A高位与T寄存器值相乘后与源、累加器相加(带舍入)11MACDSmem,pmad,srcsrc=src+Smem*pmad,T=Smem,(Smem+1)=Smem操作数与程序存储器值相乘后累加并延迟23MACPSmem,pmad,srcsrc=src+Smem*pmad,T=Smem操作数与程序存储器值相乘后加到累加器23MACSUXmem,Ymem,srcsrc=src+uns(Xmem)*Ymem,T=Xmem元符号数与有符号数相乘后加到累加器11MASSmem,srcsrc=src—T*Smem从累加器中减去T寄存器值与操作数的乘积11MASRXmem,Ymem,src[,dst]dst=rnd(src—Xmem*Ymem),T=Xmem从累加器中减去两操作数的乘积(带舍入)11MASXmem,Ymem,src[,dst]dst=src—Xmem*Ymem,T=Xmem从源累加器中减去两操作数的乘积11MASRSmem,srcsrc=rnd(src—T*Smem)从累加器中减去T寄存器值与操作数的乘积(带舍入)11MASASmem[,B]B=B—Smem*A(32—16),T=Smem从累加器B中减去操作数与累加器A高位的乘积11MASAT,src[,dst]dst=src—T*A(32—16)从源累加器中减去T寄存器值与累加器A高位的乘积11MASART,src[,dst]dst=rnd(src—T*A(32—16))从源累加器中减去T寄存器值与累加器A高位的乘积(带舍入)11SQURASmem,srcsrc=src+Smem*Smem,T=Smem操作数平方并累加11SQURSSmem,srcsrc=src—Smem*Smem,T=Smem从累加器中减去操作数的平方115.双精度(32位操作数)指令句法表达式说明字数周期DADDLmem,src[,dst]IfC16=0dst=Lmem+srcIfC16=1dst(39—16)=Lmem(31—16)+src(31—16)dst(15—0)=Lmem(15—0)+src(15—0)双精度/双16位数加到累加器11DADSTLmem,dstIfC16=0双精度/双16位数与T寄存器值11dst=Lmem+(T16+T)IfC16=1dst(39—16)=Lmem(31—16)+Tdst(15—0)=Lmem(15—0)—T相加/减DRSUBLmem,srcIfC16=0src=Lmem—srcIfC16=1src(39—16)=Lmem(31—16)—src(31—16)src(15—0)=Lmem(15—0)—src(15—0)双精度/双16位数中减去累加器值11DSADTLmem,dstIfC16=0dst=Lmem—(T16+T)IfC16=1dst(39—16)=Lmem(31—16)—Tdst(15—0)=Lmem(15—0)+T长操作数与T寄存器值相加/减11DSUBLmem,srcIfC16=0src=src—LmemIfC16=1src(39—16)=src(31—16)—Lmem(31—16)src(15—0)=src(15—0)—Lmem(15—0)从累加器中减去双精度/双16位数11DSUBTLmem,dstIfC16=0dst=Lmem—(T16+T)IfC16=1dst(39—16)=Lmem(31—16)—Tdst(15—0)=Lmem(15—0)—T从长操作数中减去T寄存器值116.专用指令句法表达式说明字数周期ABDSTXmem,YmemB=B+|A(32—16)|,A=(Xmem—Ymem)16绝对距离11ABSsrc[,dst]dst=|src|累加器取绝对值11CMPLsrc[,dst]dst=src———累加器取反11DELAYSmem(Smem+1)=Smem存储器单元延迟11EXPsrcT=numberofsignbits(src)—8求累加器的指数11FIRSXmem,Ymem,pmadB=B+A*pmad,A=(Xmem+Ymem)16对称FIR滤波23LMSXmem,YmemB=B+Xmem*Ymem,A=(A+Xmem16)+215求最小均方值11MAXdstdst=max(A,B)求累加器(A,B)最大值11MINdstdst=min(A,B)求累加器(A,B)最小值11NEGsrc[,dst]dst=-src累加器变负11NORMsrc[,dst]dst=srcTS,dst=norm(src,TS)归一化11POLYSmemB=Smem16,A=rnd(A*T+B)求多项式的值11RNDsrc[,dst]dst=src+215累加器舍入运算11SATsrcsaturate(src)累加器饱和运算11SQDSTXmem,YmemB=B+A(32—16)*A(32—16),A=(Xmem—Ymem)16求距离的平方11二、逻辑运算指令1.与逻辑运算指令句法表达式说明字数周期ANDSmem,srcsrc=src&Smem操作数和累加器相与11AND#lk[,SHFT],src[,dst]dst=srclkSHFT长立即数移位后和累加器相与22AND#lk,16,src[,dst]dst=srclk16长立即数左移16位后和累加器相与22ANDsrc[,SHIFT][,dst]dst=dst&srcSHIFT源累加器移位后和目的累加器相与11ANDM#lk,SmemSmem=Smemlk操作数和长立即数相与222.或逻辑运算指令句法表达式说明字数周期ORSmemsrc=src|Smem操作数和累加器相或l1OR#lk[,SHFT],src[,dst]dst=src|#lkSHFT长立即数移位后和累加器相或22OR#lk,16,src[,dst]dst=src|#lk16长立即数左移16位后和累加器相或22ORsrc[,SHIFT][,dst]dst=dst|srcSHIFT源累加器移位后和目的累加器相或11ORM#lk,SmemSmem=Smem|#lk操作数和长立即数相或223.异或逻辑运算指令句法表达式说明字数周期XORSmem,srcsrc=src∧Smem操作数和累加器相异或11XOR#lk,[,SHFT],src[,dst]ds