附录 TMS320C54X汇编语言指令系统

更新时间:2023-11-21 23:46:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

指令系统

TMS320C54x指令系统共有指令130条,由于操作数的寻址方式不同,派生至205条。按指令的功能,可以将C54x指令系统分成4类:算术运算指令、逻辑运算指令、程序控制指令、加载和存储指令。下面分别对各类指令进行介绍。

Ⅰ、算术运算指令

算术运算指令分为加法指令(ADD),减法指令(SUB),乘法指令(MPY),乘加指令(MAC),乘减指令(MAS),双数/双精度指令(DADD,DSUB)和特殊操作指令(ABDST,SQDST)。

1.加法指令

加法指令共有13条,如表1.1.1所示。

表1.1.1 加法指令

语 法 ADD Smem,src ADD Smem ,TS ,src ADD Smem ,16,scr[,dst] 表达式 src=src+Smem src=src+Smem<整数分有符号数和无符号数两种格式,表示有符号数时,其最高位表示符号,最高位为0表示其为正数,1表示为负数;无符号数其最高位仍做为数值位计算。例如,有符号数能够表示的最大的正数为07FFFh,等于32767,而0FFFFH表示最大的负数–1;无符号数不能表示负数,它能够表示的最大的数为0FFFFh,等于十进制数的65535。

小数符号和上面整数的表示一样,但必须注意如何安排小数点的位置。

1

2.减法指令

减法指令共有13条,见表1.1.2所示。

表1.1.2 减法指令

语 法 SUB Smem , src SUB Smem ,TS ,src SUB Smem ,16,scr[,dst] SUB Smem[,SHIFT],src[,dst] SUB Xmem ,SHFT,src SUB Xmem,Ymem,dst SUB #lk[,SHFT],src[,dst] SUB #lk,16,src[,dst] SUB src,[,SHIFT][,dst] SUB src,ASM[,dst] SUBB Smem,src SUBC Smem,src 表达式 src=src-Smem src=src-Smem<乘法指令共有10条,见表1.1.3。

表1.1.3乘法指令

语 法 MPY Smem,dst MPYR Smem,dst MPY Xmem,Ymem,dst 表达式 dst=T*Smem dst=rnd(T*Smem) dst=Xmem*Ymem,T=Xmem 说 明 T寄存器值与操作数相乘 T寄存器值与操作数相乘(带舍入) 两个操作数相乘 字长 1 1 1 周期数 1 1 1

2

续表

语 法 MPY Smem,#lk,dst MPY #1k,dst MPYA dst MPYA Smem MPYU Smem ,dst SQUR Smem,dst SQUR A,dst 表达式 dst=Smem*#lk,T=Smem dst=T*#lk dst=T*A(32~16) B=Smem*A(32~16),T=Smem dst=uns(T)*uns(Smem) dst=Smem*Smem,T=Smem dst=A(32~16)*A(32~16) 说 明 长立即数与操作数相乘 长立即数与T寄存器值相乘 T寄存器与累加器A高位相乘 操作数与累加器A高位相乘 无符号数乘法 操作数的平方 累加器A高位的平方 字长 2 2 1 1 1 1 1 周期数 2 2 1 1 1 1 1 4.乘加和乘减指令

乘加和乘减指令共有22条,见表1.1.4所示。

表1.1.4 乘加和乘减指令

语 法 MAC Smem,src MAC Xmem,Ymem,src[,dst] MAC #lk,src[,dst] MAC Smem,#lk,src[,dst] MACR Smem,src MACR Xmem,Ymem,src[,dst] MACA Smem[,B] MACA T,src[,dst] MACAR Smem[,B] MACAR T,src[,dst] MACD Smem,pmad,src 表达式 src=src+T*Smem dst=src+Xmem*Ymem T=Xmem dst=src+T*#lk dst=src+Smem*#lk T=Smem dst=rnd(src+T*Smem) dst=rnd(src+Xmem*Ymem) T=Xmem B=B+Smem*A(32~16) T=Xmem dst=src+T*A(32~16) B=rnd(B+Smem*A(32~16)) T=Smem dst=rnd(src+T*A(32~16)) src=src+Smem*pmad T=Smem,(Smem+1)=Smem 说 明 操作数与T寄存器值相乘后加至累加器 两个操作数相乘后加至累加器 长立即数与T寄存器值相乘后加至累加器 长立即数与操作数相乘后加至累加器 操作数与T寄存器值相乘后加至累加器(带舍入) 两个操作数相乘后加至累加器(带舍入) 操作数与累加器A高位相乘后加至累加器B T寄存器值与累加器A高位相乘 T值与累加器A高位相乘后加至累加B(带舍入) A高位与T值相乘后与源累加器相加(带舍入) 操作数与程序存储器值相乘后累加并延迟 字周期长 数 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 1 3

3

续表

语 法 MACP Smem,pmad,src MACSU Xmem,Ymem,src MAS Smem,src MASR Xmem,Ymem,src[,dst] MAS Xmem,Ymem,src[,dst] MASR Smem ,src MASA Smem[,B] MASA T,src[,dst] MASAR T,src[,dst] SQURA Smem ,src SQURS Smem ,src 表达式 Src=src+Smem * pmad T=Smem src=src+uns(Xmem) * Ymem T=Xmem src=src-T * Smem dst=rnd(src-Xmem * Ymem) T=Xmem dst=src-Xmem * Ymem T=Xmem src=rnd(src-T * Smem) B=B-Smem * A(32~16) T=Smem dst=src-T * A(32~16) dst=rnd(src-T * A(32~16)) src=src+Smem * Smem T=Smem src=src-Smem * Smem T=Smem 说 明 操作数与程序存储器值相乘后加至累加器 无符号数与有符号数相乘后加至累加器 从累加器中减去T寄存器值与操作数的乘积 从累加器中减去两操作数的乘积(带舍入) 从源累加器中减去两操作数的乘积 从累加器中减去T值与操作数的乘积(带舍入) 从累加器B中减去操作数与累加器A高位的乘积 从源累加器中减去T寄存器值与累加器A高位乘积 从源中减去T寄存器值与累加器A高位乘积(带舍入) 操作数平方并累加 从累加器中减去操作数的平方 字周期长 数 2 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 5.双操作数指令

双操作数指令共有6条,见表1.1.5所示。

表1.1.5双操作数指令

语 法 表达式 说 明 字长 1 周期数 1 DADD Lmem,src[,dst] if C16=0 ,dst=Lmem+src 双精度/双16位数if C16=1 加至累加器 dst(39~16)=Lmem(31~16)+src(31~16) dst(15~0)=Lmem(150)+src(15~0) 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寄存器值相加/减 DADST Lmem,dst 1 1

4

续表

语 法 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) I C16=0,dst=Lmem-(T<<16+T) If C16=1 dst(39~16)=Lmem(31~16)-T dst(15~0)=Lmem(15~0)+T 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) 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 说 明 双精度/双6位数中减去累加器值 字长 1 周期数 1 DSADT Lmem,dst 长操作数与T寄存器值相加减 1 1 DSUB Lmem,src 从累加器中减去双精度/双16位数 1 1 DSUBT Lmem,dst 从长操作数中减去T寄存器值 1 1 6.特殊应用指令

特殊应用指令共有15条,见表1.1.6所示。

表1.1.6 特殊应用指令

语 法 表达式 B=B+|A(32~16)|, A=(Xmem–Ymem)<<16 dst=|src| dst=src (Smem+1)=Smem T=number of sign bits(src)–8 B=B+A*pamd, A=(Xmem+Ymem)<<16 B=B+Xmem*Ymem, A=(A+Xmem<<16)+215 dst=max(A,B) dst=min(A,B) dst=-src 说 明 字长 1 1 1 1 1 2 1 1 1 1 周期数 1 1 1 1 1 3 1 1 1 1 ABDST Xmem,Ymem ABS src[,dsst] CMPL src[,dst] DELAY Smem EXP src FIRS Xmem,Ymem.pmand LMS Xmem,Ymem MAX dst MIN dst NEG src[,dst] 绝对距离 累加器值取绝对值 累加器取反 存储器单元延迟 求累加器中数据的指数 对称FIR滤波 求最小均方值 求累加器(A,B)最大值 求累加器(A,B)最小值 累加器取反

5

续表

语 法 NORM src[,dst] PLOY Smem RND src[,dst] SAT src SQDST Xmem,Ymem 表达式 dst=src<

逻辑运算指令包括与指令(AND),或指令(OR),异或指令(XOR),移位指令(ROL)和测试指令(BITF)。

1.与指令

与指令共5条,见表2.2.1。

表2.2.1与指令

语 法 AND Smem ,src AND #lk[,SHFT],src[,dst] AND #lk,16,src[,dst] AND src[,SHIFT][,dst] ANDM #lk,Smem 表达式 src=src&Smem dst=src&#lk<

或指令共5条,见表2.2.2。

表2.2.2 或指令

语 法 OR Smem,src OR #lk[,SHFT],src[,dst] OR #lk 16, src [,dst] OR src[,SHIFT][,dst] ORM #lk,Smem 表达式 src=src|Smem dst=src|#lk<

6

3.异或指令

异或指令共5条,见表2.2.3。

表2.2.3 异或指令

语 法 XOR Smem,src XOR #lk[,SHFT],src[,dst] XOR #lk,16,src[,dst] XOR src[,SHIFT][,dst] XORM #lk,Smem 表达式 src=src∧Smem dst=src∧#lk<

移位指令共6条,见表2.2.4。

表2.2.4 移位指令

语 法 表达式 Rotate left with carry in Rotate left with TC in Rotate right with carry in dst=src<

测试指令共5条,见表见表2.2.5。

表2.2.5测试指令

语 法 BIT Xmem,BITC BITF Smem,#lk BITT Smem CMPM Smem,#lk CMPR CC,ARx 表达式 TC=Xmem(15-BITC) TC=(Smem&#lk) TC=Smem(15-T(3-0)) TC=(Smem==#lk) Compare ARx with AR0 说 明 测试指定位 测试由立即数指定的位 测试由T寄存器指定的位 存储单元与长立即数比较 辅助寄存器ARx与AR0比较 字长 1 2 1 2 1 周期数 1 2 1 2 1 7

Ⅲ、 程序控制指令

程序控制指令包括分支指令(B,BC),调用指令(CALL),中断指令(INTR,TRAP),返回指令(RET),重复指令(RPT),堆栈操作指令(FRAME,POP),其它程序控制指令(IDLE,NOP)。分别例于下列表中。

1.分支指令

分支指令共6条,见表3.3.1。

表3.3.1分支指令

语 法 B[D] pmad BACC[D] src BANZ[D] pmad, Sind BC[D] pmad,cond [cond[,cond]] FB[D] extpmad 表达式 PC=pmad(15~0) PC=src(15~0) if(Sind(s)≠0) then PC=pmad(15~0) if(cond(s)) then PC=pmad(15~0) PC=pmad(15~0) , XPC=pmad(22~16) 说 明 无条件分支转移 按累加器规定地址转移 辅助寄存器不为0转移 条件分支转移 字长 2 1 2 2 2 周期数 4/[2*] 6/[4*] 4?/2§/[2*] 5?/3§/[3*] 4/[2*] 无条件远程分支转移 FBACC[D] src PC=src(15~0) , XPC=src(22~16) 按累加器的地址远程分支转移 1 6/[4*] ?条件为真,§条件为假,*延迟指令 2.调用指令

调用指令共5条,见表3.3.2。

表3.3.2 调用指令

语 法 CALA[D] src CALL[D] pmad CC[D] pmad,cond[cond[,cond]] FCALA[D] src 表达式 --SP=PC PC=src(15~0) --SP=PC PC=pmad(15~0) 说 明 按累加器的地址调子程序 无条件调用子程序 字长 1 2 2 1 周期数 6/[4*] 4/[2§] 5?/3§/[3*] 6/[4*] if(cond(s)) then --SP=PC 有条件调用子程序 PC=pmad(15~0) --SP=PC,--SP=XPC PC=src(15~0) XPC=src(22~16) --SP=PC,--SP=XPC PC=pmad(15~0) XPC=pmad(22~16) 按累加器的远程调子程序 无条件远程调用子程序 FCALL[D] extpmad 2 4[2*]

8

3.中断指令

中断指令有2条,见下表。

表3.3.3中断指令

语 法 INTR K 表达式 --SP=PC PC=IPTR(15~7)+K<<2 INTM=1 --SP=PC PC=IPTR(15~7)+K<<2 说 明 非屏蔽软件中断,关闭其他可屏蔽中断 非屏蔽软件中断,不影响INTM位 字长 1 周期数 3 TRAP K 1 3 4.返回指令

返回指令共有6条,见下表。

表3.3.4 返回指令

语 法 FRET[D] FRETE[D] RC[D] cond[,cond[ ,cond]] RET[D] RETE[D] RETF[D] 表达式 XPC=SP++,PC=SP++ XPC=SP++,PC=SP++ INTM=0 If(cond(s)) then PC=SP++ PC=SP++ PC=SP++,INTM=0 说 明 远程返回 开中断,从远程中断返回 条件返回 返回 开中断,从中断返回 字长 1 1 1 1 1 1 周期数 6/[4*] 6/[4*] 5?/3§/[3*] 5/[3*] 5/[3*] 3/[1*] PC=RTN,SP++,INTM=0 开中断,从中断快速返回 5.重复指令

重复指令共5条,见下表。

表3.3.5 重复指令

语 法 RPT Smem RPT #k RPT #lk RPTB[D] Pmad RPTZ dst,#lk 表达式 重复执行一条指令, RC=Smem 重复执行一条指令, RC=#K 重复执行一条指令, RC=#lk 重复执行一段指令 RSA=PC+2[4],REA=pmad–1 说 明 重复执行下条指令(Smem)+l次 重复执行下条指令K+l次 重复执行下条指令#lk+l次 块重复指令 字长 1 1 2 2 2 周期数 1 1 2 4/[2*] 2 重复执行一段指令,RC=#lk,dst=0 重复执行下条指令,累加器清0 6.堆栈操作指令

堆栈操作指令共5条,见下表。

9

表3.3.6堆栈操作指令

语 法 FRAME K POPD Smem POPM MMR PSHD Smem PSHM MMR 表达式 SP=SP+k, –128≤K≤127 Smem= SP++ MMR= SP++ --SP=Smem --SP=MMR 说 明 堆栈指针偏移一个立即数值 从栈顶弹出数据至数据存储器 将数据从栈顶弹出至MMR 将数据压入堆栈 将MMR压入堆栈 字长 周期数 1 1 1 1 1 1 1 1 1 1 7.其它程序控制指令

其它程序控制指令共7条,见下表。

表33.7 其它程序控制指令

语 法 IDLE K MAR Smem 表达式 idle(K), 1≤K≤3 if CMPT=0,then modify ARx, ARP is unchanged if CMPT=1 and ARx≠AR0, Then modify ARx ,ARP=x if CMPT=1 and ARx=AR0 Then modify AR(ARP), ARP is unchanged 说 明 保持空转状态,直到中断发生 修改辅助寄存器 字长 1 1 周期数 4 1 NOP RESET RSBX N,SBIT SSBX N,SBIT XC n,cond[,cond[,cond]] no opration software reset STN(SBIT)=0 STN(SBIT)=1 if(cond(s))then execute the next instructions;n=1 or 2 空操作 软件复位 状态寄存器指定位复位 状态寄存器指定位置位 有条件执行 1 1 1 1 1 1 3 1 1 1 Ⅳ、 加载和存储指令

加载和存储指令包括一般的加载和存储指令(LD,ST),条件存储指令(CMPS,SACCD),并行的读取和乘法指令(LD‖MAC),并行的读取和存储指令(LD‖ST),并行的存储和乘法指令(ST‖MAC),并行的读取和加减指令(LD‖ADD,LD‖SUB)以及其他读取类型和存储类指令(MVDD,PORTW,READA)。

1.加载指令

加载指令共21条,见下表。

10

表4.4.1 加载指令

语 法 DLD Lmem,dst LD Smem,dst LD Smem, TS, dst LD Smem, 16, dst LD Smem[,SHIFT],dst LD Xmem, SHFT, dst LD #K, dst LD #lk[,SHFT], dst LD #lk, 16, dst LD src,ASM[,dst] LD src[,SHIFT][,dst] LD Smem, T LD Smem, DP LD #k9, DP LD #k5, ASM LD #k3, ARP LD Smem, ASM LDM MMR, dst LDR Smem,dst LDU Smem, dst LTD Smem 表达式 dst=Lmem dst=Smem dst=Smem<2.存储指令

存储指令共14条,见下表。

11

表4.4.2 存储指令

语 法 DST src,Lmem ST T, Smem ST TRN, Smem ST #lk, Smem STH src, Smem STH src, ASM, Smem STH src, SHFT, Xmem STH src[,SHIFT],Smem STL src, Smem STL src, ASM, Smem STL src, SHFT, Xmem STL src[,SHIFT], Smem STLM src, MMR STM # lk, MMR Lmem=src Smem=T 表达式 说 明 累加旗值存至长字单元中 存储T寄存器值 存储TRN寄存器值 存储长立即数 存储累加器高位 累加器高位按ASM移位后存储 累加器高位移位后存储 累加器高位移位后存储 存储累加器低位 累加器低位按ASM移位后存储 累加器低位移位后存储 累加器低位移位后存储 累加器低位存至MMR 长立即数存至MMR 字长 1 1 1 2 1 1 1 2 1 1 1 2 1 2 周期数 2 1 1 2 1 1 1 2 1 1 1 2 1 2 Smem=TRN Smem=#lk Smem=src(31~16) Smem=src(31~16)<<(ASM) Xmem=src(31~16)<<(SHFT) Smem=src(31~16)<<(SHIFT) Smem=src(15~0) Smem=src(15~0)<

条件存储指令有4条,见下表。

表4.4.3 条件存储指令

语 法 CMPS src, Smem 表达式 if src(31~16)>src(15~0) then Smem=src(31~16) if src(31~16)≤src(15~0) then Smem=src(15~0) 说 明 比较选择并存储最大值 字长 1 周期数 1 SACCD src,Xmem,cond SRCCD Xmem,cond STRCD Xmem,cond if(cond) Xmem=src<<(ASM–16) if(cond) Xmem=BRC if(cond) Xmem=T 有条件存储累加器值 有条件存储块重复计数器 有条件存储T寄存器值 1 1 1 1 1 1 4.并行加载和存储指令

并行加载和存储指令有2条,见下表。

12

表4.4.4并行加载和存储指令

语 法 ST src,Ymem ‖LD Xmem,dst ST src,Ymem ‖LD Xmem, T 表达式 Ymem=src<<(ASM–16) ‖dst=Xmem<<16 Ymem=src<<(ASM–16) ‖T=Xmem 说 明 存储累加器并行加载累加器 存储累加器并行加载T寄存器 字长 1 1 周期数 1 1 5.并行加载和乘法指令

并行加载和乘法指令有4条,见下表。

表4.4.5并行加载和乘法指令

语 法 LD Xmem , dst ‖MAC Ymem , dst_ LD Xmem , dst ‖MACR Ymem , dst_ LD Xmem,dst ‖MAS Ymem,dst_ LD Xmem,dst ‖MASR Ymem,dst_ 表达式 dst=Xmem<<16 ‖dst_=dst_+T*Ymem dst=Xmem<<16 ‖dst_=rnd(dst_+T*Ymem) dst=Xmem<<16 ‖dst_=dst_-T*Ymem dst=Xmem<<16 ‖dst_=rnd(dst_-T*Ymem) 说 明 加载累加器并行乘法累加运算 加载累加器并行乘法累加运算(可凑整) 加载累加器并行乘法减法运算 加载累加器并行乘法减法运算(可凑整) 字长 1 1 1 1 周期数 1 1 1 1 6.并行存储和加减指令

并行存储和加载指令有2条,见下表。

表4.4.6 并行存储和加减指令

语 法 ST src , Ymem ‖ADD Xmem , dst ST src , Ymem ‖SUB Xmem , dst 表达式 Ymem=src<<(ASM-16) ‖dst=dst_+Xmem<<16 Ymem=src<<(ASM-16) ‖dst=(Xmem<<16)-dst_ 说 明 存储累加器值并行加法运算 存储累加器值并行减法运算 字长 1 1 周期数 1 1 7.并行存储和乘法指令

并行存储和乘法指令有5条,见下表。

表4.4.7并行存储和乘法指令

语 法 表达式 Ymem=src<<(ASM–16) ‖dst=dst+T*Xmem Ymem=src<<(ASM–16) ‖dst=rnd(dst+T*Xmem) Ymem=src<<(ASM–16) ‖dst=dst-T*Xmem 说 明 存储累加器并行乘法累加运算 存储累加器并行乘法累加运算(带凑整) 存储器累加器并行乘减法运算 字长 周期数 1 1 1 1 1 1 ST src , Ymem ‖MAC Xmem , dst ST src , Ymem ‖MACR Xmem , dst ST src , Ymem ‖MAS Xmem , dst 13

续表

语 法 表达式 Ymem=src<<(ASM–16) ‖dst=rnd(dst-T*Xmem) Ymem=src<<(ASM–16) ‖dst=T*Xmem 说 明 存储累加器并行乘法累加运算(带凑整) 存储累加器并行乘法运算 字长 1 1 周期数 1 1 ST src , Ymem ‖MASR Xmem , dst ST src , Ymem ‖MPY Xmem , dst 8.其它存储和加载指令

有12条其它存储和加载指令,见下表。

表4.4.8 其它存储和加载指令

语 法 MVDD Xmem, Ymem MVDK Smem, dmad MVDM damd, MMR MVDP Smem, pmad MVKD dmad , Smem MVMD MMR , dmad MVMM MMRx , MMRy MVPD pmad , Smem PORTR PA , Smem PORTW Smem , PA READA Smem WRITA Smem 表达式 Ymem=Xmem dmad=Smem MMR=damd Pmad=Smem Smem=dmad dmad=MMR MMRy=MMRx Smem=pmad Smem=PA PA=Smem Smem=Pmem(A) Pmem(A)=Smem 说 明 数据存储器内部间数据传送 数据存储器内部指定地址传送数据 数据存储器向MMR传送数据 数据存储器向程序存储器传送数据 数据存储器内部指定地址传送数据 MMR向指定地址传送数据 MMRx向MMRy传送数据 程序存储器向数据存储器传送数据 从PA口读入数据 向PA口输出数据 按累加器A寻址读程序存储器并存入数据存储器 将数据按累加器A寻址写入程序存储器 字长 1 2 2 2 2 2 1 2 2 2 1 1 周期数 1 2 2 4 2 2 1 3 2 2 5 5 Ⅴ、 重复执行单条指令

重复执行单条指令是将下一条指令重复执行(RC)+1次,最多为65 536次,使用重复执行指令功能时,绝对的程序和数据地址是自动增加的。

当重复指令被解码时,所有中断(包括NMI,不包括RS)均被屏蔽,直到重复指令执行完毕。但是在响应重复执行循环中响应HOLD信号,不管状态寄存器ST1中的HM为何值。

重复指令可以使被重复的指令由多周期指令变成单周期指令,表3.30列出了这些指令。 使用长偏移地址或绝对地址的单数据操作数指令不能用于重复指令,如使用*ARn(lk)、*+ARn(lk)、*+ARn(lk)%和*(lk)寻址的指令。

不能使用RPT或RPTZ指令循环执行的指令有36条,见表3.31。

14

表.5.1 重复执行时由多周期指令变成单周期指令的指令

指 令 FIRS MACD MACP MVDK MVDM MVDP MVKD MVMD MVPD READA WRITA 有限冲击响应滤波器 带延时的乘累加 乘累加 数据存储器之间数据传送 数据存储器数据送到存储器映像寄存器中 数据存储器数据传送到程序存储器 数据存储器之间数据传送 存储器映像寄存器中数据传送到数据存储器中 程序存储器中数据传送到数据存储器中 从程序存储器读数到数据存储器 把数据存储器中的数据写到程序存储器中 表.5.2不能使用RPT或RPTZ指令重复指令的指令

指 令 ADDM ANDM B[D] BACC[D] BANZ[D] BC[D] CALA[D] CALL[D] CC[D] CMPR DST FB[D] FBACC[D] FCALA[D] FCALL[D] FRET[D] 说 明 加长立即数到数据存储器中 把数据存储器与长立即数相与 无条件跳转 跳转到累加器地址 辅助寄存器不为0跳转 条件转移 调用累加器地址 无条件调用 条件调用 和辅助寄存器相比较 长字(32位)数据存储 无条件远程跳转 远程跳转到累加器所指地址 远程调用子程序,地址由累加器指定 无条件远程调用 远程返回 INTR LD ARP LD DP MVMM ORM RC[D] RESET RET[D] RETF[D] RND RPT RPTB[D] RPTZ RSBX SSBX TRAP 指令 中断 加载辅助寄存器指针 加载数据页指针 MMR之间数据移动 数据存储器与长立即数相与 条件返回 软件复位 无条件返回 从中断返回 累加器凑整 重复执行下一条指令 块重复 重复执行下一条指令并清除累加器 状态寄存器的位复位 状态寄存器的位置位 软件中断 说明 说 明 周 期 3 3 3 2 2 4 2 2 3 5 5 15

续表

指 令 FRETE[D] IDLE 说 明 中断使能并从中断中远程返回 省电指令 XC XORM 指令 条件执行 长立即数和数据存储器相异或 说明 Ⅵ、 指令介绍及举例

本节详细介绍了TMS320C54x系列指令集,该指令集支持大量的信号处理操作及通用操作,如多重处理和高速控制等。TMS320C54x提供两种指令,一是汇编指令,另一种是代数指令。汇编指令类似指令助记符,代数指令接近汇编指令,但更便于理解。TMS320C54x开发平台都支持两种指令编程和调试,也支持汇编指令和代数指令互相转换。下面所有举例都列出了两种表达方式,前面是汇编指令表达方式,后面为代数指令表达方式。 1. ABDST

语法: 汇编指令方式 代数指令方式

ABDST Xmem, Ymem abdst(Xmem,Ymem)

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 0 0 0 1 1 X X X X Y Y Y Y 执行:(B)+|A(32~16)|→B ((Xmem)-(Ymem))<<16 →A

受OVM,FRCT和SXM影响;影响C,OVA,OVB。

说明:计算两向量Xmem, Ymem之差的绝对值。累加器A(32~16)的绝对值加到累加器B中。Xmem减Ymem之差左移16位送到累加器A中。若分数方式位为1(FRCT=1),则绝对值乘2。

指令字长:1个字。 周期数:1个周期。

【例】ABDST *AR3+,*AR4+ (abdst (*AR3+,*AR4+))

Before Instruction After Instruction A FF ABCD 0000 A FF FFAB 0000 00 0000 5433 B 00 0000 0000 B 0100 AR3 AR3 0101 0200 AR4 AR4 0201 0 FRCT FRCT 0 数据存储器

0100h 0055 0100h 0055 0200h 00AA 0200h 00AA 2.ABS

语法: 汇编指令方式 代数指令方式

ABS src[,dst] dst=|src|

16

操作码:

15 14 13 12 11 10 9

8

7

6

5

4

3

2

1

0

1 1 1 1 0 1 S D 1 0 0 0 0 1 执行:| (src) | → dst (or src if dst is not specified)

受OVM位影响方式如下:

若OVM =1,80 0000 0000h的绝对值为00 7FFF FFFFh; 若OVM =0,80 0000 0000h的绝对值为80 0000 0000h。 影响C, OVdst

说明:计算src的绝对值,然后装入dst中。 指令字长:1个字。 周期数:1个周期。

【例1】 ABS A,B (B=∣A|)

Before Instruction After Instruction A FF FFFF FFCB –53 A FF FFFF FFCB FF FFFF FC18 B –1000 B 00 0000 0035 【例2】 ABS A (A=|A|)

Before Instruction After Instruction A 03 1234 5678 A 00 7FFF FFFF OVM 1 OVM 1 【例3】 ABS A (A=|A|)

Before Instruction After Instruction A 03 1234 5678 A 03 1234 5678 OVM 0 OVM 0 3. ADD

语法:汇编指令方式 代数指令方式

(1)ADD Smem, src src=src+Smem或

src+=Smem

(2)ADD Smem,TS,src src=src+Smem<<TS或

src+=Smem<<TS

(3)ADD Smem,16,src[,dst] dst=src+Smem<<16或

dst+= Smem<<16

(4)ADD Smem[,SHIFT],src[,dst] dst=src+Smem[<<SHIFT] 或

dst+=Smem[<<SHIFT]

(5)AAD Xmem,SHFT,src src=src+Xmem<<SHFT或

src+= Xmem<<SHFT

(6)ADD Xmem,Ymem,dst dst=(Xmem+Ymem)<<16 (7)ADD #lk[,SHFT],src[,dst] dst=src+# lk[<<[SHFT] 或

dst+=# lk[<<SHFT]

(8)ADD #lk,16,src[,dst] dst=src+# lk<<16或

dst+=# lk<<16

(9)ADD src[,SHIFT],[,dst] dst=dst+src[<<SHIF] 或

dst+= src[<<SHIFT]

17

0 1 –53 ﹢53

dst=dst+src<<ASM或 dst+= src<<ASM

–32 768≤lk≤32 767, –16≤SHIFT≤15,0≤SHFT≤15 操作码: (1)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 0 0 0 0 0 0 0 S I A A A A A (2)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 0 0 0 0 0 1 0 S I A A A A A (3)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 0 0 1 1 1 1 S D I A A A A A (4)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 0 1 1 0 1 1 0 1 I A A A A A 0 0 0 0 1 1 S D 0 0 0 S H I (5)

15 14 13 12 11 10 9 8 7 1 0 0 1 0 0 0 S X (6)

15 14 13 12 11 10 9 8 7 6 1 0 1 0 0 0 0 S X X (7)

15 14 13 12 11 10 9 8 7 6 1 1 1 1 0 0 S D 0 0 16位常数 (8)

15 14 13 12 11 10 9 8 7 6 1 1 1 1 0 0 S D 0 0 16位常数 (9)

5 0 4 0 3 S 2 H 5 0 4 0 3 S 2 H 5 X 4 X 3 Y 2 Y 6 5 X X 4 X 3 S 2 H (10)ADD src,ASM[,dst]

1 0 A A 1 0 A A 1 0 A A 1 0 A A F T 1 F 1 Y 1 F 1 F 0 T 0 T 0 Y 0 T 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 1 1 1 1 0 1 S D 0 0 0 S H I F (10)

0 T 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 1 S D 1 0 0 0 0 0 0 0 执行:

(1)(Smem)+(src)→src (2)(Smem)<<(TS)+(src)→src (3)(Smem)<<16+(src)→dst (4)(Smem)[<<SHIFT]+(src)→dst (5)(Xmem)<<SHFT+(src) →src

18

(6)((Xmem)+(Ymem))<<16 →dst (7)lk<<SHFT+(src)→dst (8)lk<<16+(src)→dst (9)(src or [dst])+(src)<<SHIFT→dst (10)(src or [dst])+(src)<<ASM→dst 受SXM和OVM位影响。影响C。

说明:该指令将一个16位数加到选定的累加器中或一个采用双数据存储器操作数寻址的16位操作数Xmem中。被加的数值可为下列各操作数之一:

● 单数据存储器操作数(Smem); ● 双数据存储器操作数(Ymem); ● 16位立即数(#lk); ● src中移位后的值。

如果定义了dst,结果就存在dst中;否则,存在src中。大部分第二操作数要移位。当进行左移时,低位舔0,高位如下:如果SXM=1,则进行符号扩展;如果SXM=0,则清0。 对于右移,高位如下:如果SXM=1,则进行符号扩展;如果SXM=0,则清0。

指令字长:指令1、2、3、5、6、9和10:一个字。指令4、7和8:2个字。 当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。

周期数:指令1、2、3、5、6、9和10:一个周期。指令4、7和8:2个周期。 当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。 【例1】 ADD AR3+,14,A ( A=A + *AR3 + << 14 )

Before Instruction After Instruction A 00 0000 1200 A 00 0540 1200 C 1 C 0 AR3 0100 AR3 0101 SXM 1 SXM 1 Data Memory 0100h 1500 0100h 1500 【例2】 ADD A, –8, B (B=B+A<<–8)

Before Instruction After Instruction A 00 0000 1200 A 00 0000 1200 B 00 0000 1800 B 00 0000 1812 C 1 C 0 注:#4568=#11D8h

4. ADDC

语法:汇编指令方式 代数指令方式

ADDC Smem, src src = src + Smem + CARRY或 src+ = Smem + CARRY 操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 0 1 1 S I A A A A A A A 19

执行:(Smem)+(src)+(C)→src

受OVM,C的影响。影响C和OVsrc

说明:把16位单数据存储器操作数Smem和进位位C的值加到src中,结果存在src中。无论SXM位的值是什么都不进行符号位扩展。

指令字长:1个字。当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。 周期数:1个周期。当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。 【例】ADDC *+AR2(5),A ( A = A + *+AR2(5)+CARRY )

Before Instruction After Instruction A 00 0000 0013 A 00 0000 0018 C 1 C 0 AR2 0100 AR2 0105 Data Memory 0105h 0004 0105h 0004 5.ADDM

语法:汇编指令方式 代数指令方式

ADDM # lk, Smem Smem=Smem+# lk或 Smem+=# lk 操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 1 0 1 0 1 1 I A A A A A A A 16位常数 执行:# lk+(Smem) →Smem 受OVM和SXM影响。影响C和OVA。

说明:16位单数据存储器操作数Smem与16位立即数lk相加,结果存在Smem中。该指令不能循环执行。

指令字长:2个字。当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。 周期数:2个周期。当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。 【例1】 ADDM 0123Bh, *AR4+ ( AR4+ = *AR4+ + #0123Bh )

Before Instruction After Instruction AR4 0100 AR4 0101 DataMemory 0100h 0004 0100h 123F 【例2】ADDM 0FFF8h,*AR4+ ( *AR4+ = *AR4+ + #0FFF8h )

Before Instruction After Instruction OVM 1 OVM 1 SXM 1 SXM 1 AR4 0100 AR4 0101 Data Memory 0100h 8007 0100h 8000 6.ADDS

语法:汇编指令方式 代数指令方式

20

说明:把一数据存储器值或一立即数装入累加器,并支持各种不同的移位。另外,指令支持带移位的累加器到累加器的搬移。

0≤K≤255; –32 768≤lk≤32 767; –16≤SHIFT≤15; 0≤SHFT≤15 指令字长:指令1、2、3、5、6、9和10:1个字。

指令4、7和8:2个字。

当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。

周期数:指令1、2、3、5、6、9和10:1个周期。

指令4、7和8:2个周期。

当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。

【例】LD *AR1,A ( A = *AR1 )

Before Instruction After Instruction A 00 0000 0000 A 00 0000 FEDC SXM 0 SXM 0 AR1 0200 AR1 0200 数据存储器

0200 h FEDC 0200h FEDC 44. LD

语法:汇编指令方式 代数指令方式

T = Smem (1)LD Smem,T

DP = Smem (2)LD Smem,DP

DP = # k9 (3)LD #k9,DP

ASM = # k5 (4)LD #k5,ASM

ARP = # k3 (5)LD #k3,ARP

ASM = Smem (6)LD Smem,ASM

操作码:

(1)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 1 1 0 0 0 0 I A A A A A A A (2)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 0 0 1 1 0 I A A A A A A A (3)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 0 1 0 1 K K K K K K K K K (4)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 0 1 1 0 1 0 0 0 K K K K K (5)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 1 0 0 1 0 1 0 0 K K K (6)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 1 1 0 0 1 0 I A A A A A A A

46

执行:

(1)Smem)→T

(2)(Smem(8~0)) →DP (3)k9→DP (4)k5→ASM (5)k3→ARP

(6)(Smem(4~0)) →ASM 不影响任何状态位。

说明:把一个数装入T寄存器或状态寄存器ST0或ST1中的DP,ASM和ARP域。装入的数可以是一个单数据存储器操作数Smem或一个常数。该指令代码为一个字,但当Smem采用了长偏移直接寻址或绝对寻址方式时,指令代码为2个字。

指令字长:1个字。当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。 周期数:指令1、3、4、5和6:1个周期;指令2:1个周期。当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。 【例1】LD *AR3+,T ( T = *AR3+ )

Before Instruction After Instruction T 0000 T FEDC AR3 0300 AR3 0301 Data Memory 0300 h FEDC 0300h FEDC 【例2】LD #23,DP ( DP = #23 )

Before Instruction After Instruction DP 1FF DP 017 45.LDM

语法:汇编指令方式 代数指令方式

LDM MMR , dst dst = MMR或 dst = mmr (MMR ) 操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 0 1 0 0 D I A A A A A A A 执行:(MMR)→dst

不影响任何状态位。

说明:把存储器映射寄存器MMR中的值装入目的累加器dst中。无论DP或ARx的高9位的值为何值,有效地址的高9位都清0,即指定到0数据页中。该指令不受SXM的影响。 【例1】 LDM AR4,A ( A = AR4 )

Before Instruction After Instruction A 00 0000 1111 A 00 0000 FFFF AR4 FFFF AR4 FFFF 【例2】] LDM 060h, B ( B = mmr (060h) ) Before Instruction After Instruction B 00 0000 0000 B 00 0000 1234 47

Data Memory

060h 1234 060h 1234 46. LD║MAC[R] 语法:汇编指令方式 代数指令方式

LD Xmem,dst (1)dst = Xmem<<16 ║dst_= dst_ + T * Ymem

║MAC[R] Ymem[,dst]

(2)dst = Xmem<<16║dst_+ = T * Ymem

(3)dst = Xmem<<16║dst_= rnd( dst_ + T * Ymem) 操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 0 1 0 1 0 R D X X X X Y Y Y Y 执行:(Xmem)<<16→dst(31~16)

If (Rounding)

Round(((Ymem)×(T))+(dst_))→dst_ Else

((Ymem)×(T))+(dst_)→dst_

受SXM,FRCT和OVM的影响。影响OVdst_。

说明:16位双数据存储器操作数Xmem左移16位后装入目的累加器dst的高端(32~16)。同时并行执行一双数据存储器操作数Ymem与T寄存器的值相乘再把乘积加到dst_中的操作。若使用后缀R,可以对乘积和累加操作的结果凑整,再存在dst_中。凑整的方法是:给该值加上215,然后把结果的低端(15~0)清0。 指令字长:1个字。 周期数:1个周期。

【例】 LD *AR4+,A║MACR *AR5+,B ( A = *AR4+║B = rnd( B + *AR5+ * T ))

Before Instruction After Instruction A 00 0000 1000 A 00 1234 0000 B 00 0000 1111 B 00 010D 0000 T 0400 T 0400 FRCT 0 FRCT 0 AR4 0100 AR4 0101 AR5 0200 AR5 0201 Data Memory 0100 h 1234 0100 h 1234 0200h 4321 0200h 4321 47.LD║MAS[R]

语法:汇编指令方式 代数指令方式

LD Xmem,dst (1)dst = Xmem[<<16=║dst_= dst_ – T * Ymem

║MAS[R] Ymem[,dst_] (2)dst = Xmem[<<16= ║dst_= T * Ymem

(3) dst = Xmem[<<16= ║dst_= rnd(dst_ – T * Ymem)

操作码:

48

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 0 1 0 1 1 R D X X X X Y Y Y Y 执行:(Xmem)<<16→dst(31~16)

If (Rounding)

Round((dst_) – ((Ymem)×(T)))→dst_ Else

(dst_)– ((Ymem)×(T))→dst_

受SXM,FRCT和OVM的影响。影响OVdst_。

说明:16位双数据存储器操作数Xmem左移16位后装入目的累加器dst的高端(32~16)。同时并行执行一双数据存储器操作数Ymem与T寄存器的值相乘再与dst_相减,最后把结果存放在dst_中的操作。若使用后缀R,可以对乘积和减法操作的结果凑整,再存在dst_中。凑整的方法是:给该值加上215,然后把结果的低端(15~0)清0。 指令字长:1个字。 周期数:1个周期。

【例】 LD *AR4+,A║MAS *AR5+,B ( A = *AR4+ ║ B = *AR5+ * T )

Before Instruction After Instruction A 00 0000 1000 A 00 1234 0000 B 00 0000 1111 B FF FEF3 8D11 T 0400 T 0400 FRCT 0 FRCT 0 AR4 0100 AR4 0101 AR5 0200 AR5 0201 Data Memory 0100 h 1234 0100 h 1234 0200h 4321 0200h 4321 48.LDR

语法:汇编指令方式 代数指令方式

LDR Smem,dst dst = rnd (Smem)

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 1 0 1 1 D I A A A A A A A 执行:(Smem) <<16 + 1<<15 → dst(31~16) 受SXM的影响。

说明:把单数据存储器操作数Smem左移16位后装入目的累加器dst的高端(31~16)。Smem通过加215再对累加器的低端(14~0)清0来凑整。累加器的15位置1。

指令字长:1个字。当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。 周期数: 1个周期。当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。 【例】LDR *AR1,A ( A = rnd( *AR1) )

Before Instruction After Instruction A 00 0000 0000 A 00 FEDC 8000 SXM 0 SXM 0 49

AR1 0200 AR1 0200 Data Memory 0200 h FEDC 0200h FEDC 49.LDU

语法:汇编指令方式 代数指令方式

LDU Smem,dst dst = uns(Smem)

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 1 0 0 1 D I A A A A A A A 执行:(Smem)→dst(15~0)

00 0000h→dst(39~16) 不影响任何状态位。

说明:把单数据存储器Smem装入目的累加器dst的低端(15~0)。dst的保护位和高端清0。因此,数据被看成是一个无符号16位数。不管SXM位的状态如何都无符号扩展。该指令代码占一个字。但当Smem采用长偏移间接寻址或绝对地址寻址方式时就会多占一个字。 指令字长:1个字。当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。 周期数: 1个周期。当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。 【例】LDU *AR1,A ( A = uns( *AR1) )

Before Instruction After Instruction A 00 0000 0000 A 00 0000 FEDC AR1 0200 AR1 0200 Data Memory 0200h FEDC 0200h FEDC 50.LMS

语法:汇编指令方式 代数指令方式

LMS Xmem,Ymem lms(Xmem,Ymem)

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 0 0 0 0 1 X X X X Y Y Y Y 执行:((A)+(Xmem)<<16)+215→A (B)+(Xmem)×(Ymem) →B

受SXM,FRCT和OVM的影响。影响C,OVC和OVB。

说明:该指令是求最小均方值算法。双数据存储器操作数Xmem左移16位后加到累加器A中,再加上215,结果存在累加器A中。同时并行执行Xmem与Ymem相乘,其结果加到累加器B中的操作。Xmem不会冲掉T寄存器的值,因而T寄存器总包含着用于修改系数的错误值。

指令字长:1个字。 周期数: 1个周期。

【例】LMS AR3+,AR4+ ( lms( *AR3+, *AR4+ ))

Before Instruction After Instruction A 00 7777 8888 A 00 77CD 8888 50

ADDS Smem, src src=src+uns (Smem) 或 src+=uns (Smem) 操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 0 0 1 S I A A A A A A A 执行:uns(Smem)+(src)→src 受OVM影响。影响C和OVsrc

说明:把不带符号的16位单数据存储器操作数Smem加到src中,结果存到src中。无论SXM位的值是什么都不进行符号位扩展。

指令字长:1个字。当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。 周期数:1个周期。当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。 【例】ADDS AR2-,B ( B=B+uns (*AR2-) )

无论SXM位的值是什么都不进行符号位扩展。

Before Instruction After Instruction B 00 0000 0003 B 00 0000 F009 C X C 0 AR2 0100 AR2 00FF Data Memory 0100 h F006 0100 h F006 7.AND

语法:汇编指令方式 代数指令方式

(1)AND Smem, src src=src&Smem或

src&=Smem

(2)AND #lk[,SHFT],src[,dst] dst=src&#lk[<<SHFT]或

dst &=#lk[<<SHFT]

(3)AND #lk,16,src[,dst] dst = src&#lk<<16或

dst &= #lk<<16

(4)AND src[,SHIFT],[,dst] dst = dst&src[<<SHFT]或

dst &=src[<<SHFT]

–16≤SHIFT≤15, 0≤SHFT≤15, 0≤lk≤65 535 操作码: (1)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 1 1 0 0 S I A A A A A A A (2)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 0 S D 0 0 1 1 S H F T 16位常数 (3)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 0 S D 0 1 1 0 0 0 1 1 16位常数 21

(4)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 0 S D 1 0 0 S H I F T 执行:

(1)(Smem) AND (src)→src

(2)lk<<SHFT AND (src) →dst (3)lk<<16 AND (src) →dst

(4)(dst) AND (src) <<SHIFT→dst 不影响任何状态位。

说明:该指令是使以下几种数据和src相与:

● 一个16位单数据存储器操作数Smem ● 一个16位立即数

● 源或目的累加器(src或dst)

若指定了移位,操作数在移位后才进行与操作。对于左移,低位添0,高位不进行符 号扩展;对于右移,高位不进行符号扩展。

指令字长:指令1和4:1个字;指令2和3:2个字。当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。 周期数:指令1和4:1个周期;

指令2和3:2个周期。

当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。

【例】 AND AR3+,A ( A = *AR3+ & A )

Before Instruction After Instruction A 00 00FF 1200 A 00 0000 1000 AR3 0100 AR3 0101 Data Memory 0100 h 1500 0100 h 1500 8.ANDM

语法:汇编指令方式 代数指令方式

ANDM #lk, Smem Smem=Smem & #lk或 Smem &= #lk 操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 1 0 1 0 0 0 I A A A A A A A 16位常数 执行:lk AND (Smem) →Smem

不影响任何状态位。

说明:16 位单数据存储器操作数Smem和一个16位长立即数lk相与,结果存在原Smem所在单元中。该指令不能循环执行。

指令字长:2个字。当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。 周期数:2个周期。当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。 【例1】ANDM #00FFh, *AR4+ ( *AR4+ = *AR4+ & #00FFh )

22

Before Instruction After Instruction AR4 0100 AR4 0101 Data Memory 0100h 0444 0100h 0044 【例2】 ANDM #0101h,4 ( @4 = @4 & #0101h )

Before Instruction After Instruction 0004h 00 0000 0100 0004h 00 0000 0100 9. B[D]

语法:汇编指令方式 代数指令方式

B[D] pmad [d]goto pmad

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 0 Z 0 0 1 1 1 0 0 1 1 16位常数 执行:pmad→PC 不影响任何状态位。

说明:指令指针指向指定的程序存储器地址(pmad),该地址可以是一个符号或一个数字。如果是延迟转移(指令后缀D),则紧跟在指令后的2个1字指令或1个2字指令从程序存储器中取出先执行。该指令不能重复执行。 指令字长:2个字。 周期数:4个周期;

2个周期(延时指令)。

【例】 B 2000h ( goto 2000h )

Before Instruction After Instruction PC 1F45 PC 2000 10.BACC[D]

语法:汇编指令方式 代数指令方式

BACC[D] src [d]goto src

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 1 Z S 1 1 1 0 0 0 1 0 执行:(src(15~0))→PC

说明:程序指针PC指向src的低位(15~0),src为累加器A或B。如果是延迟转移(指令后缀D),则紧跟在指令后的2个1字指令或1个2字指令从程序存储器中取出先执行。该指令不能重复执行。 指令字长:1个字。 周期数:6个周期;

4个周期(延时指令)。

【例】BACCD B (dgoto B )

ANDM 4444 h,*AR1+ ( *AR1+ = *AR1+ & #4444h )

Before Instruction After Instruction

23

B 00 0000 3000 B 00 0000 3000 PC 1F45 PC 3000 操作数和4444 h相与后,程序从3000 h开始执行。 11.BANZ[D]

语法:汇编指令方式 代数指令方式

BANZ[D] pmad, Sind if (Smem!=0 ) [d]goto pmad

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 1 0 1 1 Z 0 I A A A A A A A 16位常数 执行:if ((ARx)≠0), Then pmad→PC, Else (PC)+2→PC。不影响任何状态位。

说明:如果当前辅助寄存器ARx不为0,程序指针跳转到指定的程序存储器地址(pmad);否则PC指针加2。如果是延迟转移,则紧跟在指令后的2个1字指令或1个2字指令从程序存储器中取出先执行。该指令不能重复执行。 指令字长:2个字。

周期数:4个周期(条件为真);

2个周期(条件为假); 2个周期(延时指令)。

【例1】BANZ 2000h, *AR3- ( if ( *AR3- != 0 ) goto 2000H )

Before Instruction After Instruction PC 1000 PC 2000 AR3 0005 AR3 0004 【例2】BANZ 2000h, *AR3- (if ( *AR3- != 0 ) goto 2000H )

Before Instruction After Instruction PC 1000 PC 1002 AR3 0000 AR3 FFFF 【例3】BANZ 2000h, *AR3(-1) (if ( *AR3(-1)!= 0 ) dgoto 2000H )

Before Instruction After Instruction PC 1000 PC 1002 AR3 0001 AR3 0001 12.BC[D]

语法:汇编指令方式 代数指令方式

BC[D] pmad,cond[,cond[cond]] if (cond[,cond[,cond]]) [d]goto pmad 0≤pmad≤65 535

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 1 0 Z 0 C C C C C C C C 16位常数 执行:If (cond (s))

Then pmad→PC Else (PC)+2→PC

24

如果选择了OV 或NOV,就会影响OVA 或OVB。

说明:如果满足特定的条件,指令转移到程序存储器地址(pmad)上,采用延迟方式,则紧跟在指令后的2个1字指令或1个2字指令从程序存储器中取出先执行;如果条件不满足,PC加2且紧跟在指令后的2个1字指令或1个2字指令继续执行。

该指令在把控制转交给其它程序前进行多个条件的检测。可检测单个条件或复合条件,复合条件只能出自同一组的不同类。

例如,能同时测试TC,C,BIO,但不能测试NTC,C,NC。因为C和NC位于同一类。另外该指令不能循环执行。见表2.22。 指令字长:2个字。

周期数:5个周期(条件为真);

3个周期(条件为假); 3个周期(延时指令)。

【例】BC 2000h,AGT ( if (AGT) goto 2000h )

Before Instruction After Instruction A 00 0000 0053 A 00 0000 0053 PC

1000 PC 2000 13.BIT

语法:汇编指令方式 代数指令方式

BIT Xmem,BITC TC = bit (Xmem, bit–code)

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 0 0 1 0 1 1 0 X X X X B I T C 执行:(Xmem(15–BITC))→TC

说明:把双数据存储器操作数Xmem的指定位复制到状态寄存器ST0的TC位。下表列出了对应于数据存储器中每一位的位代码,即位代码对应了BITC,位地址对应了(15–BITC)。

表3.6 位地址和位代码

位地址 0 1 2 3 4 5 6 7 位代码 1111 1110 1101 1100 1011 1010 1001 1000 位地址 8 9 10 11 12 13 14 15 位代码 0111 0110 0101 0100 0011 0010 0001 0000 指令字长 :1个字。 周期数:1个周期。

【例】BIT AR5+,15-12;test bit 3 ( TC = bit (*AR5+, 15-12)) ;测试位3。

Before Instruction After Instruction AR5 100 0AR5 0101 25

TC 0 TC 1 Data Memory 0100 h 7688 0100 h 7688 14.BITF

语法:汇编指令方式 代数指令方式

BITF Smem,#lk TC=bitf(Smem,#lk)

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 1 0 0 0 0 1 I A A A A A A A 16位常数 执行:If ((Smem) AND lk)=0,Then 0→TC Else 1→TC 影响TC。

说明:测试单数据存储器值Smem中指定的某些位。如果指定的bit或 bits为0,状态寄存器ST0的TC位清0;否则,TC置1。lk常数在测试bit或 bits时起屏蔽作用,0≤lk≤65 535。 指令字长:2个字。当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。 周期数:2个周期。当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。 【例1】BITF DAT5,00FFh (TC=bitf(@5,00FFh )

Before Instruction After Instruction TC x TC 0 DP 004 DP 004 Data Memory 0205 h 5400 0205 h 5400 【例2】BITF DAT5,0800h (TC=bitf(@5,0800h ) Before Instruction After Instruction TC x TC 1 DP 004 DP 004 Data Memory 0205h 0F7F 0205h 0F7F 15. BITT

语法:汇编指令方式 代数指令方式

BITT Smem TC=bitt (Smem )

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 1 1 0 1 0 0 I A A A A A A A 执行:(Smem(15–T(3~0)))→TC

影响TC。

说明:把单数据存储器操作数Smem的指定位复制到状态寄存器ST0的TC位。T寄存器的低4位(bit3~0)值确定了被复制的位代码,15-T(3~0)对应着位地址。

指令字长:1个字。当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。 周期数:1个周期。当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。 【例】BITT AR7+0 (TC=bitt (*AR7 + 0 ) )

26

T TC AR0 AR7 Data Memory 0100 h 16.CALA[D]

语法:汇编指令方式 代数指令方式

CALA[D] src [d]call src

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 1 1 1 0 1 Z S 1 1 1 0 0 0 Before Instruction After Instruction C T C 0 TC 1 0008 AR0 0008 0100 AR7 0108 0008 0100h 0008 1 1 0 1 执行:Nodelayed:(SP)-1→SP,(PC)+1→TOS,(src(15~0)) →PC

Delayed:(SP) -1→SP,(PC) +3→TOS,(src(15~0)) →PC 不影响任何状态位。

说明:程序指针转移到src的低位所确定的16位地址单元。返回地址压入堆栈。如果是延迟调用,紧跟在指令后的2个1字指令或1个2字指令从程序存储器中取出先执行。该指令不能重复执行。

指令字长:1个字。 周期数:6个周期;

4个周期(延时指令)。

【例】CALA A ( call A )

Before Instruction After Instruction A 00 0000 3000 A 00 0000 3000 PC 0025 PC 3000 SP 1111 SP 1110 Data Memory 1110 h 4567 1110h 0026 17.CALL[D]

语法:汇编指令方式 代数指令方式

CALL[D] pmad [d]call pmad

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 0 Z 0 0 1 1 1 0 1 0 0 16位常数 执行:Nodelayed:(SP)–1→SP,(PC)+2→TOS,pmad→PC

Delayed:(SP)–1→SP,(PC)+4→TOS,pmad→PC 不影响任何状态位。

说明:程序指针转移到程序存储器pmad地址单元。返回地址压入堆栈。如果是延迟调用,紧跟在指令后的2个1字指令或1个2字指令从程序存储器中取出先执行。该指令不能重复

27

执行。

指令字长:2个字。 周期数:4个周期;

2个周期(延时指令)。

18.CC[D]

语法:汇编指令方式 代数指令方式

CC[D] pmad,cond[,cond[,cond]] if (cond [,cond [, cond]]) [d]call pmad

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 1 0 Z 1 C C C C C C C C 16位常数 执行:Nodelayed:If (cond(s)),Then (SP)-1→SP

(PC)+2→TOS pmad→PC

Else (PC) +2→PC

Delayed: If (cond(s)),Then (SP) -1→SP

(PC) +4→TOS pmad→PC

Else (PC) +2→PC

影响OVA或OVB(如果选定了OV或NOV)。

说明:当满足确定的条件时,程序指针PC指向程序存储器地址(pmad);如果不满足条件,PC指针加2。如果是延迟调用,该指令后的两个字先取出执行,且不会影响被测试的条件。 指令字长:2个字。

周期数:5个周期(条件为真);

3个周期(条件为假); 3个周期(延时指令)。

19.CMPL

语法:汇编指令方式 代数指令方式

CMPL src[,dst] dst = ~src

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 1 S D 1 0 0 1 0 0 1 1 执行:(src)→dst 不影响任何状态位。

说明:计算src的反码(逻辑反),结果存在dst中;若没有指定dst就存在src中。 指令字长:1个字。 周期数:1个周期。

【例】:CMPL A,B ( B = ~ A )

28

Before Instruction After Instruction A FC DFFA AEAA A FC DFFA AEAA B 00 0000 7899 B 03 2005 5155 20.CMPM

语法:汇编指令方式 代数指令方式

CMPM Smem, #lk TC = (Smem = = #lk )

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 1 0 0 0 0 0 I A A A A A A A 16位常数 执行:If (Smem)=lk,Then 1→TC Else 0→TC 影响TC。

说明:比较16位单数据存储器操作数Smem和16位的常数lk是否相等。如果相等,TC置1,否则清0。

指令字长:2个字。当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。 周期数:2个周期。当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。 【例】CMPM *AR4+,0404h ( TC = ( *AR4+ = #0404h )

Before Instruction After Instruction TC 1 TC 0 AR4 0100 AR4 0101 Data Memory 0100 h 4444 0100h 4444 21.CMPR

语法:汇编指令方式 代数指令方式

CMPR CC,ARx TC = ( AR0 = = ARx ) TC = ( AR0 > ARx ) TC = ( AR0 < ARx ) TC = ( AR0 ! = ARx ) 操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 1 C C 1 0 1 0 1 A R x 16位常数 执行:If(cond) Then 1→TC Else 0→TC

说明:比较指定的辅助寄存器(ARx )和AR0的值,若结果为真,TC置1,否者置0。所有条件都作为无符号操作。0≤CC≤3。指令所检验的条件如下表。 指令字长:1个字。 周期数:1个周期。

29

表3.33 指令检验条件

条 件 EQ LT GT NEQ 条件码 00 01 10 11 检测检测检测检测说 明 ARx是否等于AR0 ARx是否小于AR0 ARx是否大于AR0 ARx是否不等于AR0 【例】CMPR 2,AR4 ( TC= ( AR0

Before Instruction After Instruction TC 1 TC 0 AR0 FFFF AR0 FFFF AR4 7FFF AR4 7FFF 22.CMPS

语法:汇编指令方式 代数指令方式

CMPS src, Smem, cmps (src, Smem )

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 0 0 0 1 1 1 S I A A A A A A A 执行:If ((src(31~16))>(src(15~0))

Then (src(31~16))→Smem

(TRN)<<1→TRN 0→TRN(0) 0→TC

Else (src(15~0)) →Smem

1→TRN(0) 1→TC

影响TC。 说明:比较位于源累加器的高端和低端的两个16位二进制补码值的大小。把较大值存入Smem中。如果是源累加器的高端(31~16)较大,过渡寄存器(TRN)左移一位,最低位填0,TC位置0。如果是源累加器的低端(15~0)较大,过渡寄存器(TRN)左移一位,最低位填1,TC位置1。该指令不遵从标准的流水线操作。比较是在读操作数阶段完成,因而,源累加器的值是指令执行前一个阶段的值。TRN寄存器和TC位是在执行阶段被修改的。

指令字长:1个字。当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。 周期数:1个周期。当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。 【例】CMPS A,*AR4+ ( cmps (A,*AR4+ ))

Before Instruction After Instruction A 00 2345 7899 A 00 2345 7899 TC 0 TC 1 AR4 0100 AR4 0101 TRN 4444 TRN 8889 Data Memory 0100 h 0000 0100h 7899

30

23.DADD

语法:汇编指令方式 代数指令方式

DADD Lmem,src[,dst] (1) dst = src + dbl (Lmem)或 dst+ = dbl (Lmem)

(2) dst = src + dual (Lmem)或 dst+ = dual (Lmem) 操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 1 0 0 S D I A A A A A A A 执行:If C16=0 Then (Lmem)+(src)→dst

Else (Lmem(31~16)+(src(31~16)) →dst(39~16) (Lmem(15~0)+(src(15~0)) →dst(15~0) 只有当C16=0时,受SXM和OVM的影响。 影响C和Ovdst(若未指定dst,则影响OVsrc)。

说明:该指令是将源累加器的内容加到32位长数据存储器操作数(Lmem)中。如果定义了目的累加器,就把结果存在其中;否则存在源累加器中。C16的值决定了指令的方式。

C16=0, 指令以双精度方式执行。40位的源累加器的值加到Lmem中。饱和溢出位根据操作结果设置。

C16=1 ,指令以双16位方式执行。src的高端(31~16)与Lmem的高16位相加;src的低端(31~16)与Lmem的低16位相加。该模式下,饱和溢出位不受影响,无论OVM为何值,结果都不溢出。 指令字长:1个字。 周期数:1个周期。

【例1】DADD *AR3+,A,B ( B = A + dbl (*AR3+ ) )

Before Instruction After Instruction A 00 5678 8933 A 00 5678 8933 00 0000 0000 B B 00 6BAC BD89 C16 0 C16 0 AR3 0100 AR3 0102 Data Memory 0100 h 1534 0100h 1534 0101 h 3456 0101 h 3456 注:因为此条指令为一条长操作数指令,所以AR3在此指令执行后加2。 【例2】DADD *AR3-,A,B ( B = A + dbl (*AR3-) )

Before Instruction After Instruction A 00 5678 3933 A 00 5678 3933 00 0000 0000 00 6BAC 6D89 B B C16 1 C16 1 AR3 0100 AR3 00FE Data Memory 31

0100 h 1534 0100h 1534 0101 h 3456 0101h 3456 注:因为此条指令为一条长操作数指令,所以AR3在此指令执行后减2。 24.DADST

语法:汇编指令方式 代数指令方式

DADST Lmem,dst dst = dadst ( Lmem, T )

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 1 1 0 1 D I A A A A A A A 执行:If C16=1

Then (Lmem(31~16))+(T)→dst(39~16)

(Lmem(15~0))-(T)→dst(15~0)

Else (Lmem)+((T)+(T)<<16)→dst

只有当C16=0时才受SXM和OVM的影响。影响C和OVdst。

说明:该指令是将T寄存器的值加到32位长数据存储器操作数Lmem中。C16的值决定了指令的方式。

C16=0, 指令以双精度方式执行。T寄存器的值和其左移16位得到的值相结合所组成的32位数加到Lmem中,结果存在目的累加器中。

C16=1 ,指令以双16位方式执行。Lmem的高位(31~16)与T寄存器的值相加,存在目的累加器的前24位;同时,从Lmem的低16位减去T寄存器的值,结果存在目的累加器的低16位。该模式下,饱和溢出位不受影响,无论OVM为何值,结果都不溢出。 注意,该指令只有当C16置为1时,即双16位方式,才有意义。 指令字长:1个字。周期数:1个周期。

【例1】DADST *AR3-,A ( A = dadst (*AR3-, T )

Before Instruction After Instruction A 00 0000 0000 A 00 3879 1111 T 2345 T 2345 C16 1 C16 1 AR3 0100 AR3 00FE Data Memory 0100 h 1534 0100h 1534 0101 h 3456 0101h 3456 【例2】DADST *AR3+,A ( A = dadst (*AR3+, T )

Before Instruction After Instruction A 00 0000 0000 A 00 3879 579B T 2345 T 2345 C16 0 C16 0 AR3 0100 AR3 0102 Data Memory 0100 h 1534 0100h 1534 0101 h 3456 0101 h 3456 32

25.DELAY

语法:汇编指令方式 代数指令方式

DELAY Smem delay (Smem)

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 0 1 1 0 1 I A A A A A A A 执行:(Smem)→Smem+1 不影响任何状态位。

说明:该指令是把一单数据存储器单元Smem的内容复制到紧跟着的较高地址单元中。数据复制完后,原单元的内容保持不变。该功能在数字信号处理应用中实现一个Z延迟是相当有用的。这种指令在LTD,MACD指令中可以见到。

指令字长:1个字。当Smem使用长偏移量间接寻址或绝对寻址,指令长度增加一个字。 周期数:1个周期。当Smem使用长偏移量间接寻址或绝对寻址,指令周期增加一个周期。 【例】DELAY *AR3 ( delay ( *AR3 ) )

Before Instruction After Instruction AR3 0100 AR3 0100 数据存储器

0100h 6CAC 0100h 6CAC 0101h 0000 0101h 6CAC 26.DLD

语法:汇编指令方式 代数指令方式

DLD Lmem,dst (1) dst = dbl (Lmem) (2) dst = dual ( Lmem) 操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 1 0 1 1 D I A A A A A A A 执行:If C16=0

Then (Lmem)→dst

Else (Lmem(31~16)) →dst(39~16)

(Lmem(15~0)) →dst(15~0)

受SXM的影响。

说明:该指令是将32位长操作数Lmem装入目的累加器中。C16的值决定了指令所采取的方式:C16=0,指令以双精度方式执行。Lmem装入目的累加器中。

C16=1,指令以双16位方式执行。Lmem的高16位装入到dst前24位;同时,Lmem的低16位装入到dst的低16位中。 指令字长:1个字。 周期数:1个周期。

【例】DLD *AR3,B ( B = dbl ( *AR3+) )

Before Instruction After Instruction B 00 0000 0000 B 00 6CAC BD90 AR3 0100 AR3 0102 33

C16 0 C16 0 数据存储器

0100h 6CAC 0100h 6CAC BD90 0101h BD90 0101h BD90 27.DRSUB

语法:汇编指令方式 代数指令方式

DRSUB Lmem,src (1) src = dbl (Lmem) – src (2) src = dual (Lmem) – src

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 1 1 0 0 S I A A A A A A A 执行:If C16 = 0

Then (Lmem) – (src)→src

Else (Lmem(31~16) – (src(31~16)) →src(39~16) (Lmem(15~0) – (src(15~0)) →dst(15~0) 只有当C16=0时,受SXM和OVM的影响。 影响C和OVsrc。

说明:该指令是从32位长数据存储器操作数(Lmem)中减去源累加器的内容,结果送到src。C16的值决定了指令的方式。

C16=0, 指令以双精度方式执行。从32位长数据存储器操作数(Lmem)中减去累加器的内容,结果送到src。

C16=1 ,指令以双16位方式执行。Lmem的高端(31~16)减去src的高16位,结果存在src的前24位(39~16);同时,Lmem的低端(15~0)减去src的低16位,结果存在src的低端(15~0)。该模式下,饱和溢出位不受影响,无论OVM为何值,结果都不溢出。 指令字长:1个字。 周期数:1个周期。

【例】DRSUB *AR3+,A ( A = dbl ( *AR3+) – A )

Before Instruction After Instruction A 00 5678 8933 A FF BEBB AB23 T x T 0 C16 0 C16 0 AR3 0100 AR3 0102 数据存储器 0100h 1534 0100h 1534 BD90 0101h 3456 0101h 3456 28.DSADT

语法:汇编指令方式 代数指令方式

DADST Lmem,dst dst = dsadt ( Lmem, T )

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 1 1 1 1 D I A A A A A A A 34

执行:If C16=1

Then (Lmem(31~16)) – (T)→dst(39~16)

(Lmem(15~0)) + (T)→dst(15~0)

Else (Lmem) – ((T) + (T)<<16=→dst

只有当C16=0时才受SXM和OVM的影响。影响C和OVdst。

说明:从32位长数据存储器操作数Lmem中减/加T寄存器的值,结果存在dst。C16的值决定了指令的方式。

C16=0, 指令以双精度方式执行。T寄存器的值和其左移16位得到的值相结合所组成的32位数与Lmem相减,结果存在目的累加器中。

C16=1 ,指令以双16位方式执行。Lmem的高位(31~16)减去T寄存器的值,结果存在目的累加器的前24位;同时,把T寄存器的值加到Lmem的低16位中,结果存在目的累加器的低16位。该模式下,饱和溢出位不受影响,无论OVM为何值,结果都不溢出。 注意,该指令只有当C16置为1时,即双16位方式,才有意义。 指令字长:1个字。 周期数:1个周期。

【例】DSADT *AR3+,A ( A = dsadt ( *AR3+, T ) )

Before Instruction After Instruction A 00 0000 0000 A FF F1EF 1111 T 2345 T 2345 C 0 C 0 C16 0 C16 0 AR3 0100 AR3 0102 Data Memory 0100h 1534 0100h 1534 BD90 0101h 3456 0101h 3456 29.DST

语法:汇编指令方式 代数指令方式

DST src,Lmem (1) dbl ( Lmem ) = src (2) dual ( Lmem ) = src 操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 0 1 1 1 S I A A A A A A A 执行:(src(31~0))→Lmem 不影响任何状态位。

说明:把源累加器的内容存在一个32位的长数据存储器单元Lmem中。 指令字长:1个字。 周期数:2个周期。 30.DSUB

语法:汇编指令方式 代数指令方式

DSUB Lmem,src (1) src = src – dbl (Lmem )或 src_= dbl (Lmem )

35

(2) src = src – dual (Lmem )或 src_ = dual (Lmem ) 操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 1 0 1 0 S I A A A A A A A 执行:If C16=0

Then (src)-(Lmem)→src

Else (src(31~16))-(Lmem(31~16 ))→dst(39~16)

(src(15~0))-(Lmem(15~0 ))→src(15~0)

只有当C16=0时才受SXM和OVM影响。 影响C和OVsrc

说明:从源累加器中减去32位长数据存储器操作数Lmem的值,结果存在源累加器中。C16的值决定了指令的方式。

C16=0, 指令以双精度方式执行。累加器的内容减去32位长数据存储器操作数(Lmem)中的值。

C16=1 ,指令以双16位方式执行。src的高16位减去Lmem的高端(31~16),结果存在src的前24位(39~16);同时,src的低16位减去Lmem的低端(15~0),结果存在src的低端(15~0)。

指令字长:1个字。 周期数:1个周期。

【例1】DSUB *AR3+,A ( A = A – dbl ( *AR3+) )

Before Instruction After Instruction A 00 5678 8933 A 00 4144 54DD C16 0 C16 0 AR3 0100 AR3 0102 Data Memory 0100h 1534 0100h 1534 0101h 3456 0101h 3456 【例2】DSUB *AR3-,A ( A = A – dbl ( *AR3-) )

Before Instruction After Instruction A 00 5678 3933 A 00 4144 04DD C 1 C 1 C16 1 C16 1 AR3 0100 AR3 00FE Data Memory

0100h 1534 0100h 1534 0101h 3456 0101h 3456 31.DSUBT

语法:汇编指令方式 代数指令方式

DSUBT Lmem,dst 1) dst = dbl (Lmem) –T 2) dst = dual (Lmem) –T

36

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 1 1 1 0 D I A A A A A A A 执行:If C16=1 Then (Lmem(31~16)) – (T)→dst(39~16)

(Lmem(15~0)) – (T)→dst(15~0)

Else (Lmem) – ((T)+ (T)<<16))→dst

只有当C16=0时才受SXM和OVM影响。影响C和OVsrc

说明:从32位长数据存储器操作数Lmem中减去T寄存器的值,结果存在dst。C16的值决定了指令的方式。

C16=0,指令以双精度方式执行。T寄存器的值和其左移16位得到的值相结合所组成的32位数与Lmem相减,结果存在目的累加器中。

C16=1 ,指令以双16位方式执行。Lmem的高位(31~16)减去T寄存器的值,结果存在目的累加器的前24位;同时,从Lmem的低16位的值中减去T寄存器的值,结果存在目的累加器的低16位。该模式下,饱和溢出位不受影响,无论OVM为何值,结果都不溢出。 注意,该指令只有当C16置为1时,即双16位方式,才有意义。 指令字长:1个字。 周期数:1个周期。

【例】DSUBT *AR3+,A ( A = dbl ( *AR3+ ) – T )

Before Instruction After Instruction A 00 0000 0000 A FF F1EF 1111 T 2345 T 2345 C16 0 C16 0 AR3 0100 AR3 0102 Data Memory 0100 h 1534 0100h 1534 0101 h 3456 0101 h 3456 32.EXP

语法:汇编指令方式 代数指令方式

EXP src T = exp (src )

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 1 0 S 1 0 0 0 1 1 1 0 执行:If (src)=0

Then 0→T

Else (src的引导位)– 8 → T

说明:计算指数值并把结果存在T寄存器中,该值是一个范围在8~31之间的带符号的二进制补码值。指数值是通过累加器src的引导位位数减8得到的。引导位数等于消除40位累加器src中除符号位以外的有效位所需左移的位数。指令结束后,累加器src没有被修改。如果引导位数减去8的值为负,这是因为累加器的保护位中有有效位。详细请看归一化指令。 指令字长:1个字。

37

周期数:1个周期。

【例1】EXP A ( T = exp (A) )

Before Instruction After Instruction A FF FFFF FFCB -53 A FF FFFF FFCB -53

T 0000 T 0019 25

【例2】EXP B ( T = exp(B) )

Before Instruction After Instruction B 07 8543 2105 B 07 8543 2105 -4 T FFFC T FFFC

累加器B中的值在保护位中有有效位,其将得到一个负指数。 33.FB[D]

语法:汇编指令方式 代数指令方式

FB[D] extpmad far [d]goto extpmad

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 1 0 Z 0 1 7位常数=pmad(22~16) 16位常数=pmad(15~0) 执行:(pmad(15~0))→PC (pmad(22~16)) →XPC

不影响任何状态位。0≤extpmad≤7F FFFF

说明:该指令将控制转交给由pmad指定的程序存储器地址。由pmad(22~16)指定地址页,pmad(15~0)指定页内地址。批pmad可为符号或数字地址。如果是延迟跳转,紧跟在指令后的2个1字指令或1个2字指令从程序存储器中取出先执行。该指令不能重复执行。 指令字长:4个字。

周期数:2个周期(延时指令)。

【例】FB 012000h ( far goto 012000h )

Before Instruction After Instruction PC 1000 PC 2000 XPC 00 XPC 01 2000h装入PC,01装入XPC,程序继续从该单元开始执行。 34.FBACC[D]

语法:汇编指令方式 代数指令方式

FBACC[D] src far [d]goto src

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 1 Z S 1 1 1 0 0 1 1 0 执行:(src(15~0))→PC

(src(22~16))→XPC 不影响任何状态位。

说明:该指令将控制转交给由src指定的程序存储器地址。由src (22~16)指定地址页,src

38

(15~0)指定页内地址。如果是延迟跳转,紧跟在指令后的2个1字指令或1个2字指令从程序存储器中取出先执行。该指令不能重复执行。 指令字长:6个字。

周期数:4个周期(延时指令)。

【例】FBACC A ( far goto A )

Before Instruction After Instruction A 00 0001 3000 A 00 0001 3000 PC 1000 PC 3000 XPC 00 XPC 01 35.FCALA[D] 语法:汇编指令方式 代数指令方式

FCALA[D] src far [d]call src

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 1 Z S 1 1 1 0 0 1 1 1 执行:Nodelayed

(SP) –1→SP (PC)+1→TOS (SP) –1→SP (XPC) →TOS (src(15~0))→PC (src(22~16))→XPC Delayed (SP) –1→SP (PC)+3→TOS (SP) –1→SP (XPC) →TOS (src(15~0))→PC (src(22~16))→XPC 不影响任何状态位。

说明:把src(22~16)的值装入地址页XPC,src(15~0)指定页内地址。如果是延迟调用,紧跟在指令后的2个1字指令或1个2字指令从程序存储器中取出先执行。该指令不能重复执行。

指令字长:1个字。周期数:6个周期(延时指令)。 36. FCALL[D]

语法:汇编指令方式 代数指令方式

FCALL[D] extpmad far [d]call extpmad

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 1 0 Z 1 1 7位常数=pmad(22~16) 39

16位常数=pmad(15~0) 执行:Nodelayed

(SP)-1→SP (PC)+2→TOS (SP)-1→SP (XPC) →TOS

(pmad(15~0))→PC (pmad(22~16))→XPC Delayed (SP)-1→SP (PC)+4→TOS (SP)-1→SP (XPC) →TOS

(pmad(15~0))→PC (pmad(22~16))→XPC

说明:该指令将控制转交给由pmad指定的程序存储器地址。由pmad (22~16)指定地址页,pmad (15~0)指定页内地址。返回地址在pmad的低位被装入PC之前被压入堆栈。如果是延迟调用,紧跟在指令后的2个1字指令或1个2字指令从程序存储器中取出先执行。该指令不能重复执行。0≤extpmad≤7F FFFF。 指令字长:2个字。 周期数:4个周期;

2个周期(延时指令)。

【例】FCALLD 301000h ( far dcall 1000h )

ANDM 4444h,*AR1+ ( *AR1+ = *AR1+ & #4444h )

Before Instruction After Instruction PC 3001 PC 1000 XPC 7F XPC 30 SP 1111 SP 110F Data Memory 1110 h 4567 1110h 3005 110Fh 4567 110Fh 007F 37.FIRS

语法:汇编指令方式 代数指令方式

FIRS Xmem, Ymem, pmad firs ( Xmem, Ymem, pmad )

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 0 0 0 0 0 X X X X Y Y Y Y 16位常数 执行:pmad→PAR

If (RC)≠0

(B) + (A(32~16)) × (由PAR寻址的Pmem) → B

40

((Xmem)+ (Ymem))<<16 → A (PAR) + 1 → PAR (RC) – 1 → RC

受SXM、FRCT和OVM位的影响。影响C、OVA和OVB位。

说明:该指令实现一个对称的有限冲激响应滤波器。累加器A的高端(32~16)和由pmad(存放在程序地址寄存器PAR中)寻址的一个Pmem值相乘,结果加到累加器B中。同时,存储器操作数Xmem和Ymem相加,结果左移16位,然后装入到累加器A中。在下一个循环中,pmad加1。一旦循环流水开始了,该指令就成为单周期指令。 指令字长:2个字。 周期数:3个周期。

【例】FIRS AR3+,AR4+,COEFFS ( firs (*AR3+, *AR4+, COEFFS ) )

Before Instruction After Instruction A 00 0077 0000 A 00 00FF 0000 B 00 0000 0000 B 00 0008 762C FRCT 0 FRCT 0 AR3 0100 AR3 0101 AR4 0200 AR4 0201 Data Memory 0100 h 0055 0100h 0055 0200 h 00AA 0200h 00AA Progrom Memory COEFFS 1234 COEFFS 1234 38.FRAME

语法:汇编指令方式 代数指令方式

FRAME K SP = SP + K或 SP + = K 操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 0 1 1 1 0 K K K K K K K K 执行:(SP)+ K → SP

不影响任何状态位。

说明:把一短立即数K加到SP中。在编译方式(CPL=1)下的地址产生或紧跟着该指令的下一条指令作堆栈处理都不会产生等待。 指令字长:1个字。 周期数:1个周期。

【例】FRAME 10h ( SP = SP +10h )

Before Instruction After Instruction SP 1000 SP 1010 39.FRET[D]

语法:汇编指令方式 代数指令方式

FRET[D] far [d]return

41

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 1 Z 0 1 1 1 0 0 1 0 0 指令:(TOS)→XPC (SP)+1→SP (TOS)→PC (SP)+1→SP

不影响任何状态位。

说明:把栈顶单元的低7位装入XPC;把下一个单元的16位值装入PC中。堆栈指针在每一个操作完成后自动加1。如果是延迟返回,紧跟在指令后的2个1字指令或1个2字指令从程序存储器中取出先执行。该指令不能重复执行。 指令字长:1个字。 周期数:6个周期;

4个周期(延时指令)。

【例】FRET ( far return )

Before Instruction After Instruction PC 2112 PC 1000 XPC 01 XPC 05 SP 0300 SP 0302 Data Memory 0300h 0005 0300h 0005 0301h 1000 0301h 1000 40.FRETE[D]

语法:汇编指令方式 代数指令方式

FRETE[D] far [d]return_enable

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 1 Z 0 1 1 1 0 0 1 0 1 执行:(TOS)→XPC

(SP)+1→SP (TOS)→PC (SP)+1→SP 0→INTM

影响INTM位。

说明:把栈顶单元的低7位装入XPC;把下一个单元的16位值装入PC中。堆栈指针在每一个操作完成后自动加1。该指令自动清除ST1的中断屏蔽位(INTM)(清除该位可开放中断)。如果是延迟返回,紧跟在指令后的2个1字指令或1个2字指令从程序存储器中取出先执行。该指令不能重复执行。 指令字长:1个字。 周期数:6个周期;

4个周期(延时指令)。

42

【例】FRETE ( far return_enable )

Before Instruction After Instruction PC 2112 PC 0110 XPC 05 XPC 6E SP 0300 SP 0302 ST1 xCxx ST1 x4xx Data Memory 0300 h 006E 0300h 006E 0301h 0110 0301h 0110 41.IDLE

语法:汇编指令方式 代数指令方式

IDLE K idle (k)

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 1 N N 1 1 1 0 0 0 0 1 执行:(PC)+1→PC

受INTM位的影响。1≤K≤3。

说明:强迫程序执行等待操作直至产生非屏蔽中断或复位操作。PC执行加1操作,芯片保持省电模式(下拉方式)直到被中断。即使INTM=1,只要有一个非屏蔽中断出现,省电模式终止。若INTM=1,程序继续执行紧跟着idle的指令,如果INTM=0,程序转移到相应的中断服务子程序。无论INTM为何值,该中断是由中断屏蔽寄存器IMR开放的。K值指定了可终止各省电模式中断类型。

K=1,诸如定时器和串行口等外围设备在idle状态时仍有效。外围器件中断,复位,和外部中断都可终止该模式。

K=2,诸如定时器和串行口等外围设备在idle状态时无效。复位,和外部中断都可终止该模式。因在省电模式下,各中断未像正常操作那样被锁存,中断必需被推迟几个周期后才被应答。

K=3,诸如定时器和串行口等外围设备在idle状态时无效。同时,锁相环PLL停止工作。复位,和外部中断都可终止该模式。因在省电模式下,各中断未像正常操作那样被锁存,中断必需被推迟几个周期后才被应答。

该指令不能循环操作。 指令字长:1个字。

周期数:执行该指令所需周期与所处省电期间有关。当K=3时,器件完全进入停止状态,所需周期无法确定。所需最小周期为4。 【例1】IDLE 1 ( idle(1) )

在出现复位或不可屏蔽中断之前,处理器一直处于省电模式。 【例2】IDLE 2 ( idle(2) )

在出现复位或外部不可屏蔽中断之前,处理器一直处于省电模式。 【例3】IDLE 3 ( idle(3) )

在出现复位或外部不可屏蔽中断之前,处理器一直处于省电模式。 42.INTR

43

语法:汇编指令方式 代数指令方式

INTR K int (k)

操作码:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 1 0 1 1 1 1 1 0 K K K K K 执行:(SP)– 1→SP

(PC)+1→TOS

由K指定的中断向量→PC 1→INTM

影响INTM和IFR。

说明:让程序指针指向K所确定的中断向量。使用该指令,可令程序执行任意中断服务程序。指令开始执行时,PC加1并把它压入堆栈,然后把K指定的中断向量装入PC,执行该中断服务子程序。中断标志寄存器(IFR)的响应位清0,对应中断被禁止(INTM=1时)。INTR指令不受中断屏蔽寄存器的影响,且不管INTM为何值都能执行INTR指令。该指令不能循环执行。

指令字长:1个字。 周期数:3个周期。

【例】INTR 3 ( int(3) )

Before Instruction After Instruction PC 0025 PC FF8C INTM 0 INTM 1 IPTR 01FF IPRT 01FF SP 1000 SP 0FFF Data Memory 0FFFh 9653 0FFFh 0026 43.LD

语法:汇编指令方式 代数指令方式

(1) LD Smem,dst dst = dbl (Lmem)或

dst = dual (Lmem)

(2) LD Smem,TS,dst dst = Smem<<TS (3) LD Smem,16,dst dst = Smem<<TS (4) LD Smem[,SHIFT],dst dst = Smem[<<SHIFT] (5) LD Xmem,SHIFT,dst dst = Xmem[<<SHIFT] (6) LD #K,dst dst = # K (7) LD #lk[,SHIFT],dst dst = #lk[<<SHIFT] (8) LD #lk,16,dst dst = # lk [<<SHIFT] (9) LD src,ASM [,dst] dst = src<<ASM (10) LD src [,SHIFT][,dst] dst = src[<<SHIFT] 操作码: (1)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 1 0 0 0 D I A A A A A A A

44

(2)

15 14 13 12 11 10 9 0 0 0 1 0 1 0 (3)

15 14 13 12 11 10 9 0 1 0 0 0 1 0 (4)

15 14 13 12 11 10 9 0 1 1 0 1 1 1 0 0 0 0 1 1 0 (5)

15 14 13 12 11 10 9 1 0 0 1 0 1 0 (6)

15 14 13 12 11 10 9 1 1 1 0 1 0 0 (7)

15 14 13 12 11 10 9 8 7 6 1 1 1 1 0 0 0 D 0 0 16位常数 (8)

15 14 13 12 11 10 9 8 7 6 1 1 1 1 0 0 0 D 0 1 16位常数 (9)

15 14 13 12 11 10 9 8 7 6 1 1 1 1 0 1 S D 0 1 16位常数 (10)

15 14 13 12 11 10 9 1 1 1 1 0 1 S 执行:

(1)(Smem)→dst

(2)(Smem)<<TS→dst (3)(Smem)<<16→dst (4)(Smem)<<SHIFT→dst (5)(Smem)<<SHFT→dst (6)K→dst

(7)lk<<SHFT→dst (8)lk<<→dst

(9)(src) <<ASM→dst (10)(src) <<SHFT→dst

在所有累加器装入操作中都受SAM影响,在带有SHIFT或ASM移位的装入操作中受 OVM的影响。在带有SHIFT或ASM移位的装入指令中影响Ovd(或当dst=src时影响Ovsrc)。

45

8 7 D I 8 7 D I 8 7 1 I D 0 6 5 4 3 2 1 0 A A A A A A A 6 5 4 3 2 1 0 A A A A A A A 6 5 4 3 2 1 0 A A A A A A A 1 0 S H I F T 2 1 H F 0 T 8 7 6 5 4 3 D X X X X S 8 7 6 5 4 3 2 1 0 D K K K K K K K K 5 1 4 0 3 S 2 1 H F 0 T 5 1 4 0 3 0 2 0 1 1 0 0 5 0 4 S 3 2 H I 1 F 0 T 8 7 D 0 6 1 5 0 4 S 3 2 H I 1 F 0 T

本文来源:https://www.bwwdw.com/article/p4rv.html

Top