bodu.com

电子/电气工程师博客

正文 更多文章

TMS320C24x指令说明及举例

TMS320C24x指令说明及举例

徐丽红

.1           累加器、算术和逻辑运算指令

1. ABS   累加器取绝对值指令

语法:ABS

该指令对ACC的内容取绝对值,使进位位C=0。注意:8000 000HABS值与溢出方式位OVM有关,当OVM=0时,8000 000HABS值仍然

8000 000H;当OVM=1时,8000 000HABS值是7FFF FFFFH。由于对8000 000H的操作有两种可能的结果,所以使溢出位OV=1

       1  如果(ACC=0ABCH,执行指令:

                 ABS

                 如果(ACC=0ABCHC=0

2  如果(ACC=0ABC0,执行指令:

                 ABS

                 如果(ACC=5440 0000HC=0

2. ADD  累加器加运算指令

语法: ADD            dma[shift]                            直接寻址

ADD            dma16                                  直接寻址并左移16

ADD            ind[shift[ARx]]                间接寻址

ADD            ind16[ARx]                     间接寻址并左移16

ADD            #k                                             短立即寻址

ADD            #1k[shift]                             长立即寻址

该指令将被寻址的数据存储器的内容或一个长立即数先左移(短立即数除外),再与累加器相加,结果存放在累加器中。移位时,低位填0,高位在符号扩展位SXM=1时扩展符号,在SXM=0时填0。该指令影响COV位。支持立即寻址、直接寻址和间接寻址。

       1  如果当前DP=4(寻址范围0200H~027FH),(203H=0F94H

ACC=01F6HSXM=0,执行指令:

                     ADD     3H1

203H单元的内容先左移1位,再与ACC相加,结果

ACC=211EHC=0

2  如果当前DP=4(寻址范围0200H~027FH),ARP=4AR4=203H,(203H=0F94H,(ACC=01F6HSXM=0,执行指令:

                   ADD     *+,0AR1

即以AR4辅助寄存器的内容作为地址,其指向的203H中的内容(左移0位)与ACC相加,结果(ACC=211EHC=0ARP=1AR4=204H

       3  如果(ACC=01F6HSXM=0,执行指令:

ADD     #10H

即短立即数10HACC相加,结果(ACC=206HC=0

3. ADDC      累加器带进位加运算指令

语法: ADDC          dma                                          直接寻址

ADDC          ind[ARx]                              间接寻址

该指令不进行符号扩展,不能进行移位操作,进位位C参与加运算。运算结果影响COV位。支持直接寻址和间接寻址。

          1  如果当前DP=6(寻址范围0300H~037FH),ARP=1AR1=350H

350H=205H,(ACC=0FFF FF00HC=1,执行指令:

ADDC   *

ACC与当前AR1指向的350H中的内容以及C相加,

结果(ACC=106HC=1OV=0

4. ADDS      累加器无符号加运算指令

       语法: ADDS          dma                                   直接寻址

                     ADDS          ind[ARx]                       间接寻址

       该指令不进行符号扩展,存储器中的操作数按无符号处理,不能进行移位操作,ACC的内容仍为有符号数。运算结果影响COV位。支持直接寻址和间接寻址。

        1  如果当前DP=6(寻址范围0300H~037FH),(ACC=30H

301H=0FF00H,执行指令:

ADDS   1

ACC301H中的内容相加,结果(ACC=0FF30HC=0OV=0

5. ADDT      累加器按T寄存器移位加运算指令

       语法: ADDT          dma                                   直接寻址

ADDT         ind[ARx]                       间接寻址

       该指令通过T寄存器的低4位来决定加运算的数据的左移位数,移位后再与ACC相加。数据存储器的符号扩展由SXM位控制。运算结果影响COV位。支持直接寻址和间接寻址。

        1  如果当前DP=6(寻址范围0300H~037FH),(ACC=0A123H

310H=789HT=6602H,当前ARP=1AR1=310H,执行指令:

ADDT   * —,AR6

AR1指向的310H单元的数据先左移2位,再与ACC相加,

结果(ACC=0BF47H,(AR1=309H,当前辅助寄存器为AR6C=0OV=0

6. SUB         累加器减运算指令

       语法: SUB      dma[shift]                            直接寻址

SUB      dma16                                  直接寻址且左移16

SUB      ind[shift[ARx]]                间接寻址

SUB      ind[shift[ARx]]                间接寻址且左移16

SUB     #k                                             短立即寻址

SUB     #1k[shift]                             长立即寻址

       该指令将被寻址的数据存储器的内容或一个长立即数先左移(短立即数除外),再从累加器中减去,结果存放在累加器中、,移位时,低位填0,高位在符号扩展位SXM=1时扩展符号,在SXM=0时填0。该指令影响COV位。支持立即寻址、直接寻址和间接寻址。

       1  如果当前DP=4(寻址范围0200H~027FH),(203H=94H

ACC=01F6HSXM=0,执行指令:

SUB      3H1

203H单元的内容先左移1位,再与ACC相减,

结果(ACC=0CEHC=1

2  如果当前DP=4(寻址范围0200H~027FH),ARP=4AR4=203H,(203H=94H,(ACC=01F6HSXM=1,执行指令:

SUB      *+,0AR1

即以AR4辅助寄存器的内容作为地址,其指向的203H中的内容(左移0位)与ACC相减,结果(ACC=162HC=1ARP=1AR4=204H

       3  如果(ACC=01F6HSXM=0,执行指令:

SUB  #10H

即短立即数10HACC相减,结果(ACC=1E6HC=1

7. SUBB       累加器带借位减运算指令

语法: SUBB         dma                                   直接寻址

SUBB          ind[ARx]                       间接寻址

       该指令不进行符号扩展,不能进行移位操作,进位位C取反参与减运算。运算结果影响COV位。支持直接寻址和间接寻址。

          1  如果(ACC=10HC=0 DP=6(寻址范围0300H~037FH),

305H=20H,执行指令:

SUB  5

则结果为(ACC=0FFFF FFEFHC=0

          2  如果(ACC=10HC=1 ARP=0AR0=305H,(305H=02H,执行指令:

SUB  *

则结果为(ACC=0DHC=1AR0=306H

8. SUBC       累加器条件减运算指令

语法: SUBC           dma                                 直接寻址

SUBC           ind[ARx]                     间接寻址

       该指令用于实现除法。如果被除数和除数都是正数,将被除数放入累加器低16位,高16位清0,除数存放在指定的数据存储器中,用RPT指令重复执行SUBC指令16次,则所得的商在累加器的低16位中,余数在累加器的高16位中。该指令影响COV位。支持直接寻址和间接寻址。

1  如果(ACC=45H,当前DP=4(寻址范围0200H~027FH),

202H=7H,执行下列程序:

RPT      #15

SUBC  2

              则结果为(ACC=6 0009H,其中商是9,余数是6

9. SUBS       累加器无符号减运算指令

语法: SUBS           dma                                   直接寻址

SUBS           ind[ARx]                       间接寻址

        该指令不进行符号扩展,存储器中的操作数按无符号数处理,不能进行移位操作,ACC的内容仍为有符号数。运算结果影响COV位。支持直接寻址和间接寻址。

1  如果(ACC=0ABC0H,当前DP=4(寻址范围0200H~027FH),

202H=0A557H,执行下列程序:

SUBS  2

则结果为(ACC=669HC=1

10.  SUBT    累加器按T寄存器移位减运算指令

语法: SUBT           dma                                   直接寻址

SUBT           ind[ARx]                       间接寻址

       该指令通过T寄存器的低4位来决定减运算的数据的左移位数,移位后再从累加器中减去。数据存储器的符号扩展由SXM位控制。运算结果影响COV位。支持直接寻址和间接寻址。

1  如果(ACC=0ABC0H,当前DP=4(寻址范围0200H~027FH),

202H=0A557H,(T=8HSXM=0,执行下列程序:

SUBT  2

则结果为(ACC=0FF5B 54C0HC=0

11. AND       累加器“与”逻辑运算指令

语法: AND            dma                                   直接寻址

AND            ind[ARx]                       间接寻址

       SUB             #1k[shift]                      长立即寻址

                     SUB             #1k16                            长立即寻址并左移16

       该指令将被寻址的数据存储器的内容、或一个先左移的长立即数和累加器相“与”,结果存放在累加器中。支持立即寻址、直接寻址和间接寻址。

1  如果(ACC=0888H,执行指令:

AND  #888H4

立即数888H左移4位,再和ACC逻辑“与”运算,

结果(ACC=880H

2  如果(ACC=888H,当前DP=4(寻址范围0200H~027FH),

22FH=8080H,执行指令:

AND  2FH

ACC2FH单元的数相“与”,结果(ACC=80H

12. OR         累加器“或”逻辑运算指令

语法: OR               dma                                   直接寻址

OR               ind[ARx]                       间接寻址

OR               #1k[shift]                      长立即寻址

OR               #1k16                            长立即寻址并左移16

       该指令将被寻址的数据存储器的内容或一个先左移的长立即数和累加器相“或”,结果存放在累加器中。支持立即寻址、直接寻址和间接寻址。

1  如果(ACC=1234H,执行指令:

OR  #1234H4

立即数1234H左移4位后累加器相“或”,结果(ACC=1 3374H

2  如果(ACC=1234HARP=0AR0=230H,(230H=0F0EH

执行指令:

OR  *

则结果为(ACC=1F3EHAR0=229H

13. XOR      累加器“异或”逻辑运算指令

语法: XOR            dma                                   直接寻址

XOR            ind[ARx]                       间接寻址

XOR            #1k[shift]                      长立即寻址

       XOR            #1k16                            长立即寻址并左移16

       该指令将被寻址的数据存储器的内容、或一个先左移的长立即数和累加器相“异或”,结果存放在累加器中。支持立即寻址、直接寻址和间接寻址。

1  如果(ACC=4567 89ABH,执行指令:

XOR  #0CDEFH4

结果为(ACC=456B 575BH

2  如果(ACC=1234HARP=0AR0=230H,(230H=0F0EH

执行指令:

XOR  *+,AR3

结果为(ACC=1D3AHARP=3

14. CMPL    累加器按位取反(非)指令

语法:  CMPL      

       指令将累加器的内容按位取反。

1  如果(ACC=1234 5678H,执行指令:

CMPL

                 结果为(ACC=0EDCB A987H

15.  NEG      对累加器求补指令

语法:  NEG

该指令对累加器中的内容进行求补运算。当(ACC=0时,该指令使C=1;否则使C=0。当(ACC=8000 0000H时,如果状态寄存器的溢出方式位OVM=0,则求补结果(ACC=8000 0000HOV=1;如果OVM=1,求补结果

ACC=7FFF FFFFHOV=1。该指令影响COV位。      

1  如果(ACC=1234H,执行指令:

NEG

                 结果为(ACC=0FFFF EDCC H

2  如果(ACC=8000 0000HOVM=1执行指令:

                 NEG

                 结果为(ACC=7FFF FFFFHOV=1

16.  LACC   数据左移后存入累加器指令

语法: LACC          dma[shift]                     直接寻址

LACC          dma16                           直接寻址并左移16

LACC          ind[shift[ARx]]         间接寻址

                     LACC          ind16[ARx]              间接寻址并左移16

                     LACC          #1k[shift]                      长立即寻址

  该指令将数据存储器的数据或一个长立即数左移后,存入累加器。移位时,低位填0,高位在符号扩展位SXM=1时扩展符号,在SXM=0时填0。支持立即寻址、直接寻址和间接寻址。

       1  如果SXM=1,执行指令:

LACC   #0FF00H4

结果是立即数FF00H左移4位后存入累加器,累加器的高位全部填1,即(ACC=0FFFF F000H

2  如果SXM=0ARP=0AR0=230H,(230H=6789H,执行指令:

LACC  *+,4

AR0指向的数据存储器单元230H的数据左移4位后存入累加器中,(ACC=6 7890H

17.  LACL    数据存入累加器低位指令

语法:  LACL        dma                                   直接寻址

LACL           ind [ARx]               间接寻址

LACL           #k                                      短立即寻址

  该指令将数据存储器的数据或一个短立即数存入累加器低16位,高16位清0,不进行符号扩展。支持立即寻址、直接寻址和间接寻址。

1  如果DP=4(寻址范围0200H~027FH),(203H=0ABCDH

执行指令:

LACL  3

则结果(ACC=0ABCDH

2  如果ARP=0AR0=221H,(221H=0ABCDH,执行指令:

              LACL  *+,AR2

则结果(ACC=0ABCDHARP=2AR0=222H

18.  LACT    数据按T寄存器移位后存入累加器指令

语法: LACT           dma                                   直接寻址

LACT           ind [ARx]               间接寻址

       该指令根据T寄存器的低4位左移数据后,存入累加器。移位时,低位填0,高位在符号扩展位SXM=1时扩展符号,在SXM=0时填0。支持直接寻址和间接寻址。

1  如果DP=4(寻址范围0200H~027FH),(203H=0ABCDH

T=0A4H SXM=1,执行指令:

LACT  3

即数据存储器230H单元中的数据左移4位,存入累加器中,结果(ACC=0FFFABCD0H

19.  SACH   累加器高位输出指令

语法: SACH          dma[shift2]                   直接寻址

SACH          ind[shift2[ARx]]       间接寻址

       该指令将累加器的数据先移位0~7位后,将高16位输出至指定的数据存储器。支持直接寻址和间接寻址。

1  如果(ACC=3046 F720H DP=4(寻址范围0200H~027FH),

执行指令:

SACH  25H4

则执行结果为(ACC=3046 F720H,(225H=46FH

2  如果(ACC=3046 F720HARP=0AR0=225H,执行指令:

SACH  *4AR7

则执行结果为(ACC=3046 F720H,(225H=46FH ARP=7

20.  SACL    累加器低位输出指令

语法: SACL           dma[shift2]                   直接寻址

SACL           ind[shift2[ARx]]       间接寻址

       该指令将累加器的数据先移位0~7位后,将低16位输出至指定的数据存储器。支持直接寻址和间接寻址。

1  如果(ACC=1234 5678H DP=6(寻址范围0300H~037FH),

执行指令:

SACL  54

则执行结果为(ACC=1234 5678H,(305H=6780H

21.  NORM        累加器规格化指令

语法: NORM               ind                              间接寻址

该指令将累加器中的有符号数规格化,即将其分成指数和尾数两部分。为了删除多余的符号位,比较累加器的最高两位,如果相同,累加器左移一位,且TC=0;否则TC=1。因此常使用循环语句或使用重复指令(RPT)与NORM指令组合,来删除全部多余的符号位。注意:每当执行一次NORM时,通常要修改当前APR值,由于修改操作是在指令流水线的第四阶段完成的,因此该指令之后的两条指令中不能再有修改ARP的指令,否则将导致错误。该指令影响TC位。

1.  利用NORM      RPT指令对累加器的内容规格化处理。程序如下:

MAR           *AR0                     ;设置AR0为当前辅助寄存器

              LAR             AR0#15          AR0赋初值

              RPT             #14                      ;重复执行15NORM指令

              NORM        *                      ;删除多余的符号位,完成后执行空操作

22.  ROL      累加器循环左移指令

语法: ROL

该指令将累加器的内容依次左移一位,最高位移入CC移入最低位。该指令影响C标志位。

1.     如果(ACC=1111 FFFFHC=0,执行指令:

ROL

              结果(ACC=2223 FFFFHC=0

23.  ROR     累加器循环右移指令

语法: ROR

该指令将累加器的内容依次右移一位,最低位移入CC移入最高位。该指令影响C标志位。

1.     如果(ACC=0FFFF 1111H C=0,执行指令:

              ROR

              结果是(ACC=07FFF 8888HC=1

24.  SFL       累加器算术左移指令

语法: SFL

该指令将累加器的内容依次左移一位,最高位移入C,最低位填0(在这一点与ROL指令有别)。该指令影响C标志位,但不受SXM位影响。

1.     如果(ACC=1111 FFFFHC=1,执行指令:

SFL

              结果是(ACC=2223 FFFFHC=0

25.  SFR       累加器算术右移指令

语法: SFR

该指令将累加器的内容依次右移一位,如果SXM=0,最高位移填0,最低位入C;如果SXM=1,最高位不变,最低位入C。该指令影响C标志位。

1.     如果(ACC=0FFFF 1111H C=0SXM=1,执行指令:

SFR

结果是(ACC=0FFFF 8888HC=1

26.  ZALR    装入累加器高位并清累加器低位指令

语法: ZALR           dma                                   直接寻址

ZALR           ind[ ARx]                     间接寻址

       该指令将指定的数据存储器内容装入累加器的高16位,并将8000H装入累  加器低16位。该指令支持直接寻址和间接寻址。

1  如果ARP=0AR0=221H,(221H=0ABCDH,执行指令:

ZALR  *+,AR2

结果(ACC=0ABCD 8000HARP=2

B.2           辅助寄存器指令

1. BANZ      当前辅助寄存器非零跳转指令

       语法:BANZ     pma[ind[ARx]]                间接寻址

       如果当前辅助寄存器的内容不等于零,则跳转到指定的程序地址上去;否则,执行下一条指令。当前辅助寄存器默认减一修改,支持间接寻址。该指令可用于循环操作。

       1      利用BANZ指令对累加器的内容加6X5,程序如下:

                     LACC          #10                             ;(ACC=10

                     MAR           *AR0                            AR0设为当前辅助寄存器

                     LAR             AR0#4                   AR0初值4

       AAA      ADD            #6                               ;(ACC+6

                     BANZ          AAA                           AR0不等于零则循环,(AR0-1

2. CMPR     当前辅助寄存器与AR0比较指令

       语法:CMPR   CM

       该指令将当前辅助寄存器的内容与AR0的内容进行比较,并将结果存入TC位。比较的内容由CM位来决定:

       若操作数为0,即CM=00,则比较是否当前(APX)=(AR0);

      若操作数为1,即CM=01,则比较是否当前(APX)<(AR0);

       若操作数为2,即CM=10,则比较是否当前(APX)>(AR0);

       若操作数为3,即CM=11,则比较是否当前(APX)≠(AR0)。

       以上比较如果是真,则TC=1;比较如果是假,则TC=0

1  如果AR0=15HAR1=115HARP=1,执行指令:

CMPR  1

即比较结果(AP1)<(AR0),结果TC=0

3. LAR    辅助寄存器装入指令

       语法:LAR              ARx  dma                            直接寻址

                 LAR       ARx  ind[ARx]                间接寻址

                 LAR       ARx  #k                               短立即寻址

                 LAR       ARx  #1k                             长立即寻址

  该指令将指定的数据存储器的内容或一个立即数装入指定的辅助寄存器中。支持立即寻址、直接寻址和间接寻址。

1  如果DP=4(寻址范围0200H~027FH),(203H=94H,执行指令:

LAR        AR63  

结果AR6=94H

2  如果ARP=2AR2=203H,(203H=94H,执行指令:

              LAR        AR6*-,AR6

结果AR6=94H,且AR6为当前辅助寄存器,AR2=202H

4.  MAR    辅助寄存器修改指令

       语法: LAR             dma                                   直接寻址

                     LAR             ind[ARx]                       间接寻址

       该指令支持直接寻址和间接寻址。在直接寻址时是空操作;在间接寻址时是修改ARP和辅助寄存器的值。修改ARP时,ARP的原值存入状态寄存器中的ARB

1  如果ARP=7AR7 =225H,执行指令:

MAR      *+,AR0     

结果ARP=0ARB=7AR7=226H

       2      执行指令:

MAR    5

结果没有任何变化。

5. SAR  辅助寄存器输出指令

       语法:SAR         ARxdma                                 直接寻址

                 SAR  ARxind[ARx]                     间接寻址

       该指令将辅助寄存器中的内容存入指定的数据存储器。支持直接寻址和间接寻址。

1  如果ARP=1AR1 =205H,执行指令:

SAR        *+,AR0     

结果ARP=0AR1=206H,(205H =205H

6. ADRK      当前辅助寄存器与短立即数相加指令

       语法: ADRK         #k                                     短立即寻址

       该指令将给定的8位立即数与当前辅助寄存器的内容进行无符号相加,结果存入当前辅助寄存器中。支持立即寻址。

1  如果ARP=3AR3 =200H,执行指令:

ADRK    #15H

结果AR3=215H

7. SBRK      当前辅助寄存器与短立即数相减指令

       语法: SBRK         #k                                     短立即寻址

       该指令使当前辅助寄存器的内容减去给定的8位无符号立即数,结果存入当前辅助寄存器中。支持立即寻址。

1  如果ARP=3AR3 =200H,执行指令:

SBRK     #15H

结果AR3=1EBH

B.3           TP寄存器和乘法指令

1. APAC       P寄存器与累计器相加指令

语法:APAC

       乘积寄存器       P的内容根据状态寄存器的PM值进行移位,移位后与累加器相加,结果存入累加器中。该指令影响COV位。PM值与移位的对应关系为:

              PM=00时,不移位;

              PM=01时,左移1位;

              PM=10时,左移4位;

              PM=11时,右移6位。

       1.     如果(P=40H,(ACC=0F9HPM=11,执行指令:

APAC   

结果(ACC=0FAH

2. LPH         P寄存器高位装入数据指令

       语法: LPH             dma                                   直接寻址

LPH             ind[ARx]                       间接寻址

       该指令将指定的数据存储器的内容送入乘积寄存器P的高16位,P寄存器的低16位内容不变。支持直接寻址和间接寻址。

1  如果ARP=1AR1=209H,(209H=0F8H,(P=1234 5678H,执行指令:

SAR        *+,AR0     

结果ARP=0AR1=20AH,(P=0F8 5678H

3. LT            T寄存器装入数据指令

语法: LT         dma                                          直接寻址

LT         ind[ARx]                              间接寻址

该指令将给定数据存储器的内容装入T寄存器。支持直接寻址和间接寻址。

1  如果DP=6(寻址范围0300H~037FH),(315H=0ABCDH

执行指令:

                     LT         15H

结果(T=0ABCDH

4. LTA          T寄存器装入数据且累加前次乘积指令

       语法: LTA             dma                                   直接寻址

LTA         ind[ARx]                       间接寻址

该指令将给定数据存储器的内容装入T寄存器。乘积寄存器P的内容根据状态寄存器的PM值进行移位,移位后与累加器相加,结果存入累加器中。该指令是APACLT指令的组合,该指令影响COV位。支持直接寻址和间接寻址。PM值与移位的对应关系见APAC指令。

1  如果DP=6(寻址范围0300H~037FH),(315H=0ABCDH,(P=40H,(ACC=0F9HPM=10。执行指令:

LTA              15H

结果(T=0ABCDH,(ACC=4F9HC=0

5. LTS          T寄存器装入数据且减去前次乘积指令

       语法: LTA             dma                                   直接寻址

LTA         ind[ARx]                       间接寻址

该指令将给定数据存储器的内容装入T寄存器。乘积寄存器P的内容根据状态寄存器的PM值进行移位,移位后从累加器中减去,结果存入累加器中。该指令影响COV位。支持直接寻址和间接寻址。PM值与移位的对应关系见APAC指令。

1  如果ARP=0AR0=205H,(205H=6789H,(P=0FFFFH

ACC=0PM=00。执行指令:

LTS         *+,AR6     

结果ARP=6AR0=206H,(T=6789HACC=0FFFF 0001HC=0

6. LTD         T寄存器装入数据、累加前次乘积并移动数据指令

       语法: LTA             dma                                   直接寻址

LTA         ind[ARx]                       间接寻址

该指令将给定数据存储器的内容装入T寄存器。乘积寄存器P的内容根据状态寄存器的PM值进行移位,移位后与累加器相加,结果存入累加器中。同时将指定的内部数据存储器的内容移动到下一个高位数据存储器中,但对外部数据存储器不起作用。该指令影响COV位。支持直接寻址和间接寻址。PM值与移位的对应关系见APAC指令。

1  如果DP=6(寻址范围0300H~037FH),(315H=0ABCDH,(P=40H,(ACC=0F9HPM=00。执行指令:

LTD             15H

结果(316H=0ABCDH,(T=0ABCDH,(ACC=139HC=0

7. LTP          T寄存器装入数据且将P寄存器存入累加器指令

       语法: LTP             dma                                   直接寻址

LTP             ind[ARx]                       间接寻址

该指令将给定数据存储器的内容装入T寄存器。并将乘积寄存器P的内容根据状态寄存器的PM值进行移位,移位后存入累加器中。支持直接寻址和间接寻址。PM值与移位的对应关系见APAC指令。

1  如果(P=7988HARP=0AR0=225H,(225H=9044H PM=10。执行指令:

LTP         *

结果(T=9044HACC=7 9880H

8. MAC        乘运算并累加指令

       语法: MAC           pma   dma                     直接寻址

MAC           pma   ind[ARx]         间接寻址

该指令将存放前次乘积的P寄存器内容根据状态寄存器的PM值进行移位(PM值与移位的对应关系见APAC指令),移位后与累加器相加。指定的数据寄存器与程序存储器单元的内容相乘,乘积存放在P寄存器。支持直接寻址和间接寻址。影响COV位。

1  如果(ACC=1234 5678H,(P=9876HPM=01

 DP=6(寻址范围0300H~037FH),(305H=16HCNF=1B0区设为程序存储器),(0FF01H=5H,执行指令:

MAC            0FF01H   5H

结果(ACC=1235 8764HC=0,(P=6EH

2  如果(ACC=0FFFF 1234H,(P=0FEDCHPM=00ARP=0AR0=305H,(305H=40HCNF=1B0区设为程序存储器),(0FF00H=2H,执行指令:

MAC            0FF00H*AR3

结果(ACC=1110HC=1,(P=80HARP=3

9. MACD     乘运算、累加且数据移动指令

       语法: MACD        pma   dma                     直接寻址

MACD    pma    ind[ARx]         间接寻址

该指令与MAC指令基本相同,区别之处是将指定的内部数据存储器的内容移动到下一个高位数据存储器中。支持直接寻址和间接寻址。影响COV位。

1  如果(ACC=0FFFFH,(P=0FE00HPM=11ARP=0AR0=305H,(305H=40HCNF=1B0区设为程序存储器),(0FF00H=2H,执行指令:

                     MACD         0F000H    *

结果(ACC=103F7HC=0,(P=80H,(306H=40H

10. MPY      乘运算指令

       语法: MPY            dma                                   直接寻址

MPY        ind[ARx]                       间接寻址

MPY        #k                                      短立即寻址

       该指令将T寄存器的内容与指定数据存储器的内容或一个短立即数相乘,结果存放在P寄存器中。支持立即寻址、直接寻址和间接寻址。

1  如果(T=50H,执行指令:                     

MPY            #4H  

结果(P=140H

2  如果ARP=5AR5=205H,(205H=6H,(T=50H ,执行指令:

                     MPY            *AR0

结果(ARP=0,(P=1E0H

11. MPYA    乘运算并累加前次乘积指令

       语法: MPYA         dma                                   直接寻址

MPYA      ind[ARx]                       间接寻址

该指令将存放前次乘积的P寄存器内容根据状态寄存器的PM值进行移位(PM值与移位的对应关系见APAC指令),移位后与累加器相加。将T寄存器的内容与指定的数据寄存器内容相乘,结果存放在P寄存器中。支持直接寻址和间接寻址。影响COV位。

1  如果DP=4(寻址范围0200H~027FH),(205H=6H,(T=0AH,(P=3456H,(ACC=789AHPM=0,执行指令:

                     MPYA          5

结果(P=3CH,(ACC=0ACF0HC=0

12. MPYS    乘运算并减去前次乘积指令

       语法: MPYS         dma                                   直接寻址

MPYS      ind[ARx]                       间接寻址

该指令将存放前次乘积的P寄存器内容根据状态寄存器的PM值进行移位(PM值与移位的对应关系见APAC指令),移位后从累加器中减去。将T寄存器的内容与指定的数据寄存器内容相乘,结果存放在P寄存器中。支持直接寻址和间接寻址。影响COV位。

1  如果DP=4(寻址范围0200H~027FH),(205H=6H,(T=0AH,(P=3456H,(ACC=789AHPM=0,执行指令:

                     MPYA          5

结果(P=3CH,(ACC=4444HC=1

13. MPYU    无符号乘运算指令

       语法: MPYU         dma                                   直接寻址

MPYU          ind[ARx]                       间接寻址

该指令将T寄存器的无符号数与指定数据存储器的无符号数相乘,乘积存放在P寄存器中。支持立即寻址、直接寻址和间接寻址。

1 T=0FH ARP=2AR2=30DH,(30D H=5H,执行指令:

                     MPYU  

结果(P=4BH

14. PAC        P寄存器送入累加器指令

       语法: PAC

该指令将乘积寄存器P的内容根据状态寄存器的PM值进行移位(PM值与移位的对应关系见APAC指令),移位后存入累加器中。

1 如果(P=1234H PM=10,执行指令:

                     PAC      

结果(ACC=1 2340H

15. SPAC     累加器减P寄存器指令

       语法: SPAC

该指令将乘积寄存器P的内容根据状态寄存器的PM值进行移位(PM值与移位的对应关系见APAC指令),移位后从累加器中减去,结果存入累加器中。影响COV位。

1 如果(P=1234H ACC=567H PM=0,执行指令:

                     SPAC   

结果(ACC=0FFFF F333HC=0

16. SPH        保存P寄存器高位指令

       语法: SPH             dma                                   直接寻址

SPH              ind[ARx]                       间接寻址

该指令将P寄存器的内容根据状态寄存器的PM值进行移位(PM值与移位的对应关系见APAC指令),移位后高16位送入指定的数据存储器中。支持直接寻址和间接寻址。

1P=0FFFF ABCDH PM=11DP=4(寻址范围0200H~027FH),执行指令:

                     SPH       7FH      

结果(27FH=0FFFFH(右移后低位丢失,高位扩展符号),

P=0FFFF ABCDH

17. SPL        保存P寄存器低位指令

       语法: SPL             dma                                   直接寻址

SPL              ind[ARx]                       间接寻址

该指令将P寄存器的内容根据状态寄存器的PM值进行移位(PM值与移位的对应关系见APAC指令),移位后低16位送入指定的数据存储器中。支持直接寻址和间接寻址。

1P=0FFFF ABCDH PM=11DP=4(寻址范围0200H~027FH),执行指令:

                     SPL       7FH      

结果(27FH=0FEAFH(右移后低位丢失,高位扩展符号),

P=0FFFF ABCDH

18. SPM       设置PM位指令

语法:SPM constant

       该指令对状态寄存器的PM位赋值。其操作数代表PM位的二进制值。

1 执行指令:

SPM      2

              结果PM=10

19. SQRA    平方且累加前次乘积指令

       语法: SQRA         dma                                   直接寻址

SQRA          ind[ARx]                       间接寻址

该指令将存放前次乘积的P寄存器内容根据状态寄存器的PM值进行移位(PM值与移位的对应关系见APAC指令),移位后与累加器相加。并将指定的数据存储器的内容平方,结果存放在P寄存器中。支持直接寻址和间接寻址。影响COV位。

1 如果(P=1234H PM=0,(ACC=567H

DP=4(寻址范围0200H~027FH),(234H=0AH,执行指令:

                     SQRA   34H    

结果(ACC=179BHC=0,(P=64H

20. SQRS     平方且减去前次乘积指令

       语法: SQRS           dma                                   直接寻址

SQRS           ind[ARx]                       间接寻址

该指令将存放前次乘积的P寄存器内容根据状态寄存器的PM值进行移位(PM值与移位的对应关系见APAC指令),移位后从累加器中减去,并将指定的数据存储器的内容平方,结果存放在P寄存器中。支持直接寻址和间接寻址。影响COV位。

1 如果(P=1234H PM=0,(ACC=567H ARP=5AR5=234H,(234H=0AH,执行指令:

SQRS    *

结果(ACC=0FFFF F333HC=0(有借位),(P=64H

B.4        转移指令

1. B              无条件转移指令

语法: B           pma[ARx]              间接寻址

       该指令将PC指向指定的程序存储器地址,该地址即可以是符号地址,也可以是数字地址。支持间接寻址。

1 如果ARP=0AR0=305H,执行指令:

                     B    1234H*-,AR7

结果(PC=1234HAR0=304HARP=7

2 如果W1=6789H是符号地址,执行指令:

                     B    W1

结果(PC=6789H

2. B       ACC      根据累加器内容转移指令

语法: BACC  

       该指令将累加器低16位的内容作为转移指令。

1 如果(ACC=1234 5678H ,执行指令:

                     BACC  

结果(PC=5678H

3. B       CND     根据累加器内容转移指令

语法: BCND          pma cond1[cond2][,…]

当满足合理的组合条件时,转移到指定的程序存储器地址;否则执行下一条指令。条件见表B-1

                            B-1   条件转移指令的条件符号和含义

 

 

条件符号

 

条件符号

 

条件符号

 

EQ

ACC=0

GEQ

ACC0

BIO

BIO=0

NEQ

ACC0

NC

C=0

NTC

TC=0

LT

ACC0

C

C=1

TC

TC=1

LEQ

ACC0

NOV

OV=0

UNC

无条件

GT

ACC0

OV

OV=1

 

 

1 如果(ACC=0FFFF 1234H C=1,符号地址W1=5678H

执行指令:

                     BCND          W1    LEQ  C   

结果(PC=5678H

4. CALA      根据累加器内容调用指令

语法: CALA  

       该指令将累加器低16位的内容作为地址,调用位于该地址的子程序。同时PC+1入栈。

1 如果(ACC=1234 5678H ,(PC=1234H,执行指令:

                     CALA  

结果(PC=5678H,栈顶(TOS=1235H

5. CALL       无条件调用指令

语法: CALL              pma [ind[ARx]]         间接寻址

该指令将PC指向指定的程序存储器地址,调用位于该地址的子程序,同时PC+2入栈。支持间接寻址。

6 .   CC         条件调用指令

       语法:    CC        pam, cond1 [,cond2][,]

       当满足合理上午组合条件时(条件见附表1),PC指向指定的程序存储器地址,调用位于该地址的子程序,同时PC+2入栈,否则执行下一条指令。

       1      如果(PC)=1234H,符号地址W1=4567H,C=1,OV=0,执行指令:

                     CC         W1, C, OV

                     结果(PC)=4567H,栈顶(TOS)=1236H.

7 .   INTR    软中断指令

       语法:    INTR    K

       0~31K值代表32个中断向量(见第一章表1~10)。执行该指令,使程序转移到指定的中断入口,调用相应的中断子程序,同时PC+1入栈.INTM和中断屏蔽都不会影响该指令。该指令使INTM位置1,禁止可屏蔽中断。

       1      如果(PC=1234H,执行指令:

                     INTR    2

                     结果(PC=4H,栈顶(TOS=1235HINTM=1

8 .   NMI      不可屏蔽软中断指令

       语法: NMI

       该指令强行将PC指向24H处的不可屏蔽中断向量入口,同时PC+1入栈。该指令使INTM位置1,禁止可屏蔽中断。

       1      如果(PC=1234H,执行指令:

                     NMI

                     结果(PC=24H,栈顶(TOS=1235HINTM=1

9 .   TRAP    软陷阱中断指令

       语法:TRAP

       该指令将PC指向22H中断向量入口,同时PC+1入栈。该中断不可屏蔽,但也不影响INTM位。

       1      如果(PC=1234H,执行指令:

                     TRAP

                     结果(PC=22H,栈顶(TOS=1235H

10 . RET      子程序返回指令

       语法: RET

       该指令用于结束子程序或中断子程序,返回被调用的地址。

1      如果栈顶(TOS=1235H,(TOS-1=4567H,执行命令:

              RET

                     结果(PC=1235H,栈顶(TOS=4567H

11 . RETC   子程序条件返回指令

语法:    RETC  cond1 [,cond2][,]

       当满足合理的组合条件时(条件见附表1)结束当前子程序或中断子程序,返回被调用的地址,否则执行下一条指令。

1      如果(ACC=1234H,栈顶(TOS=1235H,(TOS-1=4567H,执行命令:

              RETC   GEQNTC

                     结果(PC=1235H,栈顶(TOS=4567H

B.5        控制指令

1 .   BIT              位测试指令

       语法: BIT              dam   bit  code                   直接寻址

BIT              ind     bit  code[ARx]     间接寻址

       该指令见指向的数据存储器的指定位复制到状态寄存器的TC 位。支持直接寻址和间接寻址。注意:本指令中数据存储器位位置的操作数(bit  code)是从存储器的最高位到最低位排序的,也即对我们习惯的位位置取反可以得到本指令中数据存储器位位置的操作数。例如:某单元第6位位置操作数是9,第9位的位位置操作数是6

1      如果DP=4(寻址范围0200H~027FH),(234H=0AH,执行指令:

              BIT              34H2

                     结果将234H单元的0AH的第13位送入TC位,即TC=0

2 如果ARP=0AR0=200H,(200H=1234H,执行指令:

                     BIT       *3AR2

结果将数据1234H的第12位送入TC,即TC=1ARP=2

2 .   BITT     根据T寄存器进行位测试指令

       语法: BITT            dam                                   直接寻址

BITT            ind [ARx]               间接寻址

       该指令根据T寄存器的低4位来决定指定的数据存储器的指定位,将其复制到状态寄存器的TC位。支持直接寻址和间接寻址。注意:T寄存器的低4位所组成的0~15的编码与我们习惯的位位置仍然是取反关系,参见BIT指令。

1      如果DP=4(寻址范围0200H~027FH),(234H=0AH,(T=0AH执行指令:

              BIT       T     34H

                     结果将数据0AH的第5位送入TC位,即TC=0

2 如果ARP=0AR0=201H,(201H=1234H,(T=0FH执行指令:

                     BIT       T *

结果将数据1234H的第0位送入TC,即TC=0AR0=200H

3 .   CLRC   清除控制位指令

       语法:CLRC    control   bit  

       该指令将指定的状态寄存器的控制位清0。所有的控制位符号如表B-2所列。

B-2   控制位符号与含义

 

符号

含义

符号

含义

C

进位位

SXM

扩展方式位

CNF

RAM配置位

TC

测试/控制位

INTM

中断方式位

XF

XF引脚状态

OVM

溢出方式位

 

 

       1      执行指令:

              CLRC   C

              将进位位C0

4 .   SETC    设置控制位指令

       语法:SETC     control   bit  

该指令将指定的状态寄存器的控制位置1。所有的控制位符号如表B-2所列。

1      执行指令:

SETC    TC

                     将测试位TC1

5 .   LDP      装载数据存储器页指针指令

语法: LDP     dma                                          直接寻址

                     LDP      ind [ARx]                       间接寻址

                     LDP      #k                                             短立即寻址      

       将指定的数据存储器内容的最低9位或一个9位的立即数送入数据存储器页指针DP。该指令支持立即寻址、直接寻址和间接寻址。

1      执行指令:

                     LDP      #0FFH

                     结果DP=0FFH

2      如果DP=4(寻址范围0200H~027FH),(234H=500H,执行指令:

              LDP      34H

                     结果DP=100H

3 如果ARP=2AR2=202H,(202H=1024H,执行指令:

                     LDP *

结果DP=24H

6 .   LST       装载状态寄存器指令

语法: LST     #m         dma                            直接寻址

                     LST       #m        ind[ARx]                间接寻址

       该指令将指定数据存储器的内容装入状态寄存器ST0ST1。支持直接寻址和间接寻址。注意:ST0装入新值并不影响ST1ARB位,但对ST1的操作中,送入ARB的值也送入ST0ARP

1 如果ARP=0AR0=205H,(205H=2604H,执行指令:

                     LST       #0 *AR5

结果ST0=2604HARP=1(注意:指令中的AR5并没有修改ARP)。

2      如果DP=4(寻址范围0200H~027FH),(222H=0E1FCH

ST0=0406H,执行指令:

                     LST       #1 22H

                     结果(ST1=0E1FCHST0=0E406H

7 .   SST       存储状态寄存器指令

语法: SST     #m         dma                            直接寻址

                     SST       #m        ind[ARx]                间接寻址

       该指令将指的状态寄存器ST0ST1的内容保存到指定的数据存储器中。支持直接寻址和间接寻址。注意:在直接寻址中,不管DP为何值,状态寄存器总是保存到第0页;但状态寄存器可以通过间接寻址,保存到任意页中。

1      执行指令:

                     SST       #1 7AH

结果ST1保存到第0页的7AH单元中

2      如果ARP=2AR2=260H,执行指令:

                     SST       #0 *

                     结果将ST0保存到260H单元中

8 .   POP       出栈送累加器低16位指令

语法:POP

       该指令将栈顶(TOS)的内容送入累加器的低16位,累加器的高16位清0

1      栈顶(TOS=2040H,执行指令:

                     POP

结果ACC=2040H

9 .   PUSH    累加器低16位进栈指令

语法:PUSH

       该指令将累加器低16位推入栈顶。

1      如果ACC=0E78 1234H执行指令:

                     PUSH

结果TOS=1234H

10 . POPD    出栈送数据存储器指令

语法: POPD         dma                                   直接寻址

                     POPD           ind[ARx]                       间接寻址

该指令将栈顶(TOS)的内容送入指定的数据存储器中。支持直接寻址和间接寻址。

1      如果DP=6(寻址范围0300H~037FH),TOS=1688H,执行指令:

                     POPD           37H

                     结果(337H=1688H

2 如果ARP=0AR0=230HTOS=1234H,执行指令:

                     POPD           *

结果223H=1234HAR0=22FH

11 . PSHD    数据存储器进栈指令

语法: PSHD         dma                                   直接寻址

                     PSHD           ind[ARx]                       间接寻址

该指令将指定的数据存储器的内容推入栈顶(TOS)。支持直接寻址和间接寻址。

1      如果ARP=0AR0=230H230H=1234H,执行指令:

                     PSHD    *,AR2

                     结果(TOS=1234HARP=2

2如果DP=6(寻址范围0300H~037FH),330H=1688H,执行指令:

                     PSHD    30H

结果TOS=1688H

12 . RPT      重复执行指令

语法: RPT            dma                                   直接寻址

                     RPT             ind[ARx]                       间接寻址

                     RPT             #k                                      短立即寻址

       该指令将下一条指令重复执行N+1次,其中N由指定的数据存储器或一个短立即数给出。注意:重复循环是多周期指令,不能被中断。支持立即寻址、直接寻址和间接寻址。

1      执行指令:

                     RPT      #5

                     NOP

                     结果重复执行NOP指令6次。

2      如果ARP=1AR1=345H345H=0AH,执行指令:

                     RPT      *,AR5

                     NOP

                     结果执行NOP指令11ARP=5

13 . IDLE     进入空闲状态指令

语法: IDLE

该指令强行停止正在运行的程序,进入低功耗状态,直到被任一个未屏蔽的中断唤醒。唤醒后,如果IDLE=0,或被NMI复位唤醒,则转移到相应的中断子程序;如果IDLE=1,则程序接着IDLE指令继续执行。

1      执行指令:

                     IDLE

                     程序停止运行,但片内外设仍然保持活动。

14 . NOP      空操作指令

语法: NOP

该指令除了使PC+1外什么都不做。用于延时或等待。

B.6        I/O和存储器传送指令

1 .   BLDD   数据存储器间块传送指令

语法: BLDD               #1kdma                  源地址为长立即数的直接寻址

              BLDD          #1kind[ARx]     源地址为长立即数的间接寻址

BLDD         dma#1k                  目的地址为长立即数的直接寻址

BLDD          ind #1k[ARx]   目的地址为长立即数的间接寻址

       该指令将指定的数据存储器的内容传送到指定的目标数据存储器中。源或目标都可以使用立即寻址、直接寻址或间接寻址,但源或目标必须而且只能有一个是立即寻址。当与RPT指令一同用于数据块传送时,只能使用立即寻址或间接寻址。

1如果DP=6(寻址范围0300H~037FH),330H=1688H,执行指令:

                     BLDD   #330H60H

结果360H=1688H

2如果AR0AR0=345H,执行指令:

                     RPT      #9

                     BLDD   *+,#3A0H

                     结果将以345H开始的连续10个单元中的数据传送到以3A0H开始的连续10个单元中

2 .   BLPD    程序存储器向数据存储器间块传送指令

语法: BLPD         #pma dma              源地址为长立即数的直接寻址

              BLPD           # pmaind[ARx] 源地址为长立即数的间接寻址

       该指令将程序存储器的数据传送到数据存储器中。用长立即数寻址程序存储器,数据存储器则采用直接寻址或3寻址。当与RPT指令一同用于数据块传送时,数据存储器只能使用立即寻址或间接寻址。

1如果DP=6(寻址范围0300H~037FH),程序存储器6789H=0160H,执行指令:

                     BLPD    #6789H30H

结果330H=0160H

2如果AR0AR0=345H,执行指令:

                     RPT      #3

                     BLPD    #6789H *

                     结果将程序存储器6789H开始的连续10个单元中的数据传送到以345H开始的连续10个单元中

3 .   DMOV 内部数据存储器传送指令

语法: DMOV        dma                                   直接寻址

              DMOV        ind[ARx]                       间接寻址

       该指令将指定的内部数据存储器中的内容传送到下一个单元中。当用于数据块传送时,传送可连续通过块间边界。支持直接寻址和间接寻址。

1如果DP=6(寻址范围0300H~037FH),367H=0160H,执行指令:

                     DMOV        67H

结果368H=0160H

2如果ARP=3AR3=125H125H=1234H,执行指令:

                     DMOV        *

结果126H=1234H

4 .   IN          I/O 输入指令

语法: IN         dmaPA                                 直接寻址

              IN          ind PA[ARx]                   间接寻址

       该指令将指定的I/O口(PA)的16位数据读到指定的数据存储器中。

1如果DP=6(寻址范围0300H~037FH),执行指令:

                     IN          7EH89AH

从地址为89AH的外设读数据,保存到37EH单元中。

2如果ARP=3AR3=125H,执行指令:

                     IN          * 89AHAR7

                     从地址为89AH的外设读数据,保存到125H单元中,AR7=7

5 .   OUT             I/O 输出指令

语法: OUT            dmaPA                          直接寻址

              OUT             ind PA[ARx]            间接寻址

该指令将指定的数据存储单元的16位数据写到指定的I/O口中。

1如果DP=6(寻址范围0300H~037FH),329H=3445H,执行指令:

                     IN          29H125H

将数据3445H写到地址为125H的外设中。

2如果ARP=0AR0=325H325H=1111H,执行指令:

                     IN          *-, 125H

                     将数据1111H写到地址为125H的外设中,AR0=324H

6 .   SPLK           存储长立即数指令

语法: SPLK          #1kdma                    直接寻址

              SPLK           #1kind[ARx]            间接寻址

该指令将一个长立即数写到指定的数据存储单元中。支持直接寻址和间接寻址。

1如果DP=4(寻址范围0200H~027FH),执行指令:

                     SPLK           #1000H45H

结果(245H=1000H

2如果ARP=1AR1=3ABH,执行指令:

                     SPLK           #1234H*

结果(3ABH=1234H

7 .   TBLR          读表指令

语法: TBLR          dma                               直接寻址

              TBLR          ind[ARx]                       间接寻址

       该指令将累加器低16位所指定的程序存储器中的数据,送入指定的数据存储器中。支持直接寻址和间接寻址。

1如果(ACC=2345 6789H,程序存储器(6789H=12H

DP=4(寻址范围0200H~027FH),执行指令:

                     TBLR          30H

结果(230H=12H

2如果ARP=4AR4=234H,(ACC=1234 5678H

程序存储器(5678H=0FFH,执行指令:

                     TBLR          *AR6

结果(234H=0FFHARP=6

8 .   TBLW          写表指令

语法: TBLW         dma                               直接寻址

              TBLW          ind[ARx]                       间接寻址

       该指令将指定的数据存储器中的数据,写入累加器低16位所指定的程序存储器中。支持直接寻址和间接寻址。

1如果ARP=3AR3=234H,(234H=0ABCH,(ACC=1234 5678H,执行指令:

                     TBLW          *

结果程序存储器(5678H=0ABCHAR3=235H

2如果DP=4(寻址范围0200H~027FH),(25BH=678H

ACC=6789 1234H,执行指令:

                     TBLW          5BH

结果程序存储器(1234H=678H

 

 

参考《电动机的DSP控制-TI公司DSP应用》(作者:王晓明)

分享到:

上一篇:DSP重要寄存器及其它

下一篇:关于句柄

评论 (0条) 发表评论

抢沙发,第一个发表评论
验证码