附录6 TMS320C54x 指令系统一览表(按指令功能排列)
原文:http://blog.163.com/byl545@126/blog/static/180522812008102171429535/
一、算术运算指令
1. 加法指令
句 法 |
表 达 式 |
说 明 |
字数 |
周期 |
ADD Smem,src |
src=src+Smem |
操作数加至累加器 |
1 |
1 |
ADD Smem,TS,src |
src=src+Smem<<TS |
操作数移位后加至累加器 |
1 |
1 |
ADD Smem,16,src[,dst] |
dst=src+Smem<<16 |
操作数左移16位加至累加器 |
1 |
1 |
ADD Smem[,SHIFT],src[,dst] |
dst=src+Smem<<SHIFT |
操作数移位后加到累加器 |
2 |
2 |
ADD Xmem,SHFT,src |
src=src+Xmem<<SHFT |
操作数移位后加到累加器 |
1 |
1 |
ADD Xmem,Ymem,dst |
dst=Xmem<<16+Ymem<<16 |
两个操作数分别左移16位后加到累加器 |
1 |
1 |
ADD #lk[,SHFT],src[,dst] |
dst=src+#lk<<SHFT |
长立即数移位后加到累加器 |
2 |
2 |
ADD #lk,16,src[,dst] |
dst=src+#lk<<16 |
长立即数左移16位后加到累加器 |
2 |
2 |
ADD src,[,SHIFT][,dst] |
dst=dst+src<<SHIFT |
累加器移位后相加 |
1 |
1 |
ADD src,ASM[,dst] |
dst=dst+src<<ASM |
累加器按ASM移位后相加 |
1 |
1 |
ADDC Smem,src |
src=src+Smem+C |
操作数带进位加至累加器 |
1 |
1 |
ADDM #lk,Smem |
Smem=Smem+#lk |
长立即数加至存储器 |
2 |
2 |
ADDS Smem,src |
src=src+uns(Smem) |
符号位不扩展的加法 |
1 |
1 |
2. 减法指令
句 法 |
表 达 式 |
说 明 |
字数 |
周期 |
SUB Smem,src |
src=src—Smem |
从累加器中减去操作数 |
1 |
1 |
SUB Smem,TS,src |
src=src—Smem<<TS |
从累加器中减去移位后的操作数 |
1 |
1 |
SUB Smem,16,src[,dst] |
dst=src—Smem<<16 |
从累加器中减去左移16位后的操作数 |
1 |
1 |
SUB Smem[,SHIFT],src[,dst] |
dst=src—Smem<<SHIFT |
操作数移位后与累加器相减 |
2 |
2 |
SUB Xmem,SHFT,src |
src=src—Xmem<<SHFT |
操作数移位后与累加器相减 |
1 |
1 |
SUB Xmem,Ymem,dst |
dst=Xmem<<16—Ymem<<16 |
两个操作数分别左移16位后相减 |
1 |
1 |
SUB #lk[,SHFT],src[,dst] |
dst=src—#1k<<SHFT |
长立即数移位后与累加器相减 |
2 |
2 |
SUB #lk,16,src[,dst] |
dst=src—#1k<<16 |
长立即数左移16位后与累加器相减 |
2 |
2 |
SUB src[,SHIFT][,dst] |
dst=dst—src<<SHIFT |
源累加器移位后与目的累加器相减 |
1 |
1 |
SUB src,ASM[,dst] |
dst=dst—src<<ASM |
源累加器按ASM移位后与目的累加器相减 |
l |
l |
SUBB Smem,src |
src=src—Smem—C— |
从累加器中带借位减操作数 |
1 |
1 |
SUBC Smem,src |
If (src—Smem<<15)≥0 src=(src—Smem<<15)<<1+1 Else src=src<<l |
有条件减法 |
1 |
1 |
SUBS Smem,src |
src=src—uns(Smem) |
符号位不扩展的减法 |
1 |
1 |
3. 乘法指令
句 法 |
表 达 式 |
说 明 |
字数 |
周期 |
MPY Smem,dst |
dst=T*Smem |
T寄存器值与操作数相乘 |
1 |
1 |
MPYR Smem,dst |
dst=rnd(T*Smem) |
T寄存器值与操作数相乘(带舍入) |
1 |
1 |
MPY Xmem,Ymem,dst |
dst=Xmem*Ymem,T=Xmem |
两个操作数相乘 |
1 |
1 |
MPY Smem,#lk,dst |
dst=Smem*#lk,T=Smem |
长立即数与操作数相乘 |
2 |
2 |
MPY #lk,dst |
dst=T*#lk |
长立即数与T寄存器值相乘 |
2 |
2 |
MPYA dst |
dst=T*A(32-16) |
T寄存值与累加器A高位相乘 |
1 |
1 |
MPYA Smem |
B=Smem*A(32-16),T=Smem |
操作数与累加器A高位相乘 |
1 |
1 |
MPYU Smem,dst |
dst=uns(T)*uns(Smem) |
无符号数乘法 |
1 |
1 |
SQUR Smem,dst |
dst=Smem*Smem,T=Smem |
操作数的平方 |
1 |
1 |
SQUR A,dst |
dst=A(32—16)*A(32—16) |
累加器A的高位平方 |
1 |
1 |
4. 乘法累加/减指令
句 法 |
表 达 式 |
说 明 |
字数 |
周期 |
MAC Smem,src |
src=src+T*Smem |
操作数与T寄存器值相乘后加到累加器 |
1 |
1 |
MAC Xmem,Ymem,src[,dst] |
dst=src+Xmern*Ymem,T=Xmem |
两个操作数相乘后加到累加器 |
1 |
1 |
MAC #lk,src[,dst] |
dst=src+T*#lk |
长立即数与T寄存器值相乘后加到累加器 |
2 |
2 |
MAC Smem,#lk,src[,dst] |
dst=src+Smem*#lk,T=Smem |
长立即数与操作数相乘后加到累加器 |
2 |
2 |
MACR Smem,src |
dst=rnd(src+T*Smem) |
操作数与T寄存器值相乘后加到累加器(带舍入) |
1 |
1 |
MACR Xmem,Ymem,src[,dst] |
dst=rnd(src+Xmem*Ymem),T=Xmem |
两个操作数相乘后加到累加器(带舍入) |
1 |
1 |
MACA Smem[,B] |
B=B+Smem*A(32—16),T=Smem |
操作数与累加器A高位相乘后加到累加器B |
1 |
1 |
MACA T,src[,dst] |
dst=src+T*A(32—16) |
T寄存器值与累加器A高位相乘 |
1 |
1 |
MACAR Smem[,B] |
B=rnd(B+Smem*A(32—16)),T=Smem |
T寄存器值与累加器A高位相乘后加到累加B(带舍入) |
1 |
1 |
MACAR T,src[,dst] |
dst=rnd(src+T*A(32—16)) |
累加器A高位与T寄存器值相乘后与源、累加器相加(带舍入) |
1 |
1 |
MACD Smem,pmad,src |
src=src+Smem*pmad, T=Smem,(Smem+1)=Smem |
操作数与程序存储器值相乘后累加并延迟 |
2 |
3 |
MACP Smem,pmad,src |
src=src+Smem*pmad,T=Smem |
操作数与程序存储器值相乘后加到累加器 |
2 |
3 |
MACSU Xmem,Ymem,src |
src=src+uns(Xmem)*Ymem,T=Xmem |
元符号数与有符号数相乘后加到累加器 |
1 |
1 |
MAS Smem,src |
src=src—T*Smem |
从累加器中减去T寄存器值与操作数的乘积 |
1 |
1 |
MASR Xmem,Ymem,src[,dst] |
dst=rnd(src—Xmem*Ymem),T=Xmem |
从累加器中减去两操作数的乘积(带舍入) |
1 |
1 |
MAS Xmem,Ymem,src[,dst] |
dst=src—Xmem*Ymem,T=Xmem |
从源累加器中减去两操作数的乘积 |
1 |
1 |
MASR Smem,src |
src=rnd(src—T*Smem) |
从累加器中减去T寄存器值与操作数的乘积(带舍入) |
1 |
1 |
MASA Smem[,B] |
B=B—Smem*A(32—16),T=Smem |
从累加器B中减去操作数与累加器A高位的乘积 |
1 |
1 |
MASA T,src[,dst] |
dst=src—T*A(32—16) |
从源累加器中减去T寄存器值与累加器A高位的乘积 |
1 |
1 |
MASAR T,src[,dst] |
dst=rnd(src—T*A(32—16)) |
从源累加器中减去T寄存器值与累加器A高位的乘积(带舍入) |
1 |
1 |
SQURA Smem,src |
src=src+Smem*Smem,T=Smem |
操作数平方并累加 |
1 |
1 |
SQURS Smem,src |
src=src—Smem*Smem,T=Smem |
从累加器中减去操作数的平方 |
1 |
1 |
5. 双精度(32位操作数)指令
句 法 |
表 达 式 |
说 明 |
字数 |
周期 |
DADD Lmem,src[,dst] |
If C16=0 dst=Lmem+src If C16=1 dst(39—16)=Lmem(31—16)+src(31—16) dst(15—0)=Lmem(15—0)+src(15—0) |
双精度/双16位数加到累加器 |
1 |
1 |
DADST Lmem,dst |
If C16=0 dst=Lmem+(T<<16+T) If C16=1 dst(39—16)=Lmem(31—16)+T dst(15—0)=Lmem(15—0)—T |
双精度/双16位数与T寄存器值相加/减 |
1 |
1 |
DRSUB Lmem,src |
If C16=0 src=Lmem—src If C16=1 src(39—16)=Lmem(31—16)—src(31—16) src(15—0)=Lmem(15—0)—src(15—0) |
双精度/双16位数中减去累加器值 |
1 |
1 |
DSADT Lmem,dst |
If C16=0 dst=Lmem—(T<<16+T) If C16=1 dst(39—16)=Lmem(31—16)—T dst(15—0)=Lmem(15—0)+T |
长操作数与T寄存器值相加/减 |
1 |
1 |
DSUB Lmem,src |
If C16=0 src=src—Lmem If C16=1 src(39—16)=src(31—16)—Lmem(31—16) src(15—0)=src(15—0)—Lmem(15—0) |
从累加器中减去双精度/双16位数 |
1 |
1 |
DSUBT Lmem,dst |
If C16=0 dst=Lmem—(T<<16+T) If C16=1 dst(39—16)=Lmem(31—16)—T dst(15—0)=Lmem(15—0)—T |
从长操作数中减去T寄存器值 |
1 |
1 |
6. 专用指令
句 法 |
表 达 式 |
说 明 |
字数 |
周期 |
ABDST Xmem,Ymem |
B=B+|A(32—16)|,A=(Xmem—Ymem)<<16 |
绝对距离 |
1 |
1 |
ABS src[,dst] |
dst=|src| |
累加器取绝对值 |
1 |
1 |
CMPL src[,dst] |
dst=src——— |
累加器取反 |
1 |
1 |
DELAY Smem |
(Smem+1)=Smem |
存储器单元延迟 |
1 |
1 |
EXP src |
T=number of sign bits(src)—8 |
求累加器的指数 |
1 |
1 |
FIRS Xmem,Ymem,pmad |
B=B+A*pmad,A=(Xmem+Ymem)<<16 |
对称FIR滤波 |
2 |
3 |
LMS Xmem,Ymem |
B=B+Xmem*Ymem,A=(A+Xmem<<16)+215 |
求最小均方值 |
1 |
1 |
MAX dst |
dst=max(A,B) |
求累加器(A,B)最大值 |
1 |
1 |
MIN dst |
dst=min(A,B) |
求累加器(A,B)最小值 |
1 |
1 |
NEG src[,dst] |
dst=-src |
累加器变负 |
1 |
1 |
NORM src[,dst] |
dst=src<<TS,dst=norm(src,TS) |
归一化 |
1 |
1 |
POLY Smem |
B=Smem<<16,A=rnd(A*T+B) |
求多项式的值 |
1 |
1 |
RND src[,dst] |
dst=src+215 |
累加器舍入运算 |
1 |
1 |
SAT src |
saturate(src) |
累加器饱和运算 |
1 |
1 |
SQDST Xmem,Ymem |
B=B+A(32—16)*A(32—16),A=(Xmem—Ymem)<<16 |
求距离的平方 |
1 |
1 |