大三c54x指令详解为了便于说明汇编语言首先定义一些符号和缩写这些_第1页
大三c54x指令详解为了便于说明汇编语言首先定义一些符号和缩写这些_第2页
大三c54x指令详解为了便于说明汇编语言首先定义一些符号和缩写这些_第3页
大三c54x指令详解为了便于说明汇编语言首先定义一些符号和缩写这些_第4页
大三c54x指令详解为了便于说明汇编语言首先定义一些符号和缩写这些_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

为了便于说明汇编语言指令,首先定义一些符号和缩写,这些符号和缩写都将在指令中使用。表1C54xxDSP指令系统中所使用的符号和缩写及其意义。表2详细列C54xxP的指令系统中所使用的一些特殊符号和缩写及其意义。1 A累加器累加器累加器特指某个辅助寄存器(0x7ST0寄存器中的辅助寄存器指针位;该位指向当前辅助寄存器B累加器ST1寄存器中的块循环有效标志该4位的值决定位测试指令对指定的数 器值的哪一位 试(0BITCST1寄存器中的双16位/双精度算术CST0寄存器中的进位2位条件代码(0CC3ST1寄存器中的兼容方式ST1寄存器中的编译方式16位立即数表示的数 器地址(0dmad65535ST09位数据页指针位(0DP目的累加器的反ifdst=A,thenifdst=Bthen目的累加器的反ifdst=A,thenifdst=BthenEAB地址寄存ST1寄存器中的分数方式Hh累加器A的高端(ST1寄存器中的保持方式ST1寄存器中的中断K3位立即数(0k375位立即数(-16k5159位立即数(0k9115器映射寄存器,AR0~AR7器映射寄存器,AR0~AR7nN指定在RSBX、SSBXXC指令中修改的状态寄存N=0,状态寄存器ST0N=1,状ST0寄存器中的累加器A的溢出标ST0寄存器中的累加器B的溢出标目的累加器(A或B)目的累加器反(A或B)源累加器(A或B)ST1寄存器中的溢出方式16位立即数表示的程 器地址(0pmad65535在指令RETF[D]中使用的快速返回寄4RSBX、SSBXXC中修改的状态寄存器位数(0SBIT4位移位数(0SHFT5位移位数(-16SHIFT16位单数据器操作源累加器(A或ST1寄存器中的符号扩展方式TST0寄存器中的测试/控制标志T5~0位确定的移位数(-16TS31ST1寄存器中的外部标志状态2|&^==[xx可选#x的内容送到xx×*TMS320C54xxP129辑指令、程序控制指令、和装入指令以及循环指令。下面根据每种指令功能的不同,划分成小组列表的形式以便于查询,并就常用指令的用法作简要的说明,详细的说明请参算术运算指令可分为加法指令(ADD、减法指令(SUB、乘法指令(MPY、乘加指令(MAC、乘减指令(MAS、双数据或者双精度指令(DADD、DSUB)以及特殊操作指令(ABDST、FIRS、SQDST。其中大部分指令只需要一个指令周期,个别指令需要2~3个指令周期。 语注ADDSmem,src=src+Smen加到累ADDSmem,TS,src=src+Smem<<Smen移位后加到累加ADDSmem,16,src[,dst=src+Smem<<Smen16位后加到累加器ADDSmem[,SHIFT],src[,dst=src+Smem<<ADDXmem,SHFT,src=src+Xmem<<XmenSHIFT位后加到累ADDXmem,Ymem,dst=Xmem<<16+Ymem<<XmenYmen都左移16位后ADD#lk[,SHFT],src[,dst=src+#lk<<长立即数移动SHFTsrc,存放到ADD#lk,16,src[,dst=src+#lk<<长立即数左移16位后加到src,存放到ADDsrc[,SHIFT][,dst=dst+src<<src移动SHIFT位后加到ADDsrc,ASM[,dst=dst+src<<src移动ASM位后加到ADDCSmem,src=src+Smem+Smen和进位位加到累ADDM#lk,Smem=Smem+ADDSSmem,src=src+无符号数Smen 语注SUBSmem,src=src–从累加器中减去SUBSmem,TS,src=src–Smem<<从累加器中减去SmemSUBSmem,16,src[,dst=src–Smem<<SUBSmem[,SHIFT],src[,dst=src–Smem<<从累加器中减去Smem移动SHIFT位后的SUBXmem,SHFT,src=src–Xmem<<从累加器中减去XmemSHFTSUBXmem,Ymem,dst=Xmem<<16–Ymem<<XmemYmem分别左移16SUB#lk[,SHFT],src[,dst=src–#lk<<从src中减去长立即数移动SHFT中SUB#lk,16,src[,dst=src–#lksrcSUBsrc[,SHIFT][,dst=dst–src<<dstsrcSUBsrc,ASM[,dst=dst–src<<dstsrcASM位SUBBSmem,src=src–Smem–Smem和进位SUBCSmem,If(src–Smem<<15) 0src=(src–Smem<<15)<<1+1 src=src<<SUBSSmem,src=src–从累加器中减去无符号数语注MPYSmem,dst=T*T寄存器与Smen相乘,结果存放MPYRSmem,dst=rnd(T*TSmen相乘,结果进行MPYXmem,Ymem,dst=Xmem*Ymem,T=Xmem两数据存储器操作数XmenYmen结果存放在累加器中;同时Xmen送到T寄存器中MPYSmem,#lk,dst=Smem*#lkT=SmemSmem相乘,结果存放SmenTMPY#lk,dst=T*T寄存器相乘,结果存MPYAdst=T*A16T寄存器相MPYAT=Smem累加器A的高16位与Smem相BSmen送到T寄存器MPYUSmem,dst=uns(T)*无符号数T寄存器与无符号数Smen相乘,结果存放在累加SQURSmem,dst=Smem*T=Smen的平方,结果存放在累加器中;同时Smen送到T寄存器中SQURA,dst=A(32~6)*A16位的平方值,结 语注MACSmem,src=src+T*T寄存器与Smen相乘,结果加MACXmem,Ymem,src[,dst=src+Xmem*T=Ymen相乘,结果加到累加器中;同时Xmen送到T寄存MAC#lk,src[,dst=src+T*T寄存器相乘,结果MACSmem,#lk,src[,dst=src+Smem*SmemT=到累加器中;同时Smen送到MACRSmem,src=rnd(src+T*TSmen相乘,结果加MACRXmem,Ymem,src[,dst=rnd(src+Xmem*Ymem)T=Xmem两数据器操作数Xmen和Ymen相乘,结果加到累加器Xmen送到T寄存器MACASmem[,B=B+Smem*T=A16Smen乘,结果加到累加器B;同时Smen送到T寄存器中MACAT,src[,dst=src+T*A16T寄存器MACARSmem[,B=rnd(B+Smem*A(32~16))T=SmemA16Smen相乘,结果加到累加器B,并执行四舍五入运算;同时Smen送到T寄存器中MACART,src[,dst=rnd(src+T*A16T寄存器MACDSmem,pmad,src=src+Smem*pmadT=Smem(Smem+1)=SmenPmad相乘,并加到累加器中;同时Smen送到T寄存器中和下一个Smen单元MACPSmem,pmad,src=src+Smem*pmadT=SmemSmenPmad相乘,并加到累加器中;同时Smen送到T寄存中MACSUXmem,Ymem,src=src+uns(Xmem)*YmemT=Xmem带符号数Ymem与无符号数Xmem相乘,结果加到累加器Xmen送到T寄存器中MASSmem,src=src–T*TSmen的MASRSmem,src=rnd(src–T*TSmen的MASXmem,Ymem,src[,dst=src–Xmem*T=XmemYmen的乘Xmen送到TMASRXmem,Ymem,src[,dst=rnd(src–Xmem*Ymem)T=XmemXmemYmen的乘Xmen送到T寄存器中MASASmem[,B=B–Smem*BSmen16SmenT=到TMASAT,src[,dst=src–T*T寄存器和累加器A的高16位的乘积MASART,src[,dst=rnd(src–T*TA16位的乘积,并执行SQURASmem,src=src+Smem*T=Smen平方后加到累加器,同时Smen送到T寄存器SQURSSmem,src=src–Smem*T=累加器减去SmenSmen送到T寄存器 语注DADDLmem,src[,IfC16=0 dst=Lmem+srcIfC16=1dst(39~16)=Lmem(31~16)dst(15~0)=Lmem(15~0)+双精度数据Lmensrc加16位数据Lmen和src加法IfC16=0dst=Lmem+(T<<16+IfC16=dst(39~16)=Lmem(31~16)+Tdst(15~0)=Lmem(15~0)–T双精度数据Lmen带移位的T寄存器加法;双16LmenT寄存器16LmenTDRSUBLmem,IfC16=0src=Lmem–srcIfC16=1src(39~16)=Lmem(31~16)–src(31~16)0)=Lmem(15~0)–双精度数据Lmensrc的16位数据Lmen和src的减法DSADTLmem,IfC16=0dst=Lmem–(T<<16+IfC16=dst(39~16)=Lmem(31~16)–Tdst(15~0)=Lmem(15~0)+T双精度数据Lmen和带移位的T寄存器的减法;双1616位数据Lmen和T寄存器的减16位数据LmenDSUBLmem,IfC16=0 IfC16=1src(39~16)=src(31~16)–src(15~0)=src(15~0)–src和Lmen的16src和Lmen的减法DSUBTLmem,IfC16=0 dst=Lmem–(T<<16+T)IfC16=1双精度数据Lmen和带移位的T寄存器的减法;双16位数据的Lmen和Tdst(39~16)=Lmem(31~16)–dst(15~0)=Lmem(15~0)– 语注B=B+A=(Xmem–Ymem)<<A16的绝对值加到累BXmemYmen16位送到累加器AABSsrc[,dst=CMPLsrc[,dst=DELAY(Smem+1)=EXPT=numberofsignbitsFIRSXmem,Ymem,B=B+A*A=(Xmem+Ymem)<<Xmem,B=B+Xmem*A=A+Xmem<<16+MAXdst=max(A,MINdst=min(A,NEGsrc[,dst=NORMsrc[,dst=src<<dst=norm(src,POLYB=Smem<<A=rnd(A(32–16)*T+RNDsrc[,dst=src+SATB=B+A(32–16)*A=(Xmem–Ymem)<<(AND(XOR以及测试指令(BITF。根据操作数的不同,这些指令需要1~2个指令周期。①与指令语表达注ANDSmem,src=src&Smem和累加AND#lk[,SHFT],src[,dst=src&#lk<<SHFT位后和累加AND#lk,16,src[,dst=src&#lk<<ANDsrc[,SHIFT][,dst=dst&src<<SHIFT位后和目的累ANDM#lk,Smem=Smem&Smen和长立即②或指令语表达注ORSmem,src=src|Smem和累加OR#lk[,SHFT],src[,dst=src|#lk<<SHFT位后和累加OR#lk,16,src[,dst=src|#lk<<ORsrc[,SHIFT][,dst=dst|src<<SHIFT位后和目的累ORM#lk,Smem=Smem|Smen和长立即数相③异或指令语表达注XORSmem,src=src^Smem和累加XOR#lk[,SHFT,],src[,dst=src^#lk<<SHFT位后和累加XOR#lk,16,src[,dst=src^#lk<<XORsrc[,SHIFT][,dst=dst^src<<SHIFT位后和目的累XORM#lk,Smem=Smem^Smen和长立即数相④移位指令语表达注ROL—ROLTC—累加器带TCROR—SFTAsrc,SHIFT[,dstsrcSHIFT(算术移位SFTCifsrc(31)=thensrc=src<<SFTLsrc,SHIFT[,dstsrcSHIFT(逻辑移位⑤测试指令语表达注BITXmem,TC=Xmem(15–测试指定BITCBITFSmem,#TC=(Smem&&测试立即数和SmenBITTTC=Smem(15–测试由T4CMPMSmem,#TC=(Smem==比较SmenCMPRCC,—程序控制指令包括:分支指令(B、BC、调用指令(CALL、中断指令(INTR、TRAP、返回指令(RET、重复指令(RPT、堆栈操作指令(FRAME、POPD)以及混合程序控制指令(IDLE、NOP。这些指令根据情况不同分别需要1~6个指令周期。①分支指令语表达式注释B[D]PC=PCBACC[D]PC=BANZ[D]pmad,if(SindthenPC=满足条件程序指针PC转移到cond]ifthenPC=满足条件程序指针PC转移到FB[D]PC=pmad(15~0)PCpmad16位指向的地址,同时程序指针无条件转移到pmadFBACC[D]PC=src(15~0)程序指针PC无条件转移到累加16位指向的地址,同时远②调用指令语表达注CALA[D]–PC=src(15–0)1,可延时的无条件–堆栈指针减1PC+2[4]=PC=调用pmadCC[D]pmad,cond[,cond[,PC+2[4]=TOSPC=pmad所指向的子程序,堆栈指针减1–PC+1[3]=PC=src(15–0)堆栈指针减1,可延时的无条件调用src所指向的子程序FCALL[D]–PC+2[4]=PC=pmad(15–0)堆栈指针减1,可延时的无条件调用pmad③中断指令语表达注INTR–++PC=PC=IPTR(15~7)+K<<2INTM=1软件中断,程序指针中断到由K1,同时关闭总中断TRAP–++PC=PC=IPTR(15~7)+K<<软件中断,程序指针中断到由K1,但不关闭总中断④返回指令语表达注XPC=++PC=可延时的返回,TOS(堆栈顶单元)XPC1;TOS再弹到PC,堆栈加1XPC=++PC=可延时的返回,TOS(堆栈顶单元)XPC1;TOSPC1;同时RC[D]cond[,cond[,cond]if(cond(s))thenPC=TOS,1PC=PC=1,且允许中断PC=指针加1,且允许中断⑤重复指令语表达注RPTRC=为Smen的内容RPT#RC=RPT#RC=RPTB[D]RSA=PC+BRAF=1RPTZdst,#RC=dst=为长立即数,并对累加器清0⑥堆栈操作指令语表达注FRAMESP=SP+POPDSmem=把数据从栈顶弹入到数据器,堆栈指针加1POPMMMR=寄存器,堆栈指针加1PSHD–Smem=堆栈指针减1,把数据器值PSHM–MMR=堆栈指针减1,把器映射寄语法表达式注释IDLEMARIfCMPT0,ARxIfCMPT=1andARxthenARx,ARPIfCMPT=1andARx=AR0,RSBXN,STN(SBIT)=SSBXN,STN(SBIT)=XCncond],If(cond(s))then执行下面的n条指令=1或装入和指装入和指令包括:一般的装入和指令(LD、ST、条件指令(CMPS、SACCD、并行的和乘法指令(LD||MAC、并行的和指令(ST||LD、并行的和乘法指令(ST||MAC、并行的和加减指令(LD||ADD,LD||SUB)以及READA需要1~5个指令周期。语表达注DLDLmem,dst=将LmenLDSmem,dst=将SmenLDSmem,TS,dst=Smem<<将Smen移动TSLDSmem,16,dst=Smem<<将Smen16LDSmem[,SHIFT],dst=Smem<<将SmenSHIFTLDXmem,SHFT,dst=Xmem<<Xmen移动SHFTLD#K,dst=LD#lk[,SHFT],dst=#lk<<LD#lk,16,dst=#lk<<LDsrc,ASM[,dst=src<<LDsrc[,SHIFT],dst=src<<LDSmem,T=将SmenTLDSmem,DP=将Smen9LD#k9,DP=LD#k5,ASM=LD#k3,ARP=LDSmem,ASM=将Smen5LDMMMR,dst=LDRSmem,dst=将SmenLDUSmem,dst=T=(Smem+1)=SmenT②指语表达注DSTsrc,Lmem=将累加器的值存放到LmemSTT,Smem=将T寄存器的值存放到SmemSTTRN,Smem=将TRN的值存放到SmemST#lk,Smem=将长立即数存放到SmemSTHsrc,Smem=src<<将累加器的值移动-16位后存放到SmemSTHsrc,ASM,Smem=src<<(ASM–将累加器的值移动(ASM–16)位后存放到Smem中STHsrc,SHFT,Xmem=src<<(SHFT–STHsrc[,SHIFT],Smem=src<<(SHIFT–将累加器的值移动(SHFT–16)位后存放到Smem中STLsrc,Smem=将累加器的值存放到SmemSTLsrc,ASM,Smem=src<<将累加器的值移动ASM位后存放到中STLsrc,SHFT,Xmem=src<<SHFT中STLsrc[,SHIFT],Smem=src<<SHIFT中STLMsrc,MMR=STM#lk,MMR=③条件指语表达注CMPSsrc,Ifsrc(31~16)>src(15~0)thenSmem=src(31~16)Ifsrc(31~16)src(15~0)Smem=SACCDsrc,Xmem,IfXmem=src<<(ASM–SRCCDXmem,If(cond)Xmem=STRCDXmem,If(cond)Xmem=有条件T寄存器的④并行装入和指语法表达式注释STsrc,||LDXmem,Ymem=src<<(ASM||dst=Xmem<<累加器移动(ASM16)后装入Ymen,同时并Xmen移动STsrc,||LDXmem,Ymem=src<<(ASM–||T=累加器移动(ASM16)后装入语法表达式注释LDXmem,||MACYmem,dst=Xmem<<||dst_=dst_+T*Xmem移动16位后送到累加器,同时并行执行T寄存器Ymen,并将乘积加到目的累LDXmem,||MACRYmem,dst=Xmem<<||dst_=rnd(dst_+T*Xmem移动16位后送到累加器,同时并行执行T寄存器乘Ymen,并将乘积加到目的累加算LDXmem,||MASYmem,dst=Xmem<<||dst_=dst_–T*Xmem移动16位后送到累加器,同时并行执行T寄存器乘LDXmem,||MASRYmem,dst=Xmem<<||dst_=rnd(dst_–T*Xmem移动16位后送到累加器,同时并行执行T寄存器乘⑥并行和加减指语法表达式注释STsrc,||ADDXmem,Ymem=src<<||dst=dst_+Xmem<<Xmen移动16位后加上源累加时执行,src移动(ASM-16)位后STsrc,||SUBXmem,Ymem=src<<(ASM–||dst=(Xmem<<16)–Xmen移动16位后减去源累加时执行,src移动(ASM-16)⑦并行和乘法指语法表达式注释STsrc,||MACXmem,Ymem=src<<(ASM–||dst=dst+T*Src移动(ASM16)位后送到Ymen中,同时并行执行T寄存器乘Ymen,并将乘积加到目的STsrc,||MACRXmem,Ymem=src<<(ASM–||dst=rnd(dst+T*Src移动(ASM16)位后送到Ymen中,同时并行执行T寄存器乘Xmen,并将乘积加到目的STsrc,||MASXmem,Ymem=src<<(ASM–||dst=dst–T*Src(ASM16)位后送到Ymen中,同时并行从累加器中减去T寄存器和Xmen的乘积STsrc,||MASRXmem,Ymem=src<<(ASM–||dst=rnd(dst–T*Src移动(ASM16)位后送到Ymen中,同时并行从累加器中TXmen的乘积,STsrc,||MPYXmem,Ymem=src<<(ASM–||dst=T*Src(ASM16)位后送到YmenT寄存器Xmen的乘积送到累加⑧其它装入和指语表达注MVDDXmem,Ymem=MVDKSmem,dmad=将Smen送到MVDMdmad,MMR=将dmadMVDPSmem,pmad=将Smen送到MVKDdmad,Smem=将dmad送到MVMDMMR,dmad=MMR送到MVMMMMRx,MMRy=MVPDpmad,Smem=将pmad送到PORTRPA,Smem=PA端口把数据读到PORTWSmem,PA=将SmenPAREADASmem=把由累加器A寻址的程序器单元的值读到数WRITAA=C54xxP1在6位重复计数寄存器(RC中。RC的值只能由单个循环指令中的操65536。当下一条指令被重复执行时,绝对程序或数据地址将自动加1。当重复指令被时,所有中断(除复位中断外)均被,直到下一条指令被重复行完毕。重复的功能体现在如乘加或块移动指令这些指令中,也可以用来增加指令的执行 累加器的值进行乘运算和移动(带延时累加器的值进行乘运算和移动(不带延时数据空间到MMRMMR寄存器到数据空间的移说对单个数据器操作说长字(32位LD调用辅助寄存器指针LD调用数据页指针MMR之间的移 操作数Xmem,Ymem:双数据操作数 (B)+|(A(32~16))|卢B((Xmem)(Ymem16卢OVMFRCTSXM位影响影响C、OVA以及OVB位XmemYmemA的高端(32~16)BXmemYmem16A中。如果分数方式位(FRCT位)为1,该绝对值将自动乘2。例 *AR3+,累加器A高端的绝对值|ABCDh|=5433h,将结果加到累加器B的 src src,dst:A(累加器A) B(累加器B) |(src)|➔dst状态 OVM位按照以下方式影响该指令运行结果OVM1,8000000000h007FFFOVM0,8000000000h800000COVdst位(dstsrcOVsrc位例 A, Smem, Smem[,SHIFT],src #lk[,SHFT],src #lk,16,src src src,ASM–32768≤lk≤32–16≤SHIFT≤0≤SHFT≤执行(1)(Smem)(2)(Smem)<<(TS)+(3)(Smem)<<16+(4)(Smem)[<<SHIFT]+(5)(Xmem)<<SHFT+(src)(6)((Xmem)+(Ymem))<<lk<<SHFT+(src)lk<<16+(src)(9)(srcor[dst])+(src)<<(10)(srcor[dst])+(src)<<状态 Xmen。这个16位的数可以为以下情况之一(Smem;双数据器操作数(Xmem和Ymem;(#lk;dstdstsrc中。大部分第二操作数需要移位。左移时低位必定添0;右移时的符号扩展有两种情况,分别为:SXM=0如果SXM=1不进行符号扩展,直接添0。 *AR3+,14,A h加上 操作 Smem:单数据操作src:A(累加器 B(累加器执 (Smem)+(src)+(C)➔状态 被OVM位和C位影 *+AR2(5), #lk,操作数Smem:单数据操作–32768≤lk≤32执 #lk+(Smem)➔状态位被OVMSXM位影响影响C位和OVA位 0123Bh, 0FFF8h,指令运行前OVM和SXM都为1,对运行结果做溢出保护和符号扩展。立即数0FFF8h+8007h=17FFFh16位范围,做8000hSXM0,最终结果为 Smem,操作 Smem:单数据操作src:A(累加器 B(累加器执 uns(Smem)+状态 被OVM位影例 *AR2–,ANDAND#lk[,SHFT],srcAND#lk,16,srcANDsrc[,SHIFT操作 Smem:单数据操作src:A(累加器A) B(累加器B)–16≤SHIFT≤150≤SHFT≤0≤lk≤65(Smem)AND(src)lk<<SHFTAND(src)➔lk<<16AND(src)➔(dst)AND(src)<<SHIFT➔状态位无源或目的累加器(src0,高位不进行符号扩展;如果右移,添0。 *AR3+, #lk,操作 Smem:单数据操作0≤lk≤65执 lkAND(Smem)➔ 例 #00FFh, 操作 0≤pmad≤65执 pmad➔ 程序指针指向指定的程序器地址(pmad,该地址可以是符号或一个数字。如果指令带有后缀D例 操作 src:A(累加器 B(累加器执 c6(,紧跟着该指令的两条单字或一条双字指令从程序器中取出先执行。该指令不能循环执行。例 BANZ[D]pmad,操作 Sind:单间接寻址操作0≤pmad≤65 If((ARx)≠0)

pmad➔PC(PC)+2➔PCARx0,程序指针转移到指定的地址(pmad,否则程序例 2000h, pmad,cond[,cond[,cond操作数0pmad65执 If pmad➔PC (PC)+2➔PCOVAOVB3 说条说C(A)=(B)=(A)>(B)>(A)(B)≥(A)<(B)<(A)(B)≤ABAB先执行。但如果条件满足,那么这两个字将从流水中冲掉,程序从pmad开始执行;如果条件不满足,PC加2且紧接着该指令的两个字继续执行。程序指针在改变之前可对多个条件进试。指令的条件代码见附录表1。指令可试相互独立的条件或者关联的条件;但多个条件只能出自同一组的不同类中。条件的分组2。例BC4ABABCEQNEQLEQGTC Xmem,操作数Xmem:双数据操作0≤BITC≤执行(Xmem(15–BITC)) 影响TC位把双数据器操作数Xmem的指定位到状态寄存器的ST0的TC位。例BIT *AR5+,15-12BITFSmem,#操作数Smem:单数据操作0≤lk≤65 If((Smem)ANDlk)=0➔➔状态位影响TC位测试单数据器值Smem中指定的某些位,假如指定的一位或多位为0,状态寄存器ST0的TC位清0,否则该位置1。lk常数在测试一位或多位时起作用。例 5,BITT操作数Smem:单数据操作数执行(Smem(15–T(3~0)))➔TC状态位影响TC位把单数据器Smem的指定位到ST0的TC位,T寄存器的低四位(位3~0)值确定了被的位代码,高12位对应位地址。例 CALA[D]操作 src:A(累加器 B(累加器执 (SP)–1➔SP(PC)+1➔TOS(SP)–1➔SP(PC)+3➔TOS 程序指针转移到src的低位所确定的地址单元,返回地址压入栈顶。如果是延迟调用,紧接着该指令的两条单字指令或一条双字指令从程序器中取出来先执行。该指令例CALACALL[D]操作 0≤pmad≤65执 非延(SP)-1➔SP(PC)+2➔pmad➔(SP)-1➔SP(PC)+4➔pmad➔状态位无(pmad顶保存。如果是延迟调用,紧接着该指令的两条单字指令或一条双字指令从程序器中 pmad,cond[,cond[,操作 0≤pmad≤65执 非延If (SP)-1➔(PC)+2➔pmad➔

(PC)+2➔If (SP)-1➔SP(PC)+4➔pmad➔(PC)+2➔状态位影响OVAOVB位当满足确定的条件时,程序指针指向程序器地址(pmad),实现程序跳转;如果不满足条件时,程序指针加2。如果是延迟调用,该指令的后两个字指令先取出执行,且不会影响被测试的条件。该指令的判断条件和BC[D]指令的使用完全一样。例 2222h, src[,操作数srcdstAA)B执 (src)➔状态位计算src的反码(逻辑反,结果存放在dst中;若没有指定dst,则存放在src中。例CMPL A,B Smem,#操作数Smem:单数据操作–32768≤lk≤32 If(Smem)=lk 1➔ 0➔状态位影响TC位的TC位置1,否则该位清0。例 *AR4+, CC,操作数0CCARx:执 If 1➔ 0➔状态位影响TC位比较指定的辅助寄存器(ARx)AR0TC的值。比较的方式由条件代码CC的值决定,见附录表3。若条件满足ST0寄存器的TC位置1,否则该位0。所有的条件都以无符号数运算。5 2, src,操作 src:A(累加器 B(累加器执 If((src(31~16))> (TRN)<<1➔TRN (TRN)<<1➔TRN 影响TC位比较位于累加器的高端和的两个16位二进制补码值的大小,把较大值存在单数据器单元Smem中。如果是累加器的高端(31~16位)较大,暂时寄存器(TRN)一位,最低位添0;TC位清0。反之,若累加器的(15~0位)较大,暂时寄存器左1;TC1。该指令不遵从标准的流水线操作。比较是在读操作数阶段完成。因而,累加器的值是指令执行前一个阶段的值。暂时寄存器和TC位是在指令执CMPSAA167899h162345h167899hAR4100h中。同时,TRN14444h×2+1=8889h,最后将TC位置1。DADDLmem,src[,操作数Lmem:长数据操作srcdstAA)B累加执 IfC16= (Lmem)+(src)➔ (Lmem(31~16))+(src(31~16))➔dst(39~16)(Lmem(15~0))+(src(15~0))➔dst(15~0)状态位只有在C16=0SXMOVM位影响影响C位和OVdst位源累加器的内容加到32位长数据器操作数Lmem中。如果定义了目的累加器结果存在目的累加器中,否则存在源累加器中。C16的值决定了指令执行的方式,当C16=0时,指令以双精度方式执行,40Lmem中,饱和位和溢出位根C16=116位方式执行,SRC的高端(31~16)与Lmem的高16位相加;SRC的(位15~0)与Lmem的低16位相加。饱和位和溢出位在此方式下不改变,无论OVM的状态是什么,结果不进行饱和运算。例DADD*AR3+AAR3指向的地址单100h和下一个地址101h组成一32位的数据,将此数加上累加器A,结果存在累加器B中。实际运行为 h h6BACBD89h。由于是长数据操作,AR32 Lmem,操作数Lmem:长数据操作dst:A(累加器 B(累加器执 C16= (Lmem(31~16))+(T)➔dst(39~16)(Lmem(15~0))-(T) (Lmem)+((T)+(T)<<16)➔状态位只有在C16=0SXMOVM位影响影响C位和OVdst位该指令把T寄存器的值加到32位长数据器操作数Lmem中。C16的值决定了C16=0时,指令以双精度方式执行,T16位得到32LmemC16=1时,指16位方式执行,Lmem16T24Lmem16T16位。无论OVMC161时(16位例DADST*AR3–AR3指向的地址单100h和下一个地址101h组成一32位的数据,将此数=3879h16TA16位。实际运行为,3456h-2345h=1111h。由于是长数据操作,AR3执行后增加2。 Smem:单数据操作数 (Smem)➔Smem+1 该指令把单数据器单元Smem的内容到紧接着的较高地址单元中去。数据复Z延迟是相当有用的。这种延迟操作数在MACD等指令中都可以见到。例DELAY Lmem,操作 Lmem:长数据操作dst:A(累加器 B(累加器执 (Lmem)➔ (Lmem(31~16))➔dst(39~16)(Lmem(15~0))➔dst(15~0) 被SXM位影响32Lmemdst中。C16的值决定了指令C16=0时,指令以双精度方式执行,Lmemdst中;当C16=116位方式执行,Lmem16dst24位,同时Lmem的装入目的累加器的。例 *AR3+, Lmem,操作 Lmem:长数据操作src:A(累加器 B(累加器执 C16= (Lmem)-(src)➔ (Lmem(31~16))-(src(31~16))➔src(39~16)(Lmem(15~0))-(src(15~0))➔src(15~0)状态 32Lmemsrcsrc中。C16决定了指令执行的方式。当C16=0时,指令以双精度方式执行;当C16=1时,指令以双16位方式执行,Lmem16src的高端,结果存放src24位,同Lmem的减去src的,结果存放在src的。在这种方式下,不管OVM的状态如何,例DRSUB*AR3+ Lmem,操作数Lmem:长数据操作dst:A(累加器 B(累加器执行IfC16 (Lmem(31~16))-(T)➔dst(39~16)(Lmem(15~0))-(T)➔dst(15~0) (Lmem)–((T)+(T<<16))➔ 只有C16=0时被SXM位和OVM位影响影响C位和OVdst位C16=0时,指令以双精度方式执行,T16位后得到的值连在一起组成的32位的数与LmemdstC16=116位方式执行,Lmem16Tdst的高端,同时把T寄存器的值加到Lmem的,结果存在dst的。在这种方式下,不管OVM的状态如何,都不进行饱和运算。例DSADT*AR3+C160T16T32 h=F1EF1111h,做符号扩展后A src,操作 src:A(累加器 B(累加器Lmem:长数据操作执 (src(31~0))把源累加器的内容存放在一个32位的长数据器单元中Lmem中。例DST B,*AR3+DSUBLmem,操作 Lmem:长数据操作src:A(累加器 B(累加器执 C16= (src)-(Lmem) (src(31~16))-(Lmem(31~16))➔src(39~16)(src(15~0))-(Lmem(15~0))➔src(15~0)状态位只有在C160SXMOVM位影响影响C位和OVsrc位C16C16=0C16=1时,指16srcLmem的高端src24位,同时从源累加器src的减去Lmem的,结果装入src的。例DSUB*AR3+ h=414454DDh Lmem,操作数Lmem:长数据操作dst:A(累加器 B(累加器执 IfC16= (Lmem(31~16))-(T)➔dst(39~16)(Lmem(15~0))-(T)➔dst(15~0) (Lmem)-((T)+(T<<16))➔状态位只有在C160SXMOVM位影响影响C位和OVdst位C16的值决定了指令执行的方式。当C16=0时,指令以双精度方式执行,T寄存器的值与1632LmemdstC16=116Lmem16T寄存器的内容,结果存在目地累加器的高端,同时从Lmem的中减去T寄存器的值,结果存放在目的累加器dst的。在这种方式下,不管OVM的状态如何,都不进行饱和运算。例DSUBT*AR3+ 操作数src:A(累加器 B(累加器 If(src)=0 0➔T (src的引导位数)-8状态位无T寄存器中,该值是一个范围在-831之间的二进制补码src的引导位数然后减8得到的,引导位数等于消40位源累加srcsrc保持不例 操作 0≤extpmad≤7F执 (pmad(22~16))➔状态位无程序指针指向程序地址,该地址的页由pmad的位22~16决定,页中的位置由pmad的位15~0所确定,pmad是程序中的符号或一个具体的数值。如果是延迟转移,紧 该指令专门为跳转所使用,程序指的是DSP外部的程序或者数据空间,一 操作 src:A(累加器 B(累加器 (src(15~0))➔PC(src(22~16))➔XPC状态位无说该指令是把源累加器src的位22~16装入XPC,并让程序指针指向src的(位15~0)16位地址。如果是延迟转移,紧接着该指令的两条单字指令或一条双字例 该指令和跳转指令一样,除非用户将程序存放在外扩的RAM单元,否则不会 srcAAB执 状态位无

(SP)–1➔SP(PC)+1➔TOS(SP)–1➔SP(XPC)➔TOS(src(15~0))➔PC(src(22~16))➔XPC(SP)–1➔SP(PC)+3➔TOS(SP)–1➔SP(XPC)➔TOS(src(15~0))➔PC(src(32~16))➔XPC(XPC,sr指针(PC。如果是延迟调用,紧接着该调用指令的两条单字指令或一条双字指令先执 FCALA将累加器A的高端7Fh存到XPC,3000h存到PC。其中数据空间的1110h和110FhXPC1110h110FhRAM1110h110Fh肯定是在用户外扩的RAM单元。该指令为调用指令,和跳转指令一样,除非用户将程序存放在外扩的RAM单元,否则不会使用该指令。 操作数0extpmad7F执 非延(SP)-1➔SP(PC)+2➔TOS(SP)–1➔SP(XPC)➔TOS(pmad(15~0))➔PC(pmad(22~16))➔XPC(SP)–1➔SP(PC)+4➔TOS(SP)–1➔SP(XPC)➔TOS(pmad(15~0))➔PC(pmad(22~16))➔XPC状态位无pmad的位22~16装入程序指针(XPC,pmad的位15~0装入程序指 FIRSXmem,Ymem,操作数Xmem,Ymem:双数据操作0≤pmad≤65 pmad➔PARWhile(RC)≠0(B)A(32~16PARPmem的地址单元B((Xmem)+(Ymem))<<16A(RC)-1➔状态位被SXM位、FRCTOVM位影响影响C位、OVA位和OVB位A的高端(32~16)pmad(PAR中)Pmem值相乘,结果加到累加器B中,同时,器操作数Xmem和Ymem相加,结果左移16位,然后装入到累加器A中,在下一个循环中pmad加1。一旦循环流水正常工例FIRS*AR3+*AR4+ACOEFFS77h×1234h=8762ChB中。然后执行AR3和AR4指向的地址单元内容相加,为55h+AAh=FFh,左移16位,A中。该指令一般用于滤波器运算,可以快速实现滤波器的一次乘加操作,循环执行该指令,可以快速实现两个n阶的向量乘法。 操作数–128K执 (SP)+K➔ KSP中。在编译方式(CPL=1)下的地址产生,紧接例 操作 (SP)+1➔SP(TOS)➔PC(SP)+1➔SP 把栈顶单元的低7位数值装入程序指针(XPC)中,紧接着的下一个堆栈单元16位数装入程序指针,堆栈指针在每一操作数完成后自动加1。如果是延迟返回,紧接着该指令的两条单字指令或一条双字指令先执行。该指令为返回指令,和调用指令例操作 (SP)+1➔SP(TOS)➔PC(SP)+1➔SP0➔INTM 影响INTM位把栈顶单元的低7位值装入程序指针(XPC)中,紧接着的下一个堆栈单元的位数装入程序指针,并且从新的程序指针指向的单元继续执行程序。该指令自动清除例IDLE操作 1≤K≤执 (PC)+1➔ 被INTM位影响(低功耗方式。不论INTM如何设置,只要有一个不可中断出现,系统就退出空闲状态,如果INTM=1,程序继续执行紧接着IDLE的指令,不会响应中断;如果INTM=0,程序转移到相应的中断服务程序。中断是通过中断寄存器(IMR)设置。K的值决定了可以使从空闲状态中激活的中断类型:K=1定时器和串口等设备在空闲状态时仍有效,此时定时器和串口仍然有输出时钟信号。中断和复位以及外部中断可以激活。K=2定时器和串口中等设备在空闲状态时无效,此时定时器和串口没有输出时钟信号。复位和外部中断可以激活。因为在正常的设备操作条件下,中断在空闲方式下K=3定时器和串口等设备在空闲状态时无效,锁相环PLL被,此时将 操作数0K执 (SP)-1➔SP+1➔TOSK➔1➔ 影响INTM位和IFR位K所确定的中断向量。指令允许使用软件方式执行任何中断服务程1K指定的中断向量装入程序指针,执行该中断服务程序。对中断标志寄存器(IFR)0,对应的中断将被(当INTM=1时。中断寄存器(IMR)不会影响该指令。注意:该指令例INTR LDSmem,LDSmem,TS,LDSmem,16,LDSmem[,SHIFT],LDXmem,SHFT,LD#K,LD#lk[,SHFT],LD#lk,16,LDsrc,ASM[,LDsrc[,SHIFT],操作 Smem:单数据操作Xmem:双数据操作srcdstAA)B累加B)0≤K≤255–32768≤lk≤32–16≤SHIFT≤0≤SHFT≤执行(1)(Smem)(Smem)<<TS➔(Smem)<<16➔(Smem)<<SHIFT➔(Xmem)<<SHFT➔K➔lk<<SHFT➔lk<<16➔(src)<<ASM➔(10)(src)<<SHIFT➔状态位在累加器载入时被SXM位影响例 *AR1,c例 *AR1,TS,例 A,8, Smem, Smem, #k9, #k5, #k3, Smem,操作 Smem:单数据操作0≤k9≤–16≤k5≤0≤k3≤执行(1)(Smem)k9➔k5➔k3➔ 把一个数据器的值或一个短立即数装入T寄存器或状态寄存器中的DP、ASM和ARP位。该指令代码为一个字,但当Smem采用了长偏移直接寻址或绝对地址寻址方式时,指令代码为2个字。例LD*AR4LDMMMR,操作 MMR:映射寄存dstA累加器)B累加器 (MMR)➔dst(15~0)000000h➔dst(39~16) 把器映射寄存器MMR中的值装入到目的累加器中,不论DP的当前内容或ARx9900,该指令不受SXM位的影响。例 AR4, Xmem,||MAC[R]Ymem[,dst_操作 dst:A(累加器 B(累加器dst_dstAdst_BdstBdst_AXmem,Ymem:双数据操作数 (Xmem)<<16➔dst(31~16)If(Rounding)Round(((Ymem)×(T))+(dst_))➔ ((Ymem)×(T))+(dst_)➔ 被SXM位、FRCT位OVM和位影响影响OVdst_位16位双数据器操作数Xmem左移16位后装入目的累加器的高端。同时并行执行YmemTdst_中的操作。如果指令带有R后缀,则对乘积和累加器操作的结果进行四舍五入,再存在dst中。四舍五入的方法是:给该值加上215,然后将结果的(位15~0)清0。 *AR4+, *AR5+, *AR4+, *AR5+,T寄存器和指定的单元中,结果存在累加器中。其中,累加器的低16位做四舍五入运算,最后余下累加器的高16位为两个小数相乘的结果。注意,这里的小数指的是纯小 Smem,操作 Smem:单数据操作dst:A(累加器 B(累加器执 (Smem)<<16+(1<<15)➔ 被SXM位影响把单数据器操作数Smem左移16位后装入目的累加器DST的高端(位31~16)。Smem21514~0015位设置为1。例 *AR1, Smem,操作 Smem:单数据操作dst:A(累加器 B(累加器 (Smem)➔dst(15~0)000000h➔dst(39~16) 把单数据器Smem的值装入目的累加器dst的(位15~0,dst的保护位和高端(39~16)016SXM位的状态如何Smem采用长偏移间接寻址或绝对地址寻址例 *AR1,Xmem, Xmem,Ymem:双数据操作数 (A)+(Xmem)<<16+215➔A(B)+(Xmem)×(Ymem)➔ 被SXM位、FRCT位和OVM位影响影响C位、OVA位和OVB位双数据器操作数Xmem左移动16位后再加上215,将结果送到累加器A中;时执行Xmem与Ymem相乘,将结果送到累加器B中。 *AR3+,*AR4+ h+550000h+215=77CD0888h,结果存在累加器A中,同时执行×AAh+0100h=3972hT寄存器的值,所以一般将最小均分运算所需要的误差放在T寄存器中,用于修改均分运算的系数。操作数Smem:单数据操作数 (Smem)➔T(Smem)➔Smem+状态位无把一个单数据器单元的内容Smem到T寄存器和紧接着的下一个数据单元。指令执行结束后,Smem单元的内容保持不变。该指令一般用于数字信号处理中实现一个Z域的时间延迟。例 Smem, Xmem,Ymem,src[, #lk,src[, Smem,#lk,src[,操作 Smem:单数据操作Xmem,Ymem:双数据操作数srcdstAA)BB)–32768≤lk≤32767执行(1)(Smem)T)(src)(Xmem)×(Ymem)+(src)➔ (Xmem)➔(T)×lk+(src)➔(Smem)×lk+(src)➔ (Smem)➔ 被FRCT位和OVM位影响影响OVdst位R在dst或src中。对于指令的第2和第4种执行情况,紧接着操作码的数据器的值在读操作数阶段放到T寄存器中。例 *AR5+,例 #345h,A,例 *AR5+,*AR6+,A,例 *AR5+,例 *AR5+,*AR6+,A, Smem[, T,src[,操作数Smem:单数据操作srcdstAA)B累加执行(1)(Smem)×(A(32~16))+(B)➔ (Smem)➔(2)(T)×(A(32~16))+(src)➔状态位被FRCTOVM位影响影响OVdst位和OVB位累加器A的高端(位32~16)与一个单数据器操作数Smem或T寄存器中的BA32~16R后缀,结果进行四舍五入运算。例MACA*AR5+例MACATB Smem,pmad,操作 Smem:单数据操作src:A(累加器A) B(累加器B)0≤pmad≤65535 If(RC)≠

(Smem)×(PARPmem的地址单元(srcsrc(Smem)➔T(Smem)➔Smem+1(PAR)+1➔PAR(Smem)×(PARPmem的地址单元(srcsrc(Smem)➔T(Smem)➔Smem+ 被FRCT位和OVM位影响影响OVsrc位一个单数据器值Smem与一个程序器值pmad相乘,结果加到源累加器src中。此外,还把数据器值Smem装入到T寄存器和紧接着Smem地址的下一个数据单元中。循环执行该指令,则程序地址寄存器PAR中的程序器地址执行加1操作。循环例 *AR3–,COEFFS,执行COEFFS的内容和AR3指向的地址单元相乘,并将结果加到累加器A1234h×55h+770000h=7D0B44h。同时将55h分别送到T寄存器和0101h的地址单元AR31 Smem,pmad,操作 Smem:单数据操作src:A(累加器A) B(累加器B)0≤pmad≤65535 If(RC)≠0 (Smem)×(PARPmem的地址单元(srcsrc(Smem)➔T(PAR)+1➔ (Smem)×(PARPmem的地址单元(srcsrc(Smem)➔T 被FRCT位和OVM位影响影响OVsrc位一个单数据值Smem与一个程序器值pmad相乘,结果加到源累加器src中。时把数据器Smem的值到T寄存器中。循环执行该指令,则程序地址寄存器PAR中的程序器地址执行加1操作。该指令和MACD指令只差一步将Smem的值送到Smem的下一个地址单元。MACP*AR3–COEFFS Xmem,Ymem,操作 Xmem,Ymem:双数据操作src:A(累加器 B(累加器 unsigned(Xmem)×signed(Ymem)+(src)➔src(Xmem)➔T 被FRCT位和OVM位影响影响OVsrc位源累加器src中。同时,在读操作数阶段把这个16位无符号的数Xmem存到T寄存器中,XmemD总线上获得,由Ymem寻址的数据从C总线上获得。例 *AR4+,*AR5+,MAR操作 Smem:单数据操作执 If(兼容方式打开)(CMPT=1),If(ARx=AR0或者ARx为空 AR(ARP)被修ARP ARxx➔Else(兼容方式关闭)(CMPT ARP状态 被CMPT位影修改由Smem所确定的辅助寄存器的内容。在兼容方式下(CMPT=1)ARx的内容以及辅助寄存器指针(ARP)的值;在非兼容方式下(CMPT=0),指令只修改辅ARPSmem采用长偏移间接寻址或例 Smem, Xmem,Ymem,src[,操作数Smem:单数据操作Xmem,Ymem:双数据操作srcdstAA)B累加执 (1)(src)–(Smem)×(T)➔(2)(src)-(Xmem)×(Ymem)➔dst(Xmem)➔T状态位FRCTOVM一个器操作数与T寄存器的内容相乘,或者是两个器操作数相乘,再从源srcdstsrcdst中。Xmem在读操作数阶段装入到T寄存器中。如果指令带有R后缀,结果将会进行四舍五入运算。 *AR5+, *AR5+,*AR6+,A, *AR5+, *AR5+,*AR6+,A, Smem[,MASA[R]T,src[,操作 Smem:单数据操作srcdstAA)B累加执 (1)(B)-(Smem)×(A(32~16))➔ (Smem)➔(2)(src)-(T)×(A(32~16))➔状态 被FRCT位和OVM位影OVdst累加器A的高端(位32~16)与一个单数据器操作数Smem或T寄存器相乘,再从例MASA MASAT, T,MAX操作数dst:A(累加器 B(累加器执 If(A> (A)➔dst0➔C (B)➔dst1➔C状态位影响C位比较两累加器的内容,并把较大的一个值存放在目的累加器dst累加器A中,进位位C被清0,否则置为1。例MAX 操作数dst:A(累加器 B(累加器执 If(A< (A)➔dst0➔C (B)➔dst1➔C状态位影响C位比较两累加器值的大小,把较小值存放在目的累加器 A,进位位C被清0,否则置为1。例MIN Smem, Xmem,Ymem, Smem,#lk, #lk,操作 Smem:单数据操作Xmem,Ymem:双数据操作数dst:A(累加器A) B(累加器B)–32768≤lk≤32767执行(1)(T)Smem)(Xmem)×(Ymem)➔dst(Xmem)➔T(Smem)×lk➔(Smem)➔(T)×lk➔状态位被FRCTOVM位影响影响OVdst位T寄存器的值或者一个数据器值,与另一个数据器值或者一个立即数相乘dstSmemXmemT寄存器中。如果指令带有R后缀,结果进行四舍五入运算。例 13,例 *AR2–,*AR4+0%,例 #0FFFEh,例 DATA0, 操作 Smem:单数据操作dst:A(累加器 B(累加器(1)(SmemA(32~16B(Smem)➔T(2)(T)×(A(32~16))➔ 被FRCT位和OVM位影响影响OVdst位累加器A的高端(位32~16)与一个单数据器操作数Smem或T寄存器相乘结果存放在目的累加器dst或累加器B中。在读操作数期间把单数据器操作数例MPYA Smem,操作 Smem:单数据操作dstAA)BB)执行unsigned(T)unsigned(Smem)dst状态位被FRCTOVM位影响OVdst无符号的T寄存器值与无符号的单数据器操作数Smem相乘,结果存放在目的加器dst。乘法器对于该指令来说相当于是其两个操作数的最都为0的一个带符号的17×173264位乘积的多精度乘法时相例MPYU*AR0– Xmem, Xmem,Ymem:双数据操作数 (Xmem)➔Ymem 将Xmem寻址的数据器单元的内容到Ymem寻址的数据器单元中。例MVDD *AR3+,*AR5+ Smem,操作 Smem:单数据操作0≤dmad≤65 (dmad)➔EARIf(RC)➔0 (EAR)+1➔ (Smem)➔(由EAR中的内容所决定的Dmem的地址单元) 把一个单数据器操作数Smem的内容到一个通过dmad(地址由EAB地址寄存器的EAR决定)寻址的数据器单元。可以循环执行该指令来实现数据器中数据块的移动。注意:实际被转移的数据个数比循环计数器中设置的值大1。 *AR3–, dmad,操作 MMR:映射寄存0≤dmad≤65 dmad➔DARIf(RC)➔0 (DAR)+1➔DAR 把数据从一个数据器单元dmad(dmad的值由DAB地址寄存器的DAR决定)复制到一个器映射寄存器MMR中。可以循环执行该指令来实现数据器中数据块的例 300h, Smem,操作 Smem:单数据操作0≤pmad≤65 pmad➔PARIf(RC)≠ (PAR)+1➔PAR 把16位单数据器操作数Smem到一个由16位立即数pmad寻址的程序例 0, dmad,操作 Smem:单数据操作0≤dmad≤65 dmad➔DARIf(RC)≠0 (DAR)+1➔DAR 把数据从一个数据器单元转移到另一个数据器单元。源数据器单元由一个16位立即数dmad寻址,目的数据器单元由Smem寻址。可以循环执行该指令来实例 1000h, MMR,操作 MMR:映射寄存0≤dmad≤65 dmad➔EARIf(RC)≠0 (MMR)➔(EAR中的内容所决定的Dmem的地址单元)(EAR)+1➔EAR 把数据从一个器映射寄存器MMR转移到一个数据器中。可以循环执行该指例 AR7, MMRx,操作 MMRx:AR0~AR7,MMRy:AR0~AR7,执 (MMRx) 把器映射寄存器MMRx中的内容转移到另一个器映射寄存器MMRy中。MMRxMMRy9种操作数:AR0~AR7SPMMRx的操作在译码阶段执行,写MMRy的操作在阶段执行。注意:该指令不能循环执行。例 SP, pmad,操作 Smem:单数据操作0≤pmad≤65 If(RC)≠ (PAR)+1➔PAR 把一个16位立即数pmad寻址的程序器内容到一个由Smem寻址的数据例 2000h,NEGsrc[,操作 src,dst:A(累加器 B(累加器执 (src)×(–1)➔状态 被OVM位影C00,进位位置为。 h,因为8000000000h的补码超过了累加器允许的最大值,该运算将产生溢出。如果OVM=1,目的累加器dst赋值为007FFFFFFFh;如果OVM=0,目的累加器dst赋值为8000000000h。例NEG例NEG操作数无执行无说 src[,操作 src,dst:A(累加器 B(累加器执 (src)<<TS➔状态 src中的有符号数进行归一化,结果存放dstsrcT5~0确定,这6位数值组成一个有符号的整数,有效的移位数是-1~31找符号扩展数的数量级把这个数分成数值部分和指数部分。该指令允许累加器的单周期归EXP就是一例。例NORM B,T寄存器的位5~0为39h,第6位为1,表示负数,取反加1后为7,所以实7位,210A0A0A0Ah>>7=0042141414h Smem, #lk[,SHFT],src[, #lk,16,src[, src[,SHIFT],[, src,dst:A(累加器A) B(累加器B)Smem:单数据操作数0≤SHFT≤–16≤SHIFT≤0≤lk≤65执行(1)(Smem)OR(src(15~0src(39~16)不lk<<SHFTOR(src)➔lk<<16OR(src)➔(srcor[dst])OR(src)<<SHIFT➔ 左移,低位添0,不进行符号扩展。如果右移,直接添0。例 A,+3,ORM#lk,操作 Smem:单数据操作0≤lk≤65执 lkOR(Smem)➔ 单数据器操作数Smem与16位立即数相或,结果存放在Smem中。该指令实现例 0404h, 操作数Smem:单数据操作执 Round(A(32~16)×(T)+(B))➔(Smem)<<16➔状态位被FRCT位、OVMSXM位影响影响OVA位单数据器操作数Smem的内容左移16位,结果存放在累加器B中。同时并行A的高端(32~16)TB中,再对此A中。该指令在多项式计算中为例POLY执行5678h×1234h+10000h=6270060h,将6270060h进行四舍五入得到0000h,存到累加器A中;同时执行将AR3指向的地址单元左移16位后送到累加器B;最后AR3自动加1。该指令一般用于两个纯小数乘法。 操作数Smem:单数据操作数 (TOS)➔Smem(SP)+1➔状态 把由堆栈指针SP寻址的数据器单元的内容转移到由Smem确定的数据器元中,然后堆栈指针SP执行加1操作。例POPD 的值8,表示数据在第8页8页的首地址为400h,加上指令中的十进制常数10,得到 操作数MMR:映射寄存器 (TOS)➔MMR(SP)+1➔状态位无中,然后堆栈指针SP执行加1操作。例POPM PA,操作 Smem:单数据操作0≤PA≤65执 (PA)➔ 从一个外部I/O端口PA(地址为16位立即数)读入16位数据到指定的数据器单元Smem中。IS信号变为低电平来表明DSP在I/O口;IOSTRB和READY的例PORTR 05,60hPORTWI/OI/O元件(AD、DA等)读写。该指令执行时,地址总线和数据总线同时变化,地址总,ISIOSTRB以及READY引脚的信号都会相应变化,以便适合各种不同元件的时 Smem,操作 Smem:单数据操作0≤PA≤65执 (Smem)➔ 将指定的数据器单元Smem中的16位数据写到外部I/O端口PA,IS信号变低电平表明DSP在I/O口;IOSTRB和READY的时序与读外部数据器的时序例 07h, Smem:单数据操作数 (SP)-1➔SP(Smem)➔状态 例PSHD MMR:映射寄存器 (SP)-1➔SP(MMR)➔ 堆栈指针SP执行减1操作后,再把器映射寄存器MMR中的内容压入到堆栈指针SP所指向的数据器单元中去。例 cond[,cond[,执 If (TOS)➔PC(SP)+1➔ (PC)+1➔状态位无当满足给出的条件时,存放在堆栈顶端的数据器的值弹到程序指针C中,堆P1C1操作。如果是延迟返回,紧接着该指令的两条单字指令或一条双字指令取出先执行。先执行这两个指令字不会影响正在被测试的进。例 AGEQ, Smem:单数据操作数 A➔PARIf((RC)≠(PARPmem的地址单元)Smem(PAR)+1➔PAR(RC)–1➔ ➔ 把累加器A确定的程序单元中的一个字传送到一个数据器单元Smem中去。(由累加器A确定起始地址)转移到续的使用间接寻址方式的数据器空间中READA该指令和的WRITA指令,是专门对外部数据空间的读写操作,一般用于外扩的数据元件(RAM、FLASH、EEPROM等)DSPSMSTRB以及READY引脚的信号都会相应变化,以便适合各种不同的元件的时序要求。其中,地址的选择范围各种型号的DSP有所不同,C54xx系列的2316位地址空间时,必须将地址空间数值放到累操作数执 (IPTR)<<C16、FRCT、CMPT、CPL、IFR、HM位清0C、TC、SXM、XF、INTM态。当执行这个复位指令时,就会给上面所列的各种状态位赋值。MP/MC位期间不被取样。 例RESET操作数 (TOS)➔PC(SP)+1➔SP状态位无TOS6CP。如果是延迟返回,紧接着该指令的两条单字指令或一条双字指令取出先执行。注意:该指令不能循例操作 (TOS)➔PC(SP)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论