null4.1 ’C2000寻址方式4.1 ’C2000寻址方式‘C2xx DSP具有三种基本的寻址方式:立即数寻址、直接寻址和间接寻址。
第4章 TMS320C2000 DSP指令系统 指令
格式
pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载
如下
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示:
指令助记符 指令操作数
寻址方式是指寻找指令中操作数地址的方式。一、立即寻址方式 一、立即寻址方式 立即寻址方式最为简单,操作数就包括在指令中,操作数地址即指令寄存器IR的某些位。
立即寻址的操作数有两种:
短立即数:短立即数寻址方式时,指令字为单字长;
长立即数:长立即数操作时,指令字为双字长。
为了与直接寻址方式中的地址操作数区别,立即寻址方式中的立即数要以“#”符开头。短立即数寻址方式举例短立即数寻址方式举例1 0 1 1 1 0 1 1 0 1 1 0 0 0 1 115 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
立即寻址方式的RPT操作码
短立即操作数
99(63h)指令字中包含指令所使用的一个常数RPT #99 ;将紧接着RPT后的指令重复100次 长立即数寻址方式举例长立即数寻址方式举例ADD #16384,2 ;将16384(4000h)左移2位
;后与累加器内容相加,结果保存在累加器中 第2个指令字为长立即操作数第1个指令字为指令操作码和移位数二、直接寻址方式 二、直接寻址方式 由指令直接给出操作数所在地址。 存储器地址被分成两部分:
指令字包括数据存储器地址的低7位,即页内偏移量;
页面的指示则由存储器页指针DP给出,DP包含数据存储器地址的高9位。
这样合成地址就是16位。因此指令并没有直接给出所有16位数据寄存器地址。null数据存储器被分为512页,页面由DP指定;每1页包含128个字,页内位置由指令字给出。
由于直接寻址方式中页面地址由数据指针DP直接给出,因此每次寻址操作只能在一页进行(128个字的地址变化范围),若超过此范围,必须重新设置数据指针DP。 直接寻址操作步骤直接寻址操作步骤 1、设置数据页
2、指明偏移量
例如: LDP #19h
ADD 4h举例举例在数据存储器209h处的内容为 0x32 (32h),ACC的内容为 0x08,使209h内容左移5位后与ACC累加,问指令执行后ACC = ?
若使用直接寻址方式,如何编程?解答解答 209h 〉80h, (80h=27)
而 209h = 0000 0010 0000 1001,
故低7位地址为:09h,高位地址为:04h。
相应指令可写为:LDP #04h
ADD 09h,5null三、间接寻址方式三、间接寻址方式数据存储器地址由辅助寄存器ARn间接给出。
这种寻址方式中,使用的辅助寄存器是当前辅助寄存器,由辅助寄存器指针ARP指定,ARn=AR(ARP)。如ARP=2,则使用的地址寄存器就是AR2,如图示。 null因为辅助寄存器ARn为16位,因此这种方式中,数据存储器的16位地址是由ARn全部给出的,即间接寻址方式可进行全部数据存储器范围的寻址。null指明下一个AR指令操作码、移位数指明寻址方式为间接寻址方式指明当前AR(即ARP)是否改变:
N=0 不发生改变;
N=1 发生改变null间接寻址操作步骤
TMS320C24x中八个辅助寄存器(AR0-AR7)提供
了灵活而强大的间接寻址能力,在使用时,包括:
1、设置辅助寄存器指针(ARP)
2、指明间接寻址选项( * , *+ , *- , *0+ , *0- 等)
3、指明下一个辅助寄存器(可选)
例如: MAR *,AR1
ADD *+,AR4 间接寻址方式中的指令是以符号“ * ”为标志的ARn和ARP的指定ARn和ARP的指定 辅助寄存器指针ARP指定当前辅助寄存器AR(ARP),而ARP的值则可直接通过修改状态寄存器ST0相应位来加载,但更方便的是使用MAR指令和LARP指令。例如:
MAR *,AR0 ;ARP=0
LARP 1 ;ARP=1
null间接寻址选项null逆向进位法加AR0的内容逆向借位法减AR0的内容举例 举例 ADD *BR0+,12,AR2
指令执行前,AR0 = 08h,ARP = 4,
AR4 = 329h,AR2 = 304h;
数据存储器329h单元内容[329h] = 123h,
ACC = 456h,
指令操作见图示当前AR的内容向左移的位数下次使用的当前辅助寄存器null正向进位法加ACC的内容null逆向进位法加AR0的内容指令执行前指令执行后null 常用的修改辅助寄存器内容的指令有:
LAR 直接将操作数指定的内容装入AR
ADRK 将当前AR加上一个立即数
SBRK 将当前AR减去一个立即数
MAR 将当前AR加1、减1或加、减一个变址量例如:LAR AR0,#876h
ADRK #80h ;将当前辅助寄存器的内容与80h相
;加,结果保存到当前辅助寄存器中。
MAR *+,AR5 ;将当前辅助寄存器的内容加1,
;并将5送到ARP,ARP原来的值送到ARB间接寻址是有效的寻址方式间接寻址是有效的寻址方式间接寻址方式是一种非常特别而又非常有效的寻址方式,在这种寻址方式的操作中,除给出当前操作数地址外,还可对当前辅助寄存器AR(ARP)进行修改,并给出下次的当前辅助寄存器(即对ARP修改)。这样,在进行数据处理运算时,寻址不会造成额外的周期产生,这对实时信号处理非常重要。 寻址方式考虑寻址方式考虑在实际编程中采用哪种寻址方式要考虑存储器容量,程序对速度的要求,以及指令的简便易读程度等方面因素。
在对数据块、流的处理中,基于间接寻址的操作,一般效率更高,因其地址的变更是不额外耗时的。另外,间接寻址中的位反转(反向进位)特性特别适合于FFT算法。
对固定单元的寻址,采用直接寻址方式更简单。4.3 ’C2000指令系统简介4.3 ’C2000指令系统简介‘C2xx DSP中共有汇编语言指令88条,分成6类:
①累加器、算术和逻辑指令26条如:ADD、LACC、AND
②辅助寄存器和数据页面指针指令7条如:MAR、LAR等
③TREG、PREG和乘法指令20条如:LT、MTY、PAC等
④分支、调用指令12条如:B、BCND、INTR等
⑤控制指令15条如:SPM、POP、BIT等
⑥存储器和I/O操作指令8条如:BLDD、SPLK、TBLR等
注:有些指令助记符是增强性指令,对应于几条简单指令(机器码),如:ADD可完成ADD,ADDH,ADDK和ADLK等功能,这样做可使程序更简洁并易读。 参见:TMS320C20x用户指南.pdf 第6、7章4.3.1 指令格式 4.3.1 指令格式 指令格式如下表示:
指令助记符 指令操作数
指令助记符就是88条汇编语言指令助记符,而指令操作数的表示法则比较复杂,对应于三种寻址方式,有三种操作数格式。 (1)直接寻址方式操作时(1)直接寻址方式操作时 指令助记符 dma [,shift]
或: 指令助记符 dma,16
其中dma为直接寻址时的数据存储器地址(即页内偏移地址7位),汇编语言中若直接使用符号地址,则可自动截取全符号地址16位的低7位(而符号地址对DP赋值时则把高9位截取给DP),这给编程带来方便。shift为左移位数指定,shift = 0~ 15。“[ ]”为可选项。
如: ADD 28,9
ADD 28H,16 (2)间接寻址方式操作时(2)间接寻址方式操作时 指令助记符 ind[,shift[,ARn]]
或: 指令助记符 ind,16[,ARn]
其中ind表示间接寻址方式,可选P158 表4.1的7种操作方式之一;ARn为第n个辅助寄存器,n = 0 ~ 7。“[ ]”为可选项。
如: ADD *0+,14,AR3
ADD *BR0+,16 (3)立即寻址方式操作时(3)立即寻址方式操作时 指令助记符 #K
或: 指令助记符 #lk[,shift]
其中,符号“#”表示立即操作数,k为8位短立即数,lk为16位长立即数,在长立即数指令中,允许移位(预定标)。
如指令: ADD #23
ADD #1234h,5 1、 加载累加器指令1、 加载累加器指令(1)LACC:ACC装入数据
直接寻址:LACC dma[,shift]
dma 指定的数据存储器地址单元的数据经左移shift位后装入ACC,shift=0~15,shift=0时可不写;
直接寻址: LACC dma,16
dma 指定的数据存储器地址单元的数据经左移16位后装入ACC4.3.2 几条常用指令简介LACC直接寻址举例LACC直接寻址举例LDP #05h
SPLK #0a5a5h,35h
SPLK #05a5ah,05h
LACC 05h,7
*页指针DP=05,指向280h开始的一页(128字节)
即使用B0块的后一页;实际寻址单元为285h。
05a5ah为正数,因此不用关心SXM。null 间接寻址:LACC ind[,shift[,ARn]]
或:LACC ind,16[,ARn]
当前辅助寄存器AR(ARP)内容指定的数据存储器地址单元的数据经左移shift[或16]位后装入ACC,shift=0~15,shift=0时可不写;
同时,ARAU按ind指定的方式进行运算,ind可按要求在7种方式中选用;
并且,可更改下一指令的当前辅助寄存器,即修改ARP。若重新指定下一指令的当前辅助寄存器ARn,则将其列出,否则不写。
注:左移时受SXM的影响,若SXM=0,则高位填入0;若SXM=1,则高位作符号扩展。低位自动填入0LACC间接寻址举例LACC间接寻址举例LDP #05h
SPLK #0a5a5h,35h
MAR *,AR3
LAR AR3,#02b5h
LAR AR0,#0123h
LACC *0+,16,AR6
*页指针DP=05,指向280h开始的一页(128字节)
即使用B0块的后一页;实际寻址单元为2b5h。
无符号数0a5a5h为正数,有符号则为负数,要关注SXMnull立即寻址:
LACC #lk[,shift]
长立即数经左移shift位后装入ACC,shift=0~15,shift=0时可不写;LACC立即寻址举例LACC立即寻址举例LDP #05h
SPLK #0a5a5h,35h
MAR *,AR3
LAR AR3,#02b5h
LAR AR0,#0123h
LACC #1234h,15
*1234h=01 0010 0011 0100b ——>左移15位
——〉0 1001 0001 1010 0000 0000 0000 0000 b
=91a0000h——〉ACCnull LACL:ACCL装入数据,ACCH=0
直接寻址:LACL dma
dma 指定的数据存储器地址单元的数据装入ACCL,而ACCH则填入0。
立即寻址:LACL #k
短立即数装入ACCL,而ACCH则填入0。
将数据装入ACC的低位,ACC的高位填0。null LACT:先左移(移位位数由TREG指定),然后将ACC装入数据
有直接和间接两种寻址方式,除移位不是由程序指令字直接指定外,其余同LACC。
操作数由TREG[3:0]指定左移位数。LACT直接寻址举例LACT直接寻址举例LDP #05h
SPLK #0a5a5h,35h
SPLK #05a5ah,05h
LT 35h
LACT 05h
*页指针DP=05,指向280h开始的一页(128字节)
即使用B0块的后页;实际寻址单元为285h。
05a5ah为正数,因此不用关心SXM。LACT间接寻址举例LACT间接寻址举例LDP #05h
SPLK #0a5a5h,35h
MAR *,AR3
LAR AR3,#02b5h
LAR AR0,#0123h
LT #0abcdh
LACT *0-,AR6
*页指针DP=05,指向280h开始的一页(128字节)
即使用B0块的后页;实际寻址单元为2b5h。
无符号数0a5a5h为正数,有符号则为负数,要关注SXMLACT立即寻址举例LACT立即寻址举例LDP #05h
SPLK #0a5a5h,35h
SPLK #0b842h,36h
MAR *,AR3
LAR AR3,#2b5h
LT *+ ;Treg=a5a5h
LAR AR0,#0123h
LACT #1234h ;T[3:0]=5
*1234h=01 0010 0011 0100b ——>左移5位
——〉010 0100 0110 1000 0000 b
=24680h——〉ACC2、保存累加器值指令2、保存累加器值指令(1)SACL:保存ACC低半部分到数据存储器
有两种寻址方式
直接寻址:SACL dma[,shift2]
间接寻址:SACL ind[,shift2[,ARn]]
将ACC内容经左移shift2位,然后将ACCL保存到DP:dma/或ind指定的数据存储器地址单元中去,shift2=0~7,shift2=0时可不写;
注:该指令不影响状态标志位,左移时低位补0,高位丢弃。 null(2)SACH:保存ACC高半部分到数据存储器
有两种寻址方式:
直接寻址:SACH dma[,shift2]
间接寻址:SACH ind[,shift2[,ARn]]
将ACC内容经左移shift2位,然后将ACCH保存到DP:dma/或ind指定的数据存储器地址单元中去,shift2=0—7,shift2=0时可不写;
注:该指令不影响状态标志位,左移时低位补0,高位丢弃。加载和存储的区别加载和存储的区别3、累加器加法3、累加器加法 ADD,有间接、直接、立即 3种寻址方式
由间接、直接寻址指定的数据存储器地址单元的数据经左移shift[/或16]位后与ACC累加,结果回送ACC;shift=0—15,shift=0时可不写。
[对间接寻址]同时,ARAU按ind指定的方式进行运算,ind可按要求在7种方式中选用;并且,可更改下一指令的当前辅助寄存器,即修改ARP。若重新指定下一指令的当前辅助寄存器ARn,则将其列出,否则不写。null 注:左移时受符号扩展位SXM的影响:
若SXM=0,则高位填入0;若SXM=1,则高位作符号扩展。低位自动填入0。
执行该指令时会影响进位位C和溢出位OV,且溢出时受溢出模式OVM影响。
运算产生进位时,一般将进位位C置位;不产生进位时,则将进位位C清0。但在进行高16位加(左移16位后累加)时,若产生进位则C置位,如无进位则不影响进位位C。nullLDP #05h
SPLK #0a5a5h,35h
SPLK #05a5ah,05h
LACC 05h,7
ADD 035h,9
*页指针DP=05,指向280h开始的一页(128字节)
即使用B0块的后页;实际寻址单元为285h/2b5h。
其它加法指令其它加法指令ADDC:带进位位累加器加法
ADDS:无符号数的累加器加法
ADDT:TREG指定移位的累加器加法
这几种加法有直接和间接两种寻址方式,其余和ADD指令类似 4、累加器减法指令4、累加器减法指令 累加器减法指令有多条:
SUB、SUBB、SUBS、SUBT 、 SUBC
这些指令除完成减法运算外,类似于累加器加法指令。
SUBC是条件减法指令,很特殊。条件减法条件减法 SUBC:当ACC和操作数均为正数时有效。
两种寻址方式:直接:SUBC dma
间接:SUBC ind[,ARn]]
ACC减去经左移15位后的指定的数据存储器地址单元的数据,结果送ALU;若ALU非负,则ALU左移1位后加1送ACC;若为负数,则将原来的ACC左移1位后送ACC。
执行该指令时会影响进位位C和溢出位OV,但不受溢出模式OVM影响,ACC不会因为溢出而饱和。
运算产生借位时,将进位位C清0;不产生借位时,则将进位位C置位。5、逻辑运算指令5、逻辑运算指令AND 将累加器的内容和被寻址的数据单元内容作“逻辑与”,结果送累加器
OR 将累加器的内容和被寻址的数据单元内容作“逻辑或”,结果送累加器
XOR 异或
CMPL ACC取反(对累加器中的内容逻辑取反)
NEG ACC取补(换成ACC的相反数,即(ACC)×(-1)=(ACC))6、加载辅助寄存器指令6、加载辅助寄存器指令直接寻址:LAR ARx,dma
间接寻址:LAR ARx,ind[,ARn]
立即寻址:LAR ARx,#k 或 LAR ARx,#lk
指定的操作数装入ARx,x=0—7。
注:该指令不影响状态标志位,按无符号数
方式操作。
7、加载数据页指针7、加载数据页指针直接寻址:LDP dma
间接寻址:LDP ind[,ARn]
立即寻址:LDP #k (短立即数:9位)
指定的操作数装入DP
注:该指令不影响状态标志位,按无符号数方式操作。8、与乘法有关的指令 8、与乘法有关的指令 (1)MPY:操作数与TREG乘法指令
直接寻址:MPY dma
间接寻址:MPY ind[,ARn]
立即寻址:MPY #k
指定的操作数与TREG相乘,结果送PREG。
注: 短立即数时进行符号扩展而不管SXM的 值。该指令不影响状态标志位。
例: mpy *br0+,ar3(2)MPYU无符号乘法指令(2)MPYU无符号乘法指令 操作数与TREG无符号乘法指令
直接寻址:MPYU dma
间接寻址:MPYU ind[,ARn]
指定的操作数(无符号数)与TREG无符号数相乘,结果送PREG。
注:该指令不影响状态标志位。(3)MPYA指令 (3)MPYA指令 操作数与TREG相乘并累加前乘积指令
直接寻址:MPYA dma
间接寻址:MPYA ind[,ARn]
(ACC)+ 移位后的PREG —〉ACC,
数据存储器地址单元的数据 x (TREG)—〉PREG
注:移位时受PM的影响,执行该指令时会影响进位位C和溢出位OV,且溢出时受溢出模式OVM影响运算产生进位时,将进位位C置位;不产生进位时,则将进位位C清0。(4)MPYS指令(4)MPYS指令 操作数与TREG相乘且累加器减去前乘积指令
直接寻址:MPYS dma
间接寻址:MPYS ind[,ARn]
(ACC)- 移位后的PREG —〉ACC,
数据存储器地址单元的数据 x (TREG)—〉PREG,
注:移位时受PM的影响,执行该指令时会影响进位位C和溢出位OV,且溢出时受溢出模式OVM影响。 运算产生借位时,将进位位C清0;不产生借位时,则将进位位C置位。 (5)MAC指令直接寻址(5)MAC指令直接寻址 两个操作数相乘并累加前乘积指令
直接寻址:MAC pma,dma
(PC)—〉MSTACK,
pma —〉PC,
(ACC)+ 移位后的PREG —〉ACC,
数据存储器地址单元dma的数据 —〉TREG,
(TREG)x 程序存储器地址单元pma的数据—〉PREG
(PC)+ 1 —〉PC null clrc SXM
setc OVM
lacc #0
ldp #10h
spm 00
rpt #31
mac 7000h, 00h
sacl *+
sach *+
注:执行该指令时会影响进位位C和溢出位OV,且溢出时受溢出模式OVM影响。 运算产生进位时,将进位位C置位;不产生进位时,则将进位位C清0。MAC指令间接寻址MAC指令间接寻址 两个操作数相乘并累加前乘积指令
间接寻址:MAC pma,ind[,ARn]
(PC)—〉MSTACK,
pma —〉PC,
(ACC)+ 移位后的PREG —〉ACC,
(PC)+ 1 —〉PC,
辅助寄存器指定数据存储器地址单元的数据—〉TREG,
(TREG)x 程序存储器地址单元pma的数据—〉PREG。(6)MACD指令(6)MACD指令 带数据移动的两个操作数相乘并累加前乘积指令
直接寻址:MACD pma,dma
间接寻址:MACD pma,ind[,ARn]
(PC)—〉MSTACK,
pma —〉PC,
(ACC)+ 移位后的PREG —〉ACC,
(PC)+ 1 —〉PC,
辅助寄存器指定数据存储器地址单元的数据 —〉TREG,
(TREG)x 程序存储器地址单元pma的数据—〉PREG,
[ AR(ARP)] —〉[ AR(ARP)] + 1数据存储器地址单元。 null特殊指令:
APAC Add Preg to ACC
SPAC Sub Preg from ACC9、分支和调用指令9、分支和调用指令(1)无条件分支(跳转) (只有一种寻址方式)
间接寻址:B pma[,ind[,ARn]]
pma —〉PC,程序无条件跳转到由pma指定的程序存储器地址单元处执行;同时,ARAU按ind指定的方式进行运算,ind可按要求在7种方式中选用;并且,可更改下一指令的当前辅助寄存器,即修改ARP。若重新指定下一指令的当前辅助寄存器ARn,则将其列出,否则不写。
注:该指令不影响状态标志位。pma为程序存储器地址,16位。 带间接寻址无条件分支带间接寻址无条件分支 lar ar0,#102ch
mar *,ar0
sacl *
b backnt,*+,ar1
……
lacl *,16,ar0
backnt:
add *
lar ar0,#1038h(2)BACC(2)BACC无条件分支(跳转)到ACCL指定的程序地址处执行,表示如下:
BACC
ACCL —〉PC,程序无条件跳转到由ACCL指定的程序存储器地址单元处执行。
注:该指令不影响状态标志位。BACC举例BACC举例 lacl 61h
add 800h
sacl 62h
lar ar0,62h
bacc ;跳转到ACCL指定的程序处执行
xyz: sacl *,3,ar6
……
quitnmi:
sach *,7,ar3
clrc INTM
ret(3)BANZ(3)BANZ 当前辅助寄存器非0分支(跳转),只有一种寻址方式:
间接寻址:BANZ pma[,ind[,ARn]]
当前辅助寄存器AR(ARP)非0,则pma—〉PC,程序跳转到由pma指定的程序存储器地址单元处执行;否则顺序往下执行。同时,ARAU按ind指定的方式进行运算,ind可按要求在7种方式中选用;并且,可更改下一指令的当前辅助寄存器,即修改ARP。若重新指定下一指令的当前辅助寄存器ARn,则将其列出,否则不写。
注:该指令不影响状态标志位。间接寻址BANZ举例间接寻址BANZ举例ckntiii2:
lacl 61h
and #0180h
xor #0180h
banz quitnmi,*,ar0
lacl 61h
and #007fh
lar ar0,#101eh
sacl *
quitnmi:
clrc INTM
ret(4)BCND(4)BCND条件分支(跳转),表示如下:
BCND pma,cond1[,cond2][,...]
当所有条件都满足时,则pma—〉PC,程序跳转到由pma指定的程序存储器地址单元处执行;否则顺序往下执行。
注:该指令不影响状态标志位。 间接寻址条件分支bcnd举例间接寻址条件分支bcnd举例 add *+,ar1
lar ar1,*,ar3
lar ar0,#55aah
cmpr 00
bcnd SYRJi0,NTC,C,OV
NSYRJi0:
lar ar1,#800h
b ntproci0
SYRJi0:
lar ar1,#200h(5)CALL(5)CALL 无条件调用子程序,有一种寻址方式:
间接寻址:CALL pma[,ind[,ARn]]
PC+2 —〉TOS,pma —〉PC,下一指令地址进栈,程序无条件跳转到由pma指定的子程序处执行;同时,ARAU按ind指定的方式进行运算,ind可按要求在7种方式中选用;并且,可更改下一指令的当前辅助寄存器,即修改ARP。若重新指定下一指令的当前辅助寄存器ARn,则将其列出,否则不写。
注:该指令不影响状态标志位。(6)CALA(6)CALA无条件调用ACCL指定的子程序,表示如下:
CALA
PC+2 —〉TOS,ACCL —〉PC,下一指令地址进栈,程序无条件跳转到由ACCL指定的子程序处执行。
注:该指令不影响状态标志位。
(7)CC(7)CC条件调用子程序,表示如下:
CC pma,cond1[,cond2][,...]
当所有条件都满足时,则PC+2 —〉TOS, pma —〉PC,下一指令地址进栈,程序跳转到由pma指定的子程序处执行。否则顺序往下执行。
注:该指令不影响状态标志位。 间接寻址调用间接寻址调用 mar *,ar0
……
call adcproc,*+,ar1
……
add *-,4,ar2
cala ;调用ACCL指定的程序
……
cc dacout,BIO,C
adcproc:
bldd *+,8000h
……
dacout:(8)无条件返回(8)无条件返回 无条件返回,表示如下:
RET
(TOS) —〉PC,栈顶弹出下一指令地址,程序无条件从子程序(或中断服务程序)返回。
注:该指令不影响状态标志位。
(9)RETC:条件返回(9)RETC:条件返回 RETC:条件返回,表示如下:
RETC cond1[,cond2][,...]
当所有条件都满足时,(TOS) —〉PC,栈顶弹出下一指令地址,程序从子程序(或中断服务程序)返回;否则顺序往下执行。
注:该指令不影响状态标志位。
RET/RETCRET/RETCNSYRJi0:
……
retc BIO,C
SYSRJi0:
……
ret
10、位操作指令10、位操作指令BIT dma, bit_code
BIT ind, bit_code [,ARn]
测试第15- bit_code位
例: BIT *,0,AR1
测试当前AR指向的数据单元中的最高位(即第15-0=15位)
BITT dma
BITT ind [,ARn]
同上,但测试的位由Treg指定11、块操作指令11、块操作指令(1)BLDD:数据块传送指令
源为长立即数,直接寻址: BLDD #lk,dma
源为长立即数,间接寻址: BLDD #lk,ind[,ARn]
目的为长立即数,直接寻址:BLDD dma,#lk
目的为长立即数,间接寻址:BLDD ind,#lk[,ARn]
(PC)—〉MSTACK,lk —〉PC,(源)—〉目的;
(PC)+ 1 —〉PC。null; FFT CODE WITH BIT-REVERSED INPUT SAMPLES / ARP=AR3 / DP=0
; transfer 2*N input data from 'INPUT' to 'BUFFER'
FFT: lar ar3,DATAADD
lar ar0,NN ; indexregister = N
rpt #255
bldd #INPUT,*BR0+
rpt #255
bldd #INPUT+100h,*BR0+
rpt #255
bldd #INPUT+200h,*BR0+
rpt #255
bldd #INPUT+300h,*BR0+(2)BLPD指令(2)BLPD指令 程序存储器到数据存储器的块传送指令
源为长立即数,
直接寻址:BLPD #pma,dma
(PC)—〉MSTACK, pma —〉PC,
(源)—〉目的; (PC)+ 1 —〉PC。
源为长立即数,
间接寻址: BLPD #pma,ind[,ARn]
(PC)—〉MSTACK,pma —〉PC,
(源)—〉目的;(PC)+ 1 —〉PC。 (3)DMOV:数据移动指令(3)DMOV:数据移动指令 直接寻址:DMOV dma
数据单元dma的数据 —〉数据存储器地址dma+1单元。
间接寻址:DMOV ind[,ARn]
[AR(ARP)] —〉[ AR(ARP)] + 1数据存储器单元。null* arp=1, ar1=1000h,[1000h]=ADC后的要处理数据
Repeat: lacc #0
lt #0
mpy #0
spm 00
rpt #63
mac codaddr,*+ ;acc += d[i] * c[i]
mar *-
rpt #63
dmov *-
adrk ar1, #1
banz repeat, *+
……
codaddr:.set $
.word -32124
……(4)TBLR:表读指令 (4)TBLR:表读指令 直接寻址:TBLR dma
(PC)—〉MSTACK,
(ACCL) —〉PC,(源)—〉目的;
(PC)+ 1 —〉PC。
程序计数器PC装入微堆栈MSTACK;累加器低半部ACCL值加载到程序计数器PC;累加器低半部ACCL指定的程序存储器地址单元(源)的数据装入到DP:dma 指定的目的数据存储器地址单元;程序计数器PC(用作源操作数指针)加1 把程序存储单元的内容(一个字)传送到被寻址的数据单元中,程序存储单元的地址由累加器的低16位指定。
当用RPT指令重复时,可传送一组数据。(5)TBLW:表写指令(5)TBLW:表写指令直接寻址:TBLW dma
(PC)—〉MSTACK,
(ACCL) —〉PC,(源)—〉目的;
(PC)+ 1 —〉PC。
程序计数器PC装入微堆栈MSTACK;累加器低半部ACCL值加载到程序计数器PC;DP:dma 指定的数据存储器地址单元(源)的数据装入到累加器低半部ACCL值指定的程序存储器地址单元(目的);程序计数器PC(用作源操作数指针)加1。把被寻址的数据单元中的内容(一个字)传送到程序存储单元中,程序存储单元的地址由累加器的低16位指定。
当用RPT指令重复时,可传送一组数据。传送指令传送指令 传送指令不需经过累加器,速度比存储指令、加载指令都快常用指令记忆方法常用指令记忆方法1、累加器、算术和逻辑指令
(1)累加器指令
加载累加器指令 :LACC、LACL、LACT、ZALR
保存累加器值指令:SACL、SACH
(2)算术运算指令
累加器加法指令:ADD、ADDC 、ADDS、ADDT
累加器减法指令:SUB、SUBB、SUBS、SUBT、 SUBC
(3)逻辑运算指令 AND、OR、XOR、CMPL、NEG
(4)移位指令 SFL、SFR、ROL、ROR null2、加载辅助寄存器和数据页指针指令
LAR、SAR、MAR、ADRK、SBRK、LDP
3、与乘法有关的指令
MPY、MPYU、MPYA、MPYS、MAC、MACD
PAC、APAC、SPAC
LT、 LTA、 LTD、 LTS、 LTP、 LPH
SPH、SPL、SPM
4、分支和调用指令
(1)分支指令:B、BACC、BANZ、BCND
(2)调用指令:CALL、CALA、CC、RET、RETC
(3)中断指令:INTR、NMI、TRAPnull5、控制指令
(1)位操作: BIT、BITT、CLRC、SETC
(2)系统控制:LST、SST
(3)堆栈操作:PUSH、POP、 PSHD、POPD
(4)其它: RPT、IDLE、NOP
6、I/O和存储器指令
(1)块操作指令:BLDD、BLPD、DMOV、TBLR、TBLW
(2)存储器赋值: SPLK
(3) I/O 指令: IN、OUT