首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

dsp汇编指令系统介绍(精)

来源:华佗小知识


汇编指令集

本节根据指令的功能来分,提供六张表来说明指令集的概况: 累加器、算数和逻辑指令(表2);

辅助寄存器和数据页指针指令(表3); TREG、PREG和乘法指令(表4); 转移指令(表5); 控制指令(表6);

I/O和存储器操作(表7)。

在每张表中,指令按字母顺序排列。执行每条指令所需要的周期数在表中给出,所有指令都假设从内部程序存储器和内部数据存储器中执行,指令的周期数适用于单指令执行,不适用于重复方式。编程时,用户必须对每条指令的寻址方式了解清楚,因此这里也在表中给出了每条指令的寻址方式。由于指令的操作码对用户编程没有多大指导意义,在这里就没有列出来。 为了参照起见,我们先定义这六张概述表的符号意义: ACC 累加器。

AR BITX

CM 辅助寄存器。 4位数值,用于指定数据存储器数值中的哪一位将被BIT指令所测试。 2位数值,CMPR指令执行CM值所声明的比较: 若CM=00,测试当前AR=AR0否; 若CM=01,测试当前ARAR0否; 若CM=11,测试当前AR≠AR0否。

Shift

TP 4位右移量。 用于条件执行指令的2位数值,代表如下4种条件:若BIO引脚为低,

TP=00;若TC位=1,TP=01;若TC位=0,TP=10;无条件TP=11。 ARX 用于LAR和SAR指令的3位数据值,指定被操作的辅助寄存器。 52

表2 累加器、算数和逻辑指令 ABS 周期

|(ACC)|→ACC 1

(ACC)+(数据存储器地址)×1 2shift→ACC

(ACC)+(数据存储器地址)×

216→ACC 1(ACC)+k→ACC 1 shift

(ACC)+lk×2→ACC 2 指令功能

(ACC)+(数据存储器地址)+(C)→ ACC 寻址方式 直接/间接

直接/间接短立即数长立即数 指令说明

ACC取绝对值

移位时低位填0,若SXM=1,高位用符号扩展;若SXM=0,高位填0;结果存在ACC中,该指令使C=0。寻址短立即数时,加操作不受SXM的影响,且不能重复执行。

ADD ADDC 1

直接/间接该指令抑制符号扩展

该指令抑制符号扩展;无论SXM为何值,数据均作无符号16位数看待。当SXM=0和

直接/间接

移位次数等于0时,ADDS与ADD指令结果相同。 被寻址的数据寄存器单元的内容左移并加

直接/间接到ACC,移位次数由TREG的低4位确定, SXM位的值控制移位时是否作符号扩展。

使用直接/间接寻址,ACC的低位字与数据直接/间接存储器单元的值作与运算,结果存在ACC

的低字,ACC的高位字清0。使用立即数寻

址,长立即数可以左移,移位时,32位中长立即数未被长立即操作数填充的位均被清零。

长立即数 累加器中的内容用其逻辑反取代 指定的数据存储器单元的内容或16位常数直接/间接左移并加载到ACC,低位填0,若SXM= 1,高位用符号位扩展;若SXM=0,则填直接/间接0。 长立即数

指定的数据存储器单元的内容或用0扩展

直接/间接的8位常数左移并加载到ACC的低16位, ACC的高位填0。数据作为16位无符号数短立即数处理,无论SXM为何值,本指令都不进行 符号扩展。

将数据存储器单元的内容左移后加载到

直接/间接ACC。左移位数由TREG的低4位确定。SXM 的值决定ACC高位是否符号扩展。

将ACC的内容换成其相反数。当对0000h作NEG操作时,OV置1。 若OVM=1,ACC=7FFFh,若OVM=0,则ACC

=8000 0000h,只要ACC不等于0则C=0,当ACC=0,则C=1。

NORM指令将ACC中的有符号数进行规格化。对定点数进行规格化即将其分成指数和尾数,为此对位31和位30作异或运算 间接

即可确定位30是数值还是符号。对当前AR的缺省修改方式是加1。该指令对正、负二进制补码均适用。由于该指令在流水

53 ADDS

(ACC)+(数据存储器地址)→

ACC (ACC)+(数据存储器地址)左移(TREG(3:0))位→ACC (15:0)

1

ADDT 1 AND CMPL LACC LACL 1

(ACC(15:0))AND (数据存储器地 址) →ACC(15:0) 0→ACC(31:16)

shift

(ACC(31:16))AND lk ×2→ACC2 16

(ACC(31:16))AND lk ×2→ACC (ACC)的逻辑反→ACC 1 shift

(数据存储器地址)×2→ 1

ACC 16

(数据存储器地址)×2→ACC 1

shift

位→ACC lk×22

(数据存储器地址)→ACC

(15:0) 10→ACC(31:16) k→ACC(7:0) 10→ACC(31:16) (数据存储器地址)左移TREG(3:0)位→ACC(15:0) 1

LACT

NEG (ACC)×(-1)→ACC 1

NORM

若(ACC)=0,则TC→1; 否则若(ACC(31))XOR(ACC (30))=0,

则TC→0,(ACC)×2 →ACC 按指定的方式修改AR 否则TC→1

1 OR

(ACC(15:0))OR (数据存储

器地址)→ACC(15:0) (ACC(31:16))→ACC (31:16) (ACC)OR lk×2 shift16 →ACC

(ACC)OR lk×2→ACC (ACC(31))→C (ACC(30:0))→ACC(31:1)

C→ACC(0)

C→ACC(31) (ACC(31:1))→ACC

((30:0)) (ACC(0))→C ((ACC)×2)的高16位→ 数据存储器地址 ((ACC)×2)的低16位→ 数据存储器地址 (ACC(31))→C (ACC(30:0))→ACC(31:1) 0→ACC(0)

若SXM=0,则0→ACC(31) 若SXM=1,则ACC(31)→ACC (31)

(ACC(31:1))→ACC(30:0) (ACC(0))→C

shiftshift

线的第4阶段才完成对AR的操作,而其它指令在流水线的第2阶段完成对AR的操作,因此紧跟在NORM指令后的两条指令不能对AR值或者ARP值进行修改。否则NORM指令将不能操作正确的数据存储器单元。 ACC的内容和被寻址的数据地址单元的值

或左移后的立即数作或操作,SXM位对OR1直接/间接指令没有影响。数据操作数没有被占用的 位总是填0。因此在直接或间接寻址或不2长立即数移位的长立即数的情况下ACC的高位是不 变的。当操作数是立即数且移位次数不等2长立即数于0时,操作数左移低位补0。

将ACC内容左移一位,进位位被移入最低位,最高位被移入进位位。 将ACC内容右移一位,进位位被移入最高位,最低位被移入进位位。 ROL 1 ROR 1

SACH

SACH将整个ACC的32位数左移0-7位,将

1直接/间接移位后数值的高16SACH将整个ACC的32位数左移0-7位,将 1直接/间接移位后数值的低16 1 1

SFL指令使ACC的内容左移一位,ACC的最低位填0,最高位移入进位位C。 SFR指令将ACC的内容右移一位。若SXM=1,则产生算数右移,ACC的符号位不变,位31复制到位30,位0移入进位位。若SXM=0,则产生逻辑右移,ACC的所有内容右移一位,位0移入进位位,位31填0 在直接间接和长立即数寻址方式里被寻址的数据存储单元的内容或16位常数左移,然后累加器减去移位后的值。移位时低位填0。高位扩展与否由SXM当使用短立即数时累加器减去8位正常数。此时不可以指定移位值,减法不受SXM的影响,并且是不可重复的。通常情况下,若减法结果有借位则进位位清0;若减法结果没有借位,则进位位置1。但若移位次数为16,则当减法结果有借位时进位位清0,减法不产生借位时,进位位不变。

ACC的值减去被寻址的数据寄存单元的内容及进位位的逻辑反值,抑制符号扩展。若相减结果产生借位进位位清0;若没有借位则进位位置1。

ACC实现条件减,可用于除法:把16位的 54

SACL SFL SFR

(ACC)-(数据存储器地址)×2→ACC (ACC)-(数据存储器地址)× SUB

2→ACC (ACC)-k→ACC (ACC)-lk×2 shift16shift →ACC 1 1 1 2 直接/间接 直接/间接 短立即数 长立即数

SUBB SUBC

(ACC)-(数据寄存器地址)-(C的逻辑反) →ACC 11

直接/间接直接/间接

若(ACC)>=0 且(数据存储器地 址)>=0

(ACC)-(数据寄存器地址)×2→ALU输出。 若ALU输出>=0,则(ALU输出)× 2+1→ACC

否则(ACC)×2→ACC 15 SUBS

1 ACC

ACC)-((数据寄存器地址)×

SUBT

2 →ACC 若SXM=1,则(数据存储单元) 用符号扩展

若SXM=0,则(数据存储单元)

不用符号扩展

ACC(15:0))XOR(数据寄存器

地址) →ACC(15:0) (ACC(31:1)) →ACC (31:16)

或(ACC(31:0))XOR lk× 2 shift

(TREG(3:0))

1

正被除数放在ACC的低16位,ACC的高位清0;16位的正除数放在数据存储单元中。执行SUBC指令16次。;最后一次SUBC指令完成后ACC的低16位是除数的商,ACC的高16为是余数。若ACC和存储单元的内容为负,则不能用SUBC实现除法。若16位被除数的有效数字少于16位可将它放在ACC中并左移,左移的位数为前面非有效的0的个数,SUBC指令执行的次数为16减去移位次数。执行该指令不会因正溢或负溢而饱和。

ACC减去数据存储单元的内容,抑制符号扩展。不管SXM为何值,数据存储单元的

直接/间接内容都作为无符号处理。ACC还是作为有 符号数。若相减结果有借位清0,若没有借位C置1。

ACC减去左移后的数据存储单元的内容,移位次数由TREG的低4位确定。SXM控制是否对

直接/间接数据存储单元的内容作符号扩展。 XOR

→ACC(31:0)

16 ZALR

或(ACC(31:0))XOR lk×2→ ACC(31:0)

(数据存储器地址) →ACC (31:16)

8000h→ACC(15:0)

直接和间接寻址时ACC的低16位和被寻址的数据存储单元的内容作异或运算,结果

存在ACC的低16位,ACC的高16位不变。 使用长立即数寻址时,长立即数左移,数1直接/间接据操作数没有占用的位填0,然后和ACC 中的32位数作异或运算。 2长立即数

1

数据存储单元的内容送到ACC的高16位, 直接/间接ACC的低15位清0,第15位置1。 55

表3 辅助寄存器指令 ADRK 指令功能

(当前AR)+k→当前AR 若(当前AR)≠ 0,

则操作数→PC 否则(PC)+2→PC 按指令要求的方式修改(当前

AR)和(ARP) (当前AR)与(AR0)比较,并把结果放在状态寄存器ST1的 TC位 (数据存储器地址)→ARx

k→ARx lk→ARx 按指令指定的方式修改(当前

AR)和(ARP) (ARx)→数据寄存器地址 (当前AR)-K→当前AR 周

寻址方式指令说明 8位立即数按右对齐方式与当前辅助寄存器1 值相加。

若当前辅助寄存器的内容不为0,程序控制4 转到指定的程序存储器地址;否则执行下一

条指令。对当前AR缺省的修改方式是减1。2 间接

在进入循环前将辅助寄存器(作循环计数器)初始化为N-1,可执行N次循环。 该指令完成由操作数指定的比较;

若CM==00,测试是否(当前AR)=(AR0); 若CM==01,测试是否(当前AR)<(AR0); 1 直接/间接

若CM==10,测试是否(当前AR)>(AR0); 若CM==11,测试是否(当前AR)=(AR0); 若条件为真,TC位置1;否则TC位清0。

1 直接/间接指定数据寄存器单元中的内容。8位常数或1 短立即数16位常数加载到指定的辅助寄存器。不论2 长立即数SXM为何值,所指定的常数均为无符号整数。

直接寻址方式下MAR指令的作用同NOP指

1 间接 令。间接寻址方式下可以修改辅助寄存器的

值和ARP的值,对寄存器的引用不起作用。 将指定的辅助寄存器(ARx)的内容拷贝到指 1 直接/间接

定的数据存储单元。

当前辅助寄存器(由ARP指定的那个)的内 1 容减去8位立即数,结果存在当前辅助寄存 器中。 BANZ CMPR

LAR

MAR SAR SBRK

表4 TREG、PREG和乘法指令 周

寻址方式指令说明 按ST1寄存器中PM状态位指定的方式将PREG

(ACC)+移位后的(PREG)→的内容进行移位,把移位后的值与ACC的内 1

ACC 容相加。状态寄存器中的SXM位对APAC指令 无影响。

(数据寄存器地址)→PREG被寻址的数据寄存单元的内容加载到PREG的 1 直接/间接

(31:16) 高16位。PREG的低16位不变。

(数据寄存器地址)→TREG 1 直接/间接被寻址的数据寄存单元的内容加载到TREG。

指令的数据寄存单元的内容加载到TREG。按

(数据寄存器地址)→TREG PM状态位指定的方式对乘积寄存器的内容进

(ACC)+移位后的(PREG)→1 直接/间接行移位,并把移位后的值与ACC相加,结果

ACC 放在ACC中。若相加结果有进位则C=1,否 则C=0。

指令将数据寄存单元的内容加载到TREG。按PM状态位指定的方式对乘积寄存器的内容进(数据寄存器地址)→TREG

(数据寄存器地址)→数据寄存行移位,并把移位后的值与ACC相加,结果 器地址+1 1 直接/间接放在ACC中。指定的数据存储单元的内容拷

(ACC)+移位后的(PREG)→贝到地址加1的数据存储单元。该指令移动 ACC 数据的功能不能用于外部数据寄存器或存储 器映射的寄存器。

(数据寄存器地址)→TREG 1 直接/间接指令的数据寄存单元的内容加载到TREG。按 指令功能

56 APAC LPH LT LTA LTD LTP

PM状态位指定的方式对乘积寄存器的内容进

行移位,并把移位后的值送到ACC中。

指令的数据寄存单元的内容加载到TREG。按

PM状态位指定的方式对乘积寄存器的内容进(数据寄存器地址)→TREG LTS 1 直接/间接行移位,并用ACC的内容减去(PREG)移位ACC-移位后的(PREG)→ACC 后的值送到ACC中。若相减的结果产生了借 位则进位位C清0;否则进位位C置1。

PC加1即PC=PC+1 MAC指令可以1)按PM状态位指定的方式把 (PC)→MSTACK 先前的乘积移位,再与ACC的内容相加;2)

把指定的数据存储单元的内容加载到TREG;16位程序存储器地址→PC (ACC)+移位后的(PREG)→3)将数据存储单元的内容乘以指定的程序存 储器地址中的内容。若程序存储器是片内ACC

(数据存储器地址)→TREG RAM块BO,则CNF位必须置1。 (数据存储器地址)×(16位 当重复MAC指令时,每重复一次包含在PCMAC 3 直接/间接程序存储器地址)→PREG 中的程序存储器地址加1。若使用间接寻址 指定数据存储器地址则每次重复时就可以访间接寻址时,按指定方式修改 问新的数据存储器地址;若使用直接寻址方(当前AR)和(ARP) 式指定的数据存储器地址是常数,重复时不当(重复计数器)≠0时, 会对其进行修改。 (重复计数器)-1→重复计数

器。

(MSTACK)→PC

操作与MAC相同,增加了(数据该指令与MAC的不同之处在于片内增加了数MACD 存储器地址)→数据存储器地址3 直接/间接据的移动 +1

TREG的内容乘以被寻址的数据存储单元的内

(TREG)×(数据存储器地址)容;使用短立即数时TREG的内容乘以有符号MPY 1 直接/间接→PREG(TREG)×k →PREG 的13为常数。短立即数值右对齐,相乘前无

任SXM如何都将该常数用符号扩展。

周指令功能 寻址方式指令说明 ACC)+移位后的(PREG)→ACCTREG的内容乘以被寻址的数据存储单元的内MPYA (TREG)×(数据存储器地址)1 直接/间接容;按PM状态位指定的方式对先前的乘积进 →PREG 行移位,并将移位后的值加到ACC中。

TREG的内容乘以被寻址的数据存储单元的内(ACC)-移位后的(PREG)→容;按PM状态位指定的方式对先前的乘积进MPYS ACC(TREG)×(数据存储器地1 直接/间接行移位,并从ACC中减去移位后的值,结果址)→PREG 放在ACC中。

TREG的无符号数乘以被寻址的数据存储单元 无符号数(TREG)×无符号数的无符号数;作无符号相乘不能使用PM=3这MPYU 1 直接/间接(数据存储器地址)→PREG 种移位模式,因为此时该移位器总要将PREG

的值进行符号扩展。

按指定的方式将PREG的内容移位,并把移位PAC 移位后的(PREG)→ACC 1 后的结果加载到累加器。

(ACC)-移位后的(PREG)→SPAC不受SXM影响,PREG的值总是要作符号SPAC 1 ACC 扩展

按PM指定的方式把SPEG的内容移位,移位后

的高16位数值存到数据存储单元。若右移6(PREG)移位后的高16位→数SPH 1 直接/间接位则高位用符号扩展,低位丢失;若左移则高据存储器地址 位丢失而低位填0。PREG和ACC中的值都保 持不变。

按PM指定的方式把SPEG的内容移位,移位后(PREG)移位后的低16位→数SPL 1 直接/间接的低16位数值存到数据存储单元。若右移6据存储器地址 位则高位用符号扩展,低位丢失;若左移则高 57 移位后的(PREG)→ACC

SPM SQRA SQRS

位丢失而低位填0。PREG和ACC中的值都保持不变。 指令字中的最低2位拷贝到状态寄存器ST1

constant→乘积移位模式(PM)

1 的乘积移位模式(PM)位。PM控制PREG输出 位

移位器的移位模式。

(ACC)+(PREG)移位后的值→按PM位指定的方式把PREG的内容移位,并 ACC 将其加到累加器。被寻址的数据存储单元的

(数据存储器地址)→TREG 1 直接/间接值加载到TREG,计算其平方。 (TREG)×(数据存储器地址) →PREG

(ACC)-(PREG)移位后的值→按PM位指定的方式把PREG的内容移位,累 ACC 加器减去移位后的值。被寻址的数据存储单

(数据存储器地址)→TREG 1 直接/间接元的值加载到TREG,计算其平方。 (TREG)×(数据存储器地址) →PREG

表5 转移指令 B BACC 指令功能

16位程序存储器地址→PC 间接寻址 ACC(15:0)→PC

若(当前AR)≠0,则(16位程序存储

器地址)→PC 否则(PC)+2→PC 周期4 指令说明

按指令要求的方式修改当前辅助寄存器和ARP的内容,把控制转到指令指定的程序存储器地址。 控制转换到ACC的低位字所指定的地址。

如果当前辅助寄存器的内容不为0,程序控制转到指定的程序存储器地址;否则执行下一条指令。对当前AR缺省的修改方式是减1。 指令说明

如果指定的条件都满足则分支到指定的程序存储器地址。注意不是所有的条件组合都有意义。 条件EQ表示ACC=0;NEQ表示ACC≠0; 条件LT表示ACC<0;LEQ表示ACC<=0; 条件GT表示ACC>0;GEQ表示ACC>=0; 条件NC表示C=0;C表示C=1; 条件NOV表示OV=0;OV表示OV=1;

条件BIO引脚为低表示C=0;C表示C=1; 条件NTC表示TC=0;TC表示TC=1; UNC标志无条件。

当前程序计数器(PC)加1后压入栈顶(TOS)。再将累加器的低位字加载到PC,程序从该地址继续运行。

当前程序计数器(PC)加2后压入栈顶(TOS)。再将程序存储器地址的内容加载到PC。 该指令为间接寻址方式。

若指定的条件都满足则控制转到指定的程序存储器地址。同样应注意不是所有的条件组合都有意义。 处理器有32个中断向量,每个K(0-31)值代表一个中断向量。该指令是软件中断,它使程序控制转换到与K值对应的地址,有该地址引导到相应的中断服务程序。INTM位和中断屏蔽位都不影响INTR指令。 该指令将程序计数器强置为不可屏蔽中断向量地址24H。它与硬件不可屏蔽中断NMI的效果相同。 58

4

BANZ 4 2周

指令功能 期

若条件都满足则(16位程序存储器地 BCND 址)→PC 4

否则(PC)+2→PC 2

CALA

PC+1→TOS ACC(15:0)→PC

PC+2→TOS

(16位程序存储器地址)→PC 按指令要求的方式修改(AR)和 (ARP)

若条件都满足则PC+2→TOS 且(16位程序存储器地址)→PC 否则PC+2

(PC)+1→堆栈 相应的中断向量地址→PC (PC)+1→堆栈 24H→PC 4

CALL 4 CC 42

INTR 4 NMI

4

RET RETC

1→INTM TOS)→PC 堆栈上弹一级

如果条件都满足则(TOS)→PC 同时堆栈上弹一级,否则继续 (PC)+1→堆栈

22h→PC 4424 TRAP

子程序和中断服务程序以RET指令结束,使程序控制返回到调用程序或被中断的程序。

如果条件都满足则执行标准的返回但不是所有的条件组合都有意义。

该指令是软件中断使控制转换到程序存储单元22h,PC加1后推入硬件堆栈。在程序空间22h可以存放分支命令使控制转到TRAP例程。TRAP指令是不可屏蔽的。

注:对表中的条件指令,如果条件成立,则所需的指令周期为4,如果条件不成立,则所需的周期为2。 表6 控制指令 BIT 指令功能 周

寻址方式期 指令说明

(数据bit number

1

(15-(bit code))

→TC (数据bit number(15-TREG(3:0))→1 TC

0→控制位 指令功能

1 BITT

CLRC 该指令将数据存储单元中被指定位的值拷贝到状态寄 直接/间接存器ST1中的TC位。指令中bit code的值0-15分别 对应数据存储器数值bit number的第15-0位。

该指令将数据存储单元中被指定位的值拷贝到状态寄存器ST1中的TC位。数据寄存器数值的bit number由

直接/间接TREG中低4位包含的bit code的值指定。TREG的低4 位与bit number的对应方法同bit code 与number的对应相同。

把指定的控制位清0。也可用LST指令加载ST0,ST1。 控制位有:C,CNF,INTM,OVM,SXM,TC,XF。 指令说明

该指令使程序停止运行,直至CPU接收到没被屏蔽的硬件中断(内部或外部的),NMI或复位。该指令使C2xx进入降功耗模式。C2xx在进入降功耗模式前将PC加1;在空闲状态中PC不变。即使INTM为1未被屏蔽的中断也可使

C2xx退出空闲状态。当未被屏蔽的中断使C2xx退出空闲状态后,CPU的工作取决于INTM:若INTM为0,程序分支到它所响应的中断服务程序。若INTM为1,程序从IDLE后面的指令继续执行。因NMI或复位退出空闲状态时,则不管INTM为何值都执行相应的中断服务程序

被寻址的数据寄存单元的低9位或9位的立即数值加载到状态寄存器ST0中的DP。也可以用LST指令加载DP。

用被寻址的数据寄存器的值加载状态寄存器但应注意:1)LST #0操作不影响ST1寄存器中的ARB字段。2)LST #1操作加载到ARB的值也加载到ARP。3)状态寄存器中的保留位总是读1,写入对其无影响。4)间接寻址时若操作数指定下一AR值则用所寻址的数据存储单元中的。高3位加载ARP。子程序调用或中断后可用LST指令恢复状态寄存器。

该指令只影响PC,不作其它任何操作。它可用于建立流水线和延时。

硬件堆栈是后进先出的8个单元。若弹出的次数多于7次则堆栈中的所有值将都相同。没有检查堆栈是否下溢的措施。

栈顶的值弹出并传送到指令指定的数据存储单元。其 59 周

寻址方式期

IDEL

PC加1,等待没被屏蔽的或不可屏蔽的硬件2 中断

LDP

(数据寄存器地址)的低9位→DP 或k→DP 22直接/间接短立即数

LST

(数据存储器地址)→状态寄存器STm 2 直接/间接

NOP POP POPD

PC加1即PC=PC+1 1 直接/间接直接/间接

0→ACC(31:16) 1堆栈上弹一级 (TOS)→数据存储器1

PSHD

地址 堆栈上弹一级 (数据存储器地址)

→(TOS) 堆栈下压一级 堆栈下压一级 ACC(15:0)→TOS (数据存储器地址)

→RPTC k→RPTC 1→control bit

它操作同POP。没有检查堆栈是否下溢的措施。 将指令指定的数据存储单元的内容传送到栈顶。堆栈 中低7个单元的值都下移一级。堆栈中最低一级单元

的内容丢失。

累加器的低位字节拷贝到硬件堆栈的栈顶。若弹出前 压入的次数多于8次,则随着每次的压入堆栈的第一 个值将丢失。

直接或间接寻址时,被寻址的数据存储单元的内容加载到重复计数器(RPTC);使用短立即数寻址时,8位立即 直接/间接

数加载到RPTC。RPT后面的那条指令重复n次.n为 短立即数

RPTC的初始值加1。该指令是不可中断的,器件复位时RPTC被清0。重复指令本身不能重复。

把指定的控制位置1。也可用LST指令加载ST0和 ST1。

指令字中的最低2位拷贝到状态寄存器ST1的乘积移 直接/间接位模式PM位(ST1的 位1和位0。

直接寻址时,不论ST0中的数据页面指针DP为何值,指定的状态寄存器总是被保存到0页;不必修改DP,执

直接/间接行该指令时处理器自动访问0页。使用间接寻址时,

由所选用的辅助寄存器指定存储地址;因此状态寄存器的,值可以保存到数据寄存器的任何也面内。 1

PUSH 1 RPT 11

SETC SPM

1

constant→乘积移位模式PM位constant为1 0-3 (状态寄存器TSm)→ 1

数据寄存器地址

SST

表7 I/O和存储器指令 指令功能 周期 指令说明

BLDD PC=PC+1

(PC)→MSTACK,lk→PC,(源)→目的 间接寻址时按指令指定的方式修改(AR)和(ARP) (PC)+1→PC

当(重复计数器)≠0 时

(重复计数器)-1→重复计数器(MSTACK)→PC

BLPD PC=PC+1

(PC)→MSTACK,pma→PC,(源)→目的 间接寻址时按指令指定的方式修改(AR)和(ARP (PC)+1→PC, 当(重复计数器)≠0 时 (重复计数器)-1→重复计数器 (MSTACK)→PC

DMOV

数据存储器地址)→数据存储器地址+1 直接或间接寻址

把“源”指定的数据存储器中的字拷贝到“目的”指定的数据存储单元。源和目的地址可由长立即数地址或数据存储器地址指定。但必须是:如果源地址为长立即数,则目3

的地址只能为直接或间接;如果源地址为直接或间接,则目的地址只能为长立即数。该指令不能用于存储器映射的寄存器。使用RPT指令重复BLDD操作期间中断被禁止。 把'源'指定的程序存储器中的字拷贝到'目的'指定的数据存储单元。源空间的第一个字由长立即数指定.3

目的地址可由辅助寄存器或数据存储器地址指定。使用RPT指令重复BLDD操作期间中断被禁止。

指定的数据存储单元的内容拷贝到地址加1的单元,拷贝时原来单元中的内容保持不变。该指令只能用于片内数据RAM块。可以工作于任何1配置的RAM块但要求这些RAM块配置为数据存储器。数据的移动可以跨越块的边界进行。此功能不能用于外部数据存储器。若指令指定了外部存储器地址,该指令读指定的 60 IN

PA→地址总线A15-A0

数据总线D15-D0→数据存储器地址

(PA)→数据存储器地址 PA→地址总线A15-A0 (数据存储器地址)→数据总线D15-D0

数据存储器地址→(PA) lk→数据存储器地址,直接或间接寻址 PC→PC+1 ,(PC)→MSTACK (ACC(15:0))→PC, (pma)→数据存储器地址 间接寻址时按指令指定的方式修改(AR)和(ARP) (PC)+1→PC,

当(重复计数器)≠0 时 (重复计数器)-1→重复计数器 (MSTACK)→PC

PC→PC+1, (PC+1)→MSTACK (ACC(15:0))→PC+1 , 数据存储器地址→(pma)

间接寻址时按指令指定的方式修改(AR)和(ARP)

(PC)+1→PC , 当(重复计数器)≠0 时 (重复计数器)-1→重复计数器 (MSTACK)→PC+1

2

OUT 3 SPLK 2 TBLR 3

存储单元但不进行其它操作。数据移动对于实现DSP总的Z^(-1)延时很有用处。

该指令从I/O单元读入16位值,将其送到指定的数据存储单元。IS线变低表示进行I/O访问。直接或间接寻址。

该指令将数据存储单元中的16位值写到指定的I/O端口。IS线变低表示进行I/O访问。直接或间接寻址。

将16位常数写到任意的数据存储单元。

该指令将程序存储单元中的一个字传送到指令指定的数据存储单元。程序存储单元中的地址由累加器的低16位指定。该指令先从程序存储单元读出然后写入指定的数据存储单元。直接或间接寻址。

TBLW

该指令将数据存储单元中的一个字传送到指令指定的程序存储单元。数据存储单元的地址由指令指定,程序存储器地址由累加器的低16位确3

定。该指令先从数据存储单元读出然后写入指定的程序存储单元。直接或间接寻址。

3 典型指令说明

本节在指令集的基础上,以几个常用的指令为例,说明了在编程过程中怎样使用指令集中给出的指令。在举例时,直接寻址时一律认为DP指针已经指向要寻址的数据区,就不用再重新装载DP,而间接寻址时则认为ARP已经指到当前AR,从而也不用再单独声明当前AR的值。

1 对累加器的加操作 ADD指令

ADD指令执行的操作是将数据存储器单元的数 或立即数左移后加至累加器。移位时,低位填0,高位在SXM=1时为符号扩展,在SXM=0时填0。结果存在累加器中。寻址短立即数时,加操作不受SXM的影响,且不能重复执行。 ADD 5,2

;(DP=4:200-280h) 将数据存储器单元205的内容左移2 ;位之后与ACC相加,结果存在ACC ADD

*+,2,AR0

;( ARP=4,AR4=282)将数据存储器单元282的内容左移2位之 ;后加至ACC,结果存在ACC,指令执行后AR4=283,ARP=0

ADD ADD #2

;短立即数2与ACC相加,结果存在ACC ;长立即数1111h与ACC相加,结果存在ACC #1111h,2

2 和累加器逻辑“与”操作指令AND

61

AND指令用来实现被寻址单元的内容和连接器的逻辑“与”操作,以及长立即数经过移位之后和连接器进行逻辑“与”操作。逻辑“与”操作之后的结果保存在累加器中。 AND 16 ;(DP=4:200-27Fh)将数据存储器单元210h的内容与 ;ACC的内容进行逻辑“与”操作,结果保留在ACC中。

AND * ;(ARP=0,AR0=301h)将数据存储器单元301h的内容与ACC的 ;内容进行逻辑“与”操作,结果保留在ACC中。

AND #00FFh,4 ;将立即数#0FFh左移4位之后和ACC逻辑“与”,结果保留在

;ACC中。

4 条件转移指令BCND

当所规定的条件符合时,控制转移到指定的程序存储器地址。

BCND P1,LEQ ;若ACC的内容小于等于零时,程序转到P1处开始执行。 5 位测试指令BIT

该指令将数据存储器中的指定位的值复制到状态寄存器ST1的TC位。将该指令和BCND指令结合可判断指定位的状态,并根据该位的状态来控制程序的转移。 BIT

0h,15 BCND ;(DP=6)测试300h处的最低有效位。 ;若该位为1,则程序转到P1处执行。 P1,TC

7 清除控制位指令CLRC

CLRC指令将指定的控制位清除为0。指定的控制位为下述控制位之一:

C CNF INTM OVM SXM TC XF CLRC 状态寄存器ST1的进位位 状态寄存器ST1的RAM配置控制位 状态寄存器ST0的中断方式位 状态寄存器ST0的溢出方式位 状态寄存器ST1的符号扩展方式位 状态寄存器ST1的测试/控制标志位 状态寄存器ST1的XF引脚状态位 TC ;将ST1的TC位清零。 注:用LST指令也可装入ST0和ST1寄存器。 9 装载累加器的LACC指令

LACC指令执行的操作是将指定的数据存储器单元的内容或一个16位常量左移后送入累加器。移位时,低位填0,高位在SXM=1时为符号扩展,在SXM=0时填0。

LACC 5,4 ;(DP=8:400-47fh)将数据存储器单元405的内容左移4位之 ;后送到ACC。

LACC *,4 ;(ARP=2,AR2=305h)将数据存储器单元305的内容左移4位之 ;后送到ACC。 LACC #1234h,2

;将长立即数1234h左移2位之后送到ACC。 62 10 装载累加器低位并清零累加器高位指令LACL

LACL指令将被寻址数据存储器单元的内容或者被零扩展的8位常量装入累加器的低16位,累加器的高半部分填零。数据被作为无符号的16位处理,而非二进制补码。无论SXM为何状态,该指令的操作数抑制符号扩展。

LACL LACL #10h 1 ;将10h装载入ACC。 ;(DP=6:300h-37Fh)将数据存储器单元301h的内容装载入 ;ACC

LACL *-,AR4 ;(ARP=0,AR0=301h,(301h)=2)将数据存储器单元301h的

;内容装载入ACC,指令执行完后AR0=302h,ARP=4。 11 修改辅助寄存器指令MAR和装载辅助寄存器指令LAR

MAR指令用来修改辅助寄存器ARP的值,该指令在直接寻址方式下相当于NOP指令。LAR指令用来将数据存储器的值装载入辅助寄存器。LAR和SAR指令可在子程序调用或中断处理时装载和存储辅助寄存器,从而实现在中断或子程序调用时上下文的保存。

MAR *,AR1 ;向ARP装入1。

MAR *+,AR5 ;将当前辅助寄存器(AR1)增1,并向ARP装入5。 LAR AR1,5H ;(DP=4:200-280h)将数据存储器地址205的内容装入AR1寄

;存器。

LAR

LAR AR1,#50H AR1,#1234H ;将短立即数50h装入AR1寄存器。 ;将长立即数1234h装入AR1寄存器。 12 装载数据页指针指令LDP

该指令将被寻址数据存储器单元的9位最低有效位或9位立即数转入状态寄存器ST0的数据页指针DP。DP也可由LST指令装入。

LDP 5 ;(DP=5:地址280h-2FFh)。 17 重复执行下一条指令RPT

若使用直接或间接寻址,则被寻址的数据存储器单元中的值送入重复计数器(RPTC);若使用短立即数寻址,则8位立即数送入RPTC。紧接RPT后的那条指令被执行n次,n为RPTC初值加1。由于在上下文切换时不能保存RPTC的值,所以重复循环被认为是多周期指令,它不能被中断。器件复位时,RPTC被清零。

PRT

#20 NOP ;执行NOP指令21次。

18 移位并存储累加器高位指令SACH

SACH指令将整个累加器复制到输出移位寄存器中,然后全部32位数左移0至7位,再将移位后数值的高16位复制到数据存储器。在移位时,低位填零,高位丢失,累加器内容不变。

SACH 10h,1 ;(DP=4:200h-27Fh)将ACC的左移一位,高16位存至数据 63

;存储器单元20Ah中。

SACH *+,AR2 ;(ARP=1)将ACC的高16位存至AR1指向的数据存储器单 ;元,操作完成之后ARP=2。

19 移位并存储累加器低位指令SACL

SACL指令将整个累加器复制到输出移位寄存器中,然后全部32位数左移0至7位,再将移位后数值的低16位复制到数据存储器。在移位时,低位填零,高位丢失,累加器内容不变。

SACL 10h,1 ;(DP=4:200h-27Fh)将ACC的左移一位,低16位存至数据 SACH *+,AR2

;存储器单元20Ah中。 ;(ARP=1)将ACC的高16位存至AR1指向的数据存储器单 ;元,操作完成之后ARP=2。 64

22 设置控制位指令SETC

SETC指令设置指定的控制位为1。LST指令也可用于装载ST0和ST1寄存器。指定的控制位为下述控制位之一: C 状态寄存器ST1的进位位

CNF INTM OVM SXM TC XF SETC 状态寄存器ST1的RAM配置控制位 状态寄存器ST0的中断方式位 状态寄存器ST0的溢出方式位 状态寄存器ST1的符号扩展方式位 状态寄存器ST1的测试/控制标志位 状态寄存器ST1的XF引脚状态位 TC ;将ST1的TC位置1。

23 存储长立即数至数据存储器指令SPLK

SPLK指令将一个16位值写入任何一个数据存储器单元。在直接寻址方式下使用该指令对数据存储器单元赋值时,通常需要将数据页指针DP指向该数据存储器单元所在的数据页。 SPLK #30h,5

SPLK #1122h,*+,AR4

指令执行前:ARP=0,AR0=400h,(400h)=0h,

指令执行后:ARP=4,AR0=401h,(400h)=1122h ;(DP=4)将30h存至数据存储器单元205h处。

由于篇幅有限,本节以几个比较典型的指令为例,介绍了编程过程中指令的使用方法,需要注意的是直接寻址时DP指针一定要定位到要访问的数据存储区,间接寻址时当前ARP必须设置正确,否则不能正确访问单元。关于TMS320C24X指令集每条指令的详细介绍请参考TMS320C24x DSP Controllers Reference Guide CPU and Instruction Set。 65

因篇幅问题不能全部显示,请点此查看更多更全内容