有条件减法
1
1
SUBSSmem,src
src=src—uns(Smem)
符号位不扩展的减法
1
1
3.乘法指令
句法
表达式
说明
字数
周期
MPYSmem,dst
dst=T*Smem
T寄存器值与操作数相乘
1
1
MPYRSmem,dst
dst=rnd(T*Smem)
T寄存器值与操作数相乘(带舍入)
1
1
MPYXmem,Ymem,dst
dst=Xmem*Ymem,T=Xmem
两个操作数相乘
1
1
MPYSmem,#lk,dst
dst=Smem*#lk,T=Smem
长立即数与操作数相乘
2
2
MPY#lk,dst
dst=T*#lk
长立即数与T寄存器值相乘
2
2
MPYAdst
dst=T*A(32-16)
T寄存值与累加器A高位相乘
1
1
MPYASmem
B=Smem*A(32-16),T=Smem
操作数与累加器A高位相乘
1
1
MPYUSmem,dst
dst=uns(T)*uns(Smem)
无符号数乘法
1
1
SQURSmem,dst
dst=Smem*Smem,T=Smem
操作数的平方
1
1
SQURA,dst
dst=A(32—16)*A(32—16)
累加器A的高位平方
1
1
4.乘法累加/减指令
句法
表达式
说明
字数
周期
MACSmem,src
src=src+T*Smem
操作数与T寄存器值相乘后加到累加器
1
1
MACXmem,Ymem,src[,dst]
dst=src+Xmern*Ymem,T=Xmem
两个操作数相乘后加到累加器
1
1
MAC#lk,src[,dst]
dst=src+T*#lk
长立即数与T寄存器值相乘后加到累加器
2
2
MACSmem,#lk,src[,dst]
dst=src+Smem*#lk,T=Smem
长立即数与操作数相乘后加到累加器
2
2
MACRSmem,src
dst=rnd(src+T*Smem)
操作数与T寄存器值相乘后加到累加器(带舍入)
1
1
MACRXmem,Ymem,src[,dst]
dst=rnd(src+Xmem*Ymem),T=Xmem
两个操作数相乘后加到累加器(带舍入)
1
1
MACASmem[,B]
B=B+Smem*A(32—16),T=Smem
操作数与累加器A高位相乘后加到累加器B
1
1
MACAT,src[,dst]
dst=src+T*A(32—16)
T寄存器值与累加器A高位相乘
1
1
MACARSmem[,B]
B=rnd(B+Smem*A(32—16)),T=Smem
T寄存器值与累加器A高位相乘后加到累加B(带舍入)
1
1
MACART,src[,dst]
dst=rnd(src+T*A(32—16))
累加器A高位与T寄存器值相乘后与源、累加器相加(带舍入)
1
1
MACDSmem,pmad,src
src=src+Smem*pmad,
T=Smem,(Smem+1)=Smem
操作数与程序存储器值相乘后累加并延迟
2
3
MACPSmem,pmad,src
src=src+Smem*pmad,T=Smem
操作数与程序存储器值相乘后加到累加器
2
3
MACSUXmem,Ymem,src
src=src+uns(Xmem)*Ymem,T=Xmem
元符号数与有符号数相乘后加到累加器
1
1
MASSmem,src
src=src—T*Smem
从累加器中减去T寄存器值与操作数的乘积
1
1
MASRXmem,Ymem,src[,dst]
dst=rnd(src—Xmem*Ymem),T=Xmem
从累加器中减去两操作数的乘积(带舍入)
1
1
MASXmem,Ymem,src[,dst]
dst=src—Xmem*Ymem,T=Xmem
从源累加器中减去两操作数的乘积
1
1
MASRSmem,src
src=rnd(src—T*Smem)
从累加器中减去T寄存器值与操作数的乘积(带舍入)
1
1
MASASmem[,B]
B=B—Smem*A(32—16),T=Smem
从累加器B中减去操作数与累加器A高位的乘积
1
1
MASAT,src[,dst]
dst=src—T*A(32—16)
从源累加器中减去T寄存器值与累加器A高位的乘积
1
1
MASART,src[,dst]
dst=rnd(src—T*A(32—16))
从源累加器中减去T寄存器值与累加器A高位的乘积(带舍入)
1
1
SQURASmem,src
src=src+Smem*Smem,T=Smem
操作数平方并累加
1
1
SQURSSmem,src
src=src—Smem*Smem,T=Smem
从累加器中减去操作数的平方
1
1
5.双精度(32位操作数)指令
句法
表达式
说明
字数
周期
DADDLmem,src[,dst]
IfC16=0
dst=Lmem+src
IfC16=1
dst(39—16)=Lmem(31—16)+src(31—16)
dst(15—0)=Lmem(15—0)+src(15—0)
双精度/双16位数加到累加器
1
1
DADSTLmem,dst
IfC16=0
dst=Lmem+(T<<16+T)
IfC16=1
dst(39—16)=Lmem(31—16)+T
dst(15—0)=Lmem(15—0)—T
双精度/双16位数与T寄存器值相加/减
1
1
DRSUBLmem,src
IfC16=0
src=Lmem—src
IfC16=1
src(39—16)=Lmem(31—16)—src(31—16)
src(15—0)=Lmem(15—0)—src(15—0)
双精度/双16位数中减去累加器值
1
1
DSADTLmem,dst
IfC16=0
dst=Lmem—(T<<16+T)
IfC16=1
dst(39—16)=Lmem(31—16)—T
dst(15—0)=Lmem(15—0)+T
长操作数与T寄存器值相加/减
1
1
DSUBLmem,src
IfC16=0
src=src—Lmem
IfC16=1
src(39—16)=src(31—16)—Lmem(31—16)
src(15—0)=src(15—0)—Lmem(15—0)
从累加器中减去双精度/双16位数
1
1
DSUBTLmem,dst
IfC16=0
dst=Lmem—(T<<16+T)
IfC16=1
dst(39—16)=Lmem(31—16)—T
dst(15—0)=Lmem(15—0)—T
从长操作数中减去T寄存器值
1
1
6.专用指令
句法
表达式
说明
字数
周期
ABDSTXmem,Ymem
B=B+|A(32—16)|,A=(Xmem—Ymem)<<16
绝对距离
1
1
ABSsrc[,dst]
dst=|src|
累加器取绝对值
1
1
CMPLsrc[,dst]
dst=———src
累加器取反
1
1
DELAYSmem
(Smem+1)=Smem
存储器单元延迟
1
1
EXPsrc
T=numberofsignbits(src)—8
求累加器的指数
1
1
FIRSXmem,Ymem,pmad
B=B+A*pmad,A=(Xmem+Ymem)<<16
对称FIR滤波
2
3
LMSXmem,Ymem
B=B+Xmem*Ymem,A=(A+Xmem<<16)+215
求最小均方值
1
1
MAXdst
dst=max(A,B)
求累加器(A,B)最大值
1
1
MINdst
dst=min(A,B)
求累加器(A,B)最小值
1
1
NEGsrc[,dst]
dst=-src
累加器变负
1
1
NORMsrc[,dst]
dst=src<归一化
1
1
POLYSmem
B=Smem<<16,A=rnd(A*T+B)
求多项式的值
1
1
RNDsrc[,dst]
dst=src+215
累加器舍入运算
1
1
SATsrc
saturate(src)
累加器饱和运算
1
1
SQDSTXmem,Ymem
B=B+A(32—16)*A(32—16),A=(Xmem—Ymem)<<16
求距离的平方
1
1
二、逻辑运算指令
1.与逻辑运算指令
句法
表达式
说明
字数
周期
ANDSmem,src
src=src&Smem
操作数和累加器相与
1
1
AND#lk[,SHFT],src[,dst]
dst=srclk<长立即数移位后和累加器相与
2
2
AND#lk,16,src[,dst]
dst=srclk<<16
长立即数左移16位后和累加器相与
2
2
ANDsrc[,SHIFT][,dst]
dst=dst&src<源累加器移位后和目的累加器相与
1
1
ANDM#lk,Smem
Smem=Smemlk
操作数和长立即数相与
2
2
2.或逻辑运算指令
句法
表达式
说明
字数
周期
ORSmem
src=src|Smem
操作数和累加器相或
l
1
OR#lk[,SHFT],src[,dst]
dst=src|#lk<长立即数移位后和累加器相或
2
2
OR#lk,16,src[,dst]
dst=src|#lk<<16
长立即数左移16位后和累加器相或
2
2
ORsrc[,SHIFT][,dst]
dst=dst|src<源累加器移位后和目的累加器相或
1
1
ORM#lk,Smem
Smem=Smem|#lk
操作数和长立即数相或
2
2
3.异或逻辑运算指令
句法
表达式
说明
字数
周期
XORSmem,src
src=src∧Smem
操作数和累加器相异或
1
1
XOR#lk,[,SHFT],src[,dst]
dst=src∧#lk<长立即数移位后和累加器相异或
2
2
XOR#lk,16,src[,dst]
dst=src∧#lk<<16
长立即数左移16位后和累加器相异或
2
2
XORsrc[,SHIFT][,dst]
dst=dst∧src<源累加器移位后和目的累加器相异或
1
1
XORM#lk,Smem
Smem=Smem∧#lk
操作数和长立即数相异或
2
2
4.移位指令
句法
表达式
说明
字数
周期
ROLsrc
Rotateleftwithcarryin
累加器经进位位循环左移
1
1
ROLTCsrc
RotateleftwithTCin
累加器经TC位循环左移
1
1
RORsrc
Rotaterightwithcarryin
累加器经进位位循环右移
1
1
SFTAsrc,SHIFT[,dst]
dst=src<累加器算术移位
1
1
SFTCsrc
ifsrc(31)=src(30)thensrc=src<<1
累加器条件移位
1
1
SFTLsrc,SHIFT[,dst]
dst=src<累加器逻辑移位
1
1
5.测试指令
句法
表达式
说明
字数
周期
BITXmem,BITC
TC=Xmem(15—BITC)
测试指定位
1
l
BITFSmem,#lk
TC=(Smemlk)
测试由立即数规定的位域
2
2
BITTSmem
TC=Smem(15—T(3—O))
测试由T寄存器指定的位
1
1
CMPMSmem,#lk
TC=(Smem==#lk)
存储单元与长立即数比较
2
2
CMPRCC,ARx
CompareARxwithAR0
辅助寄存器ARx与ARO比较
1
1
三、程序控制指令
1.分支转换指令
句法
表达式
说明
字数
周期
B[D]pmad
PC=pmad(15—0)
无条件分支转移
2
4/[2※]
BACC[D]src
PC=src(15—0)
按累加器规定的地址转移
1
6/[4※]
BANZ[D]pmad,Sind
if(Sind≠0)thenPC=pmad(15—0)
辅助寄存器不为O就转移
2
4/2§/[2※]
BC[D]pmad,cond[,cond[,cond]]
if(cond(s))thenPC=pmad(15—0)
条件分支转移
2
5/3§/[3※]
FB[D]extpmad
PC=pmad(15—0),XPC=pmad(22—16)
无条件远程分支转移
2
4/[2※]
FBACC[D]src
PC=src(15—0),XPC=src(22—16)
按累加器规定的地址远程分支转移
1
6/[4※]
2.调用指令
句法
表达式
说明
字数
周期
CALA[D]src
——SP=PC,PC=src(15—0)
按累加器规定的地址调用子程序
1
6/[4※]
CALL[D]pmad
——SP=PC,PC=pmad(15—0)
无条件调用子程序
2
4/[2§]
CC[D]pmad,cond[,cond[,cond]]
if(cond(s))then——SP=PC,PC=pmad(15—0)
有条件调用子程序
2
5/3§/[3※]
FCALA[D]src
——SP=PC,——SP=XPC,PC=src(15—0),XPC=src(22—16)
按累加器规定的地址远程调用子程序
1
6/[4※]
FCALL[D]extpmad
——SP=PC,——SP=XPC,PC=pmad(15—0),XPC=pmad(22—16)
无条件远程调用子程序
2
4[2※]
3.中断指令
句法
表达式
说明
字数
周期
INTRK
——SP=PC,PC=IPTR(15—7)+K<<2,INTM=1
不可屏蔽的软件中断,关闭其他可屏蔽中断
1
3
TRAPK
——SP=PC,PC=IPTR(15—7)+K<<2
不可屏蔽的软件中断,不影响INTM位
1
3
4.返回指令
句法
表达式
说明
字数
周期
FRET[D]
XPC=SP++,PC=SP++
远程返回
1
6/[4※]
FRETE[D]
XPC=SP++,PC=SP++,INTM=O
开中断,从远程中断返回
1
6/[4※]
RC[D]cond[,cond[,cond]]
if(cond(s))thenPC=SP++
条件返回
1
53§/[3※]
RET[D]
PC=SP++
返回
1
5/[3※]
RETE[D]
PC=SP++,INTM=O
开中断,从中断返回
1
5/[3※]
RETF[D]
PC=RTN,SP++,INTM=O
开中断,从中断快速返回
1
3/[1※]
5.重复指令
句法
表达式
说明
字数
周期
RPTSmem
Repeatsingle,RC=Smem
重复执行下条指令(Smem)+1次
1
1
RPT#K
Repeatsingle,RC=#K
重复执行下条指令k十1次
1
1
RPT#lk
Repeatsingle,RC=#lk
重复执行下条指令#lk+1次
2
2
RPTB[D]pmad
Repeatblock,RSA=PC+2[4#],REA=pmad—1
块重复指令
2
4/[2※]
RPTZdst,#lk
Repeatsingle,RC=#lk,dst=O
重复执行下条指令,累加器清O
2
2
6.堆栈管理指令
句法
表达式
说明
字数
周期
FRAMEK
SP=SP+K,-128≤k≤127
堆栈指针偏移一个立即数值
1
1
POPDSmem
Smem=SP++
将数据从栈顶弹出至数据存储器
1
1
POPMMMR
MMR=SP++
将数据从栈顶弹出至MMR
1
1
PSHDSmem
——SP=Smem
将数据压人堆栈
1
1
PSHMMMR
——SP=MMR
将MMR压人堆栈
l
1
7.其他程序控制指令
句法
表达式
说明
字数
周期
IDLEK
idle(K),1≤k≤3
保持空转状态,直到中断发生
1
4
MARSmem
IfCMPT=0,thenmodifyARx,
ARPisunchanged
IfCMPT=1andARx≠AR0,thenmodifyARx,
ARP=x
IfCMPT=1andARx=AR0,thenmodifyAR(ARP),
ARPisunchanged
修改辅助寄存器
1
1
NOP
nooperation
空操作
1
1
RESET
softwarereset
软件复位
1
3
RSBXN,SBIT
STN(SBIT)=0
状态寄存器位复位
1
1
SSBXN,SBIT
STN(SBIT)=1
状态寄存器位置位
1
1
XCn,cond[,cond[,cond]]
If(cond(s))thenexecutethenextninstructions;n=1or2
有条件执行
1
1
注:
条件“真”,§条件“假”,※延迟指令。
四、加载和存储指令
1.加载指令
句法
表达式
说明
字数
周期
DLDLmem,dst
dst=Lmem
双精度/双16位长字加载累加器
1
1
LDSmem,dst
dst=Smem
将操作数加载到累加器
1
1
LDSmem,TS,dst
dst=Smem<操作数按TREG(5~0)移位后加