3986.net
小网站 大容量 大智慧
相关标签
当前位置:首页 >> 计算机硬件及网络 >>

DSP控制器原理与应用 张小鸣 第3-4章DSP寻址及指令系统


第三章 TMS320LF240x的寻址方式 与指令系统
TMS320LF240x的寻址方式
TMS320LF240x的汇编指令 DSP软件的文件结构

3.1 TMS320LF240x的寻址方式
DSP系统也具有计算机的一般特性,其完成的任务是采 样、运算和输出的功能,即从某个地址单元(片内或片外)取 数据,然后按照一定的规则进行运算,最后将运算的结果存 放到某个地址单元来输出。因此,在程序中如何寻址和表达 数据的地址是软件系统的关键问题。
TMS320LF240x的程序采用了三种基本的寻址方式:立即 寻址、直接寻址和间接寻址。

退出

符号与缩写

3.1.1 立即寻址方式
指令操作所需要的数就在本指令中,这个数也称为立即 数。立即寻址的操作数分为短立即数和长立即数,因此相应 的寻址方式也有短立即数寻址和长立即数寻址。 【例1】

采用8位短立即数寻址的RPT指令,需要重复执行的 次数包含在指令操作码后。
RPT #k
8 1

;8位短立即数寻址
7 6 5 4 k 8 位常数=k 3 2 1 0

15 14 1 0

13 12 11 10 9 1 1 1 0 1

RPT 操作代码

退出

【例2】 采用9位短立即数寻址的RPT指令,需要重复执行的 次数包含在指令操作码后。
RPT #k ;9位短立即数寻址

15 1

14 0

13 1

12 11 1 1

10

9

8

7

6

5

4 k

3

2

1

0

1 0

RPT 操作代码

9 位常数=k

退出

【例3】 采用13位短立即数寻址的RPT指令,需要重复执行 的次数包含在指令操作码后。
RPT
15 1 14 1 13 0 12 11

#k
10 9 8

;13位短立即数寻址
7 6 k 13 位常数=k 5 4 3 2 1 0

RPT 操作代码

退出

【例4】 采用16位长立即数寻址的ADD指令。
ADD
第一字 15 1 14 13 12 11 10 9 0 1 1 1 1 1 8 7 6 1 5 0 4 1 3 0 2 0 1 1 0 0

#1k ,2

;将立即数1k左移2位后与累加器中 ;的内容相加,结果存累加器中

1 1

ADD 操作代码 第二字 15 14 13 12 11 10 9 8 7 1k 16 位常数=1k 6 5 4 3

移位 2 次

2

1

0

退出

3.1.2 直接寻址方式
操作地址就在指令中,按照该地址可以直接访问寄存器, 这个地址也称为直接地址。 在DSP程序中,直接寻址通常是将指令中的数据页指针 DP和操作数合并起来作为被访问的地址。每页的具体操作地 址的高9位是由数据页指针DP决定;低7位(又称偏移地址量) 是由指令操作数决定,它处于指令寄存器的最低7位有效位上。 DP指针与偏移地址量共同构成16位的指令操作地址。
15 14 13 12 11 8MSB 10 9 8 7 0 6 5 4 3 7LSB 2 1 0

第15~8位为指令的操作码;第7位为直接/间接寻址指示符, 为0是直接寻址;第6~0位为偏移地址量。 退出

因此,在使用直接寻址方式时,应按下述步骤进行: (1)设置数据页面。将页值加载到DP,加载时可使用LDP指令。 LDP指令可直接加载DP而不影响ST0的其他位,该指令明确指 出加载到DP的值,例如把当前数据页设置成32(地址1000h- 107Fh),可使用如下指令。 LDP #32 ;加载数据页指针 (2)指定偏移量。提供7位偏移量作为指令的操作数。例如将 当前数据页的第2个地址中的数据加到ACC时。 ADD 1h ;将当前数据页中偏移量为1处的数据加到ACC 如果在一段代码块中所有的指令都访问的是同一数据页, 则只需在该块代码的前面加载一次DP即可;如果代码块中需 要访问不同的数据页,则每当访问新的数据页时需确保加载 相应的DP。 退出

【例5】 采用直接寻址的ADD指令。 LDP ADD #4 9h,5 ;设置数据页为4(地址0200h-027Fh) ;将数据地址0209h单元的内容左移5位后加至ACC
指令寄存器(IR) 0 0 1 0 ADD操作码 高9位来自DP 0000 0010 0 000 0 0 1 0 移5位 低7位来自IR 1001 0 000 1001 9h

数据页指针DP=4 0000 0010 0

16位数据存储器地址0209h

退出

【例6】 使用直接寻址的ADDC指令。 LDP ADDC #500 ;设置数据页为500(地址FA00h-FA7Fh) 6h ;数据寄存器地址FA06h单元的内容和进位值(C) ;一起加至累加器中
指令寄存器(IR) 0 1 1 0 0 0 0 0 0 000 0110 6h

数据页指针DP=500 1111 1010 0

移位数为16位的ADD操作码 高9位来自DP 1111 1010 0 000

低7位来自IR 0110

16位数据存储器地址FA06h

退出

3.1.3 间接寻址方式
指令中给出的操作数既不是立即数也不是直接地址,而 是将这个操作数做地址的内存单元的内容作为访问地址,即 指令中的操作数是一个间接地址。间接寻址为系统的编程带 来了很大的灵活性和方便性。 DSP芯片内有8个辅助寄存器AR0-AR7和辅助寄存器算术单 元ARAU,这些寄存器专用于间接寻址操作,它可以访问64KB 的寻址空间而不受数据页的限制。因此,DSP的间接寻址能力 非常灵活和强大,而且寻址的速度非常快。 在间接寻址时,当前AR的内容用作将被访问的数据存储 器的地址。因此,当前辅助寄存器中的内容才是真正被访问 的数据地址。 在进行间接寻址操作的同时可以对当前辅助寄存器中的 内容(即操作地址)进行修改,甚至可以改变ARP的值,为下 一次的间接寻址操作做准备,从而极大地提高了寻址速度。 退出

TMS320LF240x提供了对AR的内容进行四种运算的选择:

操作数 * *+
*- *0+





操作数 *0- *BR0+
*BR0-





不增加也不减少 增加1
减少1 增加变址量

减少变址量
按反方进位增加变 址量

按反向进位减少变 址量

退出

【例7】 当前AR不增不减 ADD *,8 ;把当前AR指定的数据存储单元的内容左移8位 ;后加至累加器中 【例8】 当前AR增加1 ADD *+,8,AR4 ;把当前AR指定的数据存储单元的内容左 ;移8位后加至累加器中,当前AR内容加1, ;指定下条指令的当前辅助寄存器为AR4

【例9】 当前AR减去1 ADD *-,8 ;把当前AR指定的数据存储单元的内容左移8 ;位后加至累加器中,当前AR内容减1

退出

【例10】 当前AR增加一个变址量
ADD *0+,8 ;把当前AR指定的数据存储单元的内容左移8 ;位后加至累加器中,AR0的内容加到当前AR

【例11】 当前AR减去一个变址量 ADD *0-,8 ;把当前AR指定的数据存储单元的内容左移8 ;位后加至累加器中,当前AR的内容减去AR0 ;内容

退出

3.2 TMS320LF240x的汇编指令
汇编语言是DSP应用软件的基础,使用汇编语言时必须 要符合规定的格式,只有这样汇编器才能将源文件转换为 机器语言的目标文件。 1.汇编语言源程序的标准格式 汇编语句格式一般包含4部分:标号、指令、操作数和 注释,以助记符指令为例,格式如下 [标号] [:] 指令 [操作数] [;注释]

其中[ ]内的内容为可选项。 在编写汇编语句时,必须遵循以下格式: (1)语句必须以标号、空格、星号或分号开始。 退出

(2)若使用标号,则必须从第1列开始。标号长度最多为32个 字符,由A-Z、a-z、0-9、_和$等组成,但第1个字符不能为 数字。标号后可以跟一个冒号(:),但并不作为标号的一部 分。 (3)每部分必须由1个或多个空格分开。 (4)开始于第1列的注释须用星号(*)或分号(;)标示,但在 其他列开始的注释前面只能用分号。 (5)指令一定不能从第1列开始,否则将被视为标号。指令 包括助记符指令、汇编伪指令(如.data,.set)、宏伪指 令(如.macro)和宏调用。 (6)操作数可以为列表形式,汇编器允许使用常数、符号 或表达式作为地址、立即数或间接寻址。当操作数为立即 数时,使用#号作为前缀;操作数为间接寻址时,使用*号 作为前缀,将操作数的内容作为地址。 退出

2.汇编语言的指令集 TMS320LF240x的汇编语言共86条,分为6大类,分别是 累加器、算术和逻辑指令;辅助寄存器和数据页指针指令; TREG、PREG和乘法指令;跳转指令;控制指令;I/O和存储 器操作指令。 3.汇编指令的语法和说明 在介绍汇编指令之前,先把所用到的操作数做一统一规定: dma:数据存储器地址的低7位(LSB) shift:左移位数0~15 n:指定下一次的辅助寄存器ARP值(0~7) k:8位短立即数 1k:16位长立即数 ind:是一个间接寻址变量,可取*、*+、*-、*0+、*0-、 *BR0+、*BR0- Pma:16位程序存储器地址 PA:16位I/O端口或I/O映射寄存器地址 退出

(1)ABS(累加器取绝对值)p73 语法:ABS 说明:计算ACC的绝对值,进位位C置0。指令受OVM状态标志 位影响,执行的结果影响C和OV。如果ACC的内容大于或等于 0,执行指令后其内容不变;若累加器内容小于0,执行指令 后用其对2的补码数(即它的绝对值)取代原来的值。 ACC=8000 0000h时为特殊情况,若OVM=0,对8000 0000h 取绝对值(执行ABS指令)的结果是8000 0000h;若OVM=1,对 8000 0000h取绝对值的结果是7FFF FFFFh,无论哪种情况下, 状态位OV都置1。

退出

【例3-14】 ABS
执行指令前 ACC × C 执行指令前 ACC × C 0FFFFFFFFh 0 C 1234 h 0 C 执行指令后 1h 执行指令后 1234h

【例3-15】 ABS
ACC × C × OV

;(OVM=0)
执行指令后 0 C 1 OV 80000000h 80000000h

执行指令前

退出

通常,如果相加的结果产生进位时,C=1;不产生进 位时,C=0。但是,当左移16位进行相加时,如果相加的 结果产生进位,则C=1;不产生进位时,则C不受影响。这 样,在把32位数加到累加器时,可使累加器产生正确的符 号进位。 【例3-17 】 ADD 1,1 ;DP=6:地址0300h-037Fh
执行指令后 1h 2h 数据存储器 301h ACC 0 C 1h 4h

执行指令前 数据存储器 301h ACC × C

退出

(2)ADD

累加器加 p73

语法:ADD dma [,shift] 直接寻址 ADD dma,16 左移16位直接寻址 ADD ind, shift [,ARn] 间接寻址 ADD ind,16 [,ARn] 左移16位间接寻址 ADD #k 短立即数寻址 ADD #1k [,shift] 长立即数寻址 说明:被寻址的数据单元的内容或一个立即数左移后加到 累加器,在移位时低位填0。如果SXM=1,则高位进行符号 扩展;如果SXM=0,则高位填0。 如果采用间接寻址并更新ARP的值,此时必须指定一 个shift(移位)操作数。如果不希望产生移位,则将0作为 操作数,例如ADD *+,0,AR2。

退出

【例3-18 】 ADD

*+,0,AR0
执行指令后 4 0302h ARP AR4 数据存储器 302h ACC 0 C 0 0303h

执行指令前 ARP AR4 数据存储器 302h ACC × C

2h 2h

2h 04h

【例3-19 】 ADD

#1h

;加短立即数
执行指令后 2h ACC 0 C 3h

执行指令前 ACC × C

退出

(3)ADDC

带进位的累加器加p74 直接寻址 间接寻址

语法:ADDC dma ADDC ind [,ARn]

说明:将数据存储单元的内容和进位位C的值加到累加器 中,符号不扩展,进位位受正常方式影响。指令受OVM位 影响,执行指令的结果影响C和OV。 【例3-21 】 ADDC
数据存储器 300h ACC 1 C

0

;DP=6:地址0300h-037Fh
执行指令后 04h 13h 数据存储器 300h ACC 0 C 04h 18h

执行指令前

退出

【例3-22 】 ADDC

*-,AR4

;OVM=0
执行指令后

执行指令前 ARP AR0 数据存储器 300h ACC 1 C × OV 0 0300h ARP AR0 数据存储器 300h ACC 1 C 0 OV

4 02FFh

0h 0FFFFFFFFh

0h 0h

退出

(4)ADDS

符号扩展抑制的累加器加 p75

语法:ADDS dma 直接寻址 ADDS ind [,ARn] 间接寻址 说明:将被寻址的数据单元中的内容加到累加器,抑制 符号扩展。无论SXM为何值,数据存储单元中的数据均被 看作一个无符号的16位数。ADDS指令产生的结果与SXM=0、 移位数为0的ADD指令产生的结果相同,若相加结果产生 进位时C=1;否则C=0。 【例3-23 】 ADDS
数据存储器 300h ACC × C

0

;DP=6:地址0300h-037Fh
执行指令后 数据存储器 300h ACC 0 C F006h 0000F009h

执行指令前 F006h 00000003h

退出

【例3-24 】 ADDS *
执行指令前 ARP AR0 数据存储器 300h ACC × C 0 0300h ARP AR0 数据存储器 300h ACC 0 C 执行指令后 0 0300h

0FFFFh 7FFF0000h

0FFFFh 7FFFFFFFh

退出

(5)ADDT

TREG指定移位的累加器加 p75

语法:ADDT dma 直接寻址 ADDT ind [,ARn] 间接寻址 说明:将数据存储单元的内容左移后加到累加器中,左移 的位数由TREG的低4位(0-15)确定。数据存储单元中数据的 符号扩展受SXM控制。指令受SXM和OVM位影响,执行结果影 响C和OV。 【例3-25 】 ADDT
数据存储器 027Fh TREG ACC × C

127
09h 0FF94h 0F715h

;DP=4:地址0200h-027Fh;SXM=0
执行指令后 数据存储器 027Fh TREG ACC 0 C 09h 0FF94h 0F7A5h

执行指令前

【例3-26 】 ADDT
执行指令前 ARP AR0 数据存储器 027Fh TREG ACC × C

*-,AR4

;SXM=0
执行指令后

0 027Fh 09h 0FF94h 0F715h

ARP AR0 数据存储器 027Fh TREG ACC 0 C

4 027Eh 09h 0FF94h 0F7A5h

退出

(6)ADRK

辅助寄存器加短立即数p83 #k 短立即数寻址

语法:ADRK

说明:8位正整数按右对齐方式加到当前辅助寄存器中, 当前辅助寄存器由ARP指定。 对辅助寄存器的所有运算都是无符号数运算。 【例3-27 】 ADRK #80h
执行指令前 ARP AR5 5 4321h ARP AR5 执行指令后 5 43A1h

退出

(7)AND

和累加器进行与操作 p75

语法:AND dma 直接寻址 AND ind [,ARn] 间接寻址 AND #1k[,shift] 长立即数寻址 AND #1k,16 左移16位的长立即数寻址 说明:如果是直接或间接寻址,数据存储单元中的数和累 加器的低16位进行与运算,结构放在累加器的低16位,累 加器的高16位清0。如果是立即数寻址,长立即数可以被 左移,没有被左移后的值覆的高位和低位均填0,移位结 果与累加器的内容逻辑与。指令不受SXM位影响。 【例3-30】 AND #00FFh,4 执行指令前
ACC 12345678h ACC 执行指令后 00000670h

退出

【例3-28 】AND
数据存储器 210h ACC

16
00FFh

;DP=4:地址0200h-027Fh
数据存储器 210h ACC 执行指令后 00FFh 00000078h

执行指令前

12345678h

【例3-29 】 AND
ARP AR4 数据存储器 301h ACC

*
执行指令后 4 0301h ARP AR4 数据存储器 301h ACC 4 0301h

执行指令前

0FF00h 12345678h

0FF00h 00005600h

退出

(8)APAC

PREG加到累加器p85

语法:APAC 说明:PREG寄存器的内容移位后加到累加器,移位的位数 由状态寄存器ST1中的PM位确定。指令不受SXM位影响, PREG总是进行符号扩展。指令受PM和OVM位影响,结果影 响C和OV。 【例3-31】 APAC
执行指令前 PREG ACC × C 40h 20h PREG ACC 0 C

;PM=01
执行指令后 40h A0h

退出

(9)B

无条件跳转p92

语法:B pma[,ind[,ARn]] 间接寻址 说明:程序跳转到pma指定的地址,并根据指令修改当前 辅助寄存器(AR)和ARP。pma值既可以是一个符号,也可 是一个数字地址。 【例3-32】 B 191,*+,AR1 将191加载到程序计数器,并且程序从该地址继续 执行,当前辅助寄存器加1,并且ARP被设置为指向辅 助寄存器1(AR1)。 (10)BACC 跳转到累加器指定的地址p92 语法:BACC 说明:程序跳转到累加器低16位所指定的地址。 【例3-33】 BACC ;ACC低16位为191 将数值191加到程序计数器,并且程序从该地址继续执行。 退出

(11)BANZ 语法:BANZ

辅助寄存器非0跳转p83 pma[,ind[,ARn]] 间接寻址

说明:如果当前辅助寄存器的值(AR)不为0,则程序跳转 到pma指定的地址,否则执行下一条指令。根据指令修改 当前辅助寄存器(AR)和ARP。缺省时,当前辅助寄存器减1。 该指令常用于控制循环体的执行,如果要使循环体执行N 次,则可在循环体执行前将用于计数的辅助寄存器初始化 为N-1。pma值既可以是一个符号,也可以是一个数字地址。

退出

【例3-34】

BANZ

PGM0

;PGM0为标号
执行指令后

执行指令前 ARP AR0 0 5h ARP AR0

0 4h

因为AR0的内容不为0,则PGM0给定的地址加载到程序 计数器(PC),程序从该处运行。对当前AR减1,变为4h。
执行指令前 ARP AR0 0 0h ARP AR0 执行指令后 0 FFFFh

因为AR0的内容为0,所以不跳转,而是将PC加2,即继 续执行BANZ后面的指令。当前AR减1,变为FFFFh。 退出

【例3-35 】编制一个循环体程序,将数据存储单元0060h- 0063h的内容加到累加器中。
MAR *,AR0 LAR AR1,#3 LAR AR0,#60h PGM191:ADD *+,AR1 BANZ ;设置ARP指向AR0 ;加载3到AR1 ;加载60h到AR0 ; 将AR0指向的地址中数据加到ACC, ;并且AR0值加1,ARP指向AR1 PGM191,*-,AR0 ;AR1不为0时循环,AR1值减1, ;ARP指向AR0

退出

(12)BCND 条件跳转 p92 语法:BCND pma,cond1[,cond2][,…] 说明:如果指定的条件都满足,则程序跳转到pma指定的地 址;若条件不满足,则执行下一条指令。 操作数 操作数 条件 说 明 条件 说 明 符号 符号
EQ ACC=0 累加器的值等于0 C C=1 进位位被置1

NEQ
LT

ACC≠0
ACC<0

累加器的值不等于0
累加器的值小于0

NOV
OV

OV=0
OV=1

溢出标志位清0
溢出标志位置1

LEQ
GT

ACC≤0
ACC>0

累加器的值小于或等于 0
累加器的值大于0

BIO
NTC

BIO为0
TC=0

BIO引脚为低电平
测试/控制标志位被清 0

GEQ
NC

ACC≥0
C=0

累加器的值大于或等于 0
进位位被清0

TC
UNC

TC=1
无条件

测试/控制标志位被置 1
无条件

【例3-36】

BCND

PGM191,LEQ,C

如果累加器的内容小于或等于0,且进位位为1,则程序 跳转到PGM191指定的地址;若条件不满足,则程序从PC+2处 继续执行。 (13)BIT 语法:BIT BIT 位测试 P96 dma, bit code ind, bit code[,ARn] 直接寻址 间接寻址

说明:将数据存储单元中数的被指定位复制到状态寄存器 ST1的TC位。指定的位号为15-bit code。结果影响状态标 志位TC。 注意:指令中指定的位码值与数据存储器值要测试的位数 对应关系。 退出

【例3-37】
数据存储器 300h TC

BIT

0h,15 ;DP=6,测试300h 中数值的最低位
执行指令后 数据存储器 300h TC 4DC8h 0

执行指令前 4DC8h 0

【例3-38 】 BIT 然后设置ARP=1
ARP AR0 数据存储器 310h TC

*,0,AR1

;测试310h中数值的最高位,
执行指令后

执行指令前 0 0310h ARP AR0 数据存储器 310h TC

1 0310h

8000h 0

8000h 1

退出

(14)BITT TREG指定位测试 p96 语法:BITT dma 直接寻址 BITT ind[,ARn] 间接寻址 说明:将数据存储单元中数的被指定位复制到状态寄存 器ST1的TC位。指定的位号为15-TREG(3:0),即15减去 TREG寄存器的低4位值。结果影响状态标志位TC。 【例3-39】
数据存储器 0300h TREG TC

BITT

00h

;DP=6,测试数据的第14位
执行指令后 数据存储器 0300h TREG TC 4DC8h 1h 1

执行指令前 4DC8h 1h 0

退出

【例3-40】

BITT

*

;测试310h地址处数据的第1位
执行指令后 1 ARP AR1 数据存储器 310h TREG TC 1 0310h

执行指令前 ARP AR1 数据存储器 310h TREG TC

0310h

8000h 0Eh 0

8000h 0Eh 0

退出

(15)BLDD

数据区块移动 p102

(16)BLPD

程序区到数据区块移动 p103

(17)CALA 累加器指定地址的子程序调用p93 语法:CALA 说明:当前程序计数器(PC)加1后压入堆栈顶(TOS), 然后将累加器的低16位加载到PC,程序从该地址执行。 【例3-45】 CALA
指令执行后 25h 83h 100h PC ACC TOS 83h 83h 26h

指令执行前 PC ACC TOS

退出

(18)CALL 语法:CALL

无条件调用p93 pma,ind[,ARn] 带长立即数源的间接寻址

说明:当前程序计数器(PC)加2后压入堆栈顶(TOS),然 后将pma值加载到PC,程序从该处执行,并按指定的方式 修改当前AR和ARP。 【例3-46】
ARP AR1 PC TOS

CALL

191,*+,AR0
指令执行后 1 05h 30h 100h ARP AR1 PC TOS 0 06h 0BFh 32h

指令执行前

退出

(19)CC 语法:CC

条件调用p93 pma,cond1[,cond2][,…]

说明:如果指定的条件都得到满足,则将返回地址压入堆 栈顶,把pma值加载到PC,实现程序调用;若条件不满足, 则PC加2。 【例3-47】CC PGM191,LEQ,C ; PGM191为0BFh(191)的标号 若累加器的内容小于或等于0,且进位位C为1,则将 0BFh(191)装入PC,程序从该处执行;若这些条件不同时 满足,则从CC指令后的指令继续执行。

退出

(20)CLRC

控制位清0 p97 控制位

语法:CLRC

说明:将指定的控制位清0,控制位包括:C、CNF、INTM、 OVM、SXM、TC、XF。 (21)CMPL 累加器逻辑取反 p76 语法:CMPL 说明:将累加器逻辑取反,进位位不受影响。 【例3-49 】 CMPL
指令执行前 ACC
×

指令执行后 ACC
×

0F7982513h

0867DAECh

C

C

退出

(22)CMPR

辅助寄存器与AR0比较p84 CM

语法:CMPR

说明:根据CM值指定的比较条件,比较当前辅助寄存器 和AR0值的大小,比较结果存入状态寄存器ST1的TC位。 如果比较条件成立TC=1;否则TC=0。比较时辅助寄存器 的值以无符号操作数形式参与。 CM 0 1 2 3 说 明

测试当前AR是否等于AR0 测试当前AR是否小于AR0 测试当前AR是否大于AR0 测试当前AR是否不等于AR0 退出

【例3-50】
ARP AR0 AR4 TC

CMPR

2

;当前AR值大于AR0否?
指令执行后

指令执行前 4 0FFFFh 7FFFh 1 ARP AR0 AR4 TC

4 0FFFFh 7FFFh 0

退出

(23)DMOV

数据移动p104

(24)IDLE

等待中断p97

(25)IN

从端口读入数据p104

(26)INTR

软件中断p94

(27)LACC 带移位的累加器装载 P76 语法:LACC dma[,shift] 直接寻址 LACC dma,16 左移16位直接寻址 LACC ind[,shift[,ARn]] 间接寻址 LACC ind,16[,ARn] 左移16位间接寻址 LACC #1k[,shift] 长立即数寻址 说明:指定的数据存储单元的内容或一个16位常数左移 并加载到累加器中。左移位时低位填0。指令受SXM影响, 若SXM=1,高位进行符号扩展;若SXM=0,高位填0。 【例3-57】
406h ACC × C

LACC

6,4
01h

;DP=8:地址0400h-047Fh;SXM=0
数据存储器 406h ACC × C 指令执行后 01h 10h

指令执行前

12345678h

退出

【例3-58】
ARP AR2 数据存储器 300h ACC × C

LACC

*,4
2

;SXM=0
指令执行后 ARP AR2 数据存储器 300h ACC × C 2 0300h

指令执行前

0300h

0FFh 12345678h

0FFh 0FF0h

【例3-59】
ACC × C

LACC

#0F000h,1
ACC × C

;SXM=1
指令执行后 FFFFE000h

指令执行前 012345678h

退出

(28)LACL

装载累加器低16位,高16位清0 P76

语法:LACL dma 直接寻址 LACL ind[,ARn] 间接寻址 LACL #k 短立即数寻址 说明:指定数据存储单元的内容或一个短立即数加载 到累加器的低16位,累加器的高位填0。加载的数据 被看作是一个无符号数。无论SXM为何值,都不进行 符号扩展。加载数为8位短立即数时,高8位为0,因 此,装载到ACC后,ACC的高24位为0。 【例3-60】
数据存储器 301h ACC × C

LACL

1
0h

;DP=6:地址0300h-037Fh
指令执行后 数据存储器 301h ACC × C 0h 0h

指令执行前

7FFFFFFFh

退出

【例3-61】
ARP AR0 数据存储器 401h ACC × C

LACL

*-,AR4
指令执行后 0 ARP AR0 数据存储器 401h ACC × C 4 0400h

指令执行前

0401h

0FFh 7FFFFFFFh

0FFh 0FFh

【例3-62】
ACC × C

LACL

#10h
指令执行后 ACC × C 010h

指令执行前 7FFFFFFFh

退出

(29)LACT

由TREG指定左移位数的累加器装载 P76 直接寻址 间接寻址

语法:LACT dma LACT ind[,ARn]

说明:指定的数据存储单元的内容左移后加载到累加器, 左移的次数由TREG的低4位确定,所以可移动0~15位。 左移时,低位填0。指令受SXM影响,若SXM=1,则累加 器高位进行符号扩展;若SXM=0,则高位填0。 【例3-63】
数据存储器 0301h TREG ACC × C

LACT

1

;DP=6:地址0300h-037Fh;SXM=0
指令执行后 数据存储器 0301h TREG ACC × C 1376h 14h 13760h

指令执行前 1376h 14h 98F7EC83h

退出

【例3-64】
ARP AR1 数据存储器 310h TREG ACC × C

LACT

*-,AR3
1

;SXM=1
指令执行后 ARP AR1 3 30Fh

指令执行前

310h

0FF00h 11h 098F7EC83h

数据存储器 310h TREG ACC × C

0FF00h 11h 0FFFFFEOOh

退出

(30)LAR

辅助寄存器装载 P84

语法:LAR ARx,dma 直接寻址 LAR ARx,ind[,ARn] 间接寻址 LAR ARx,#k 短立即数寻址 LAR ARx,#1k 长立即数寻址 说明:指定的数据存储单元的内容或8/16位立即数加载 到指定的辅助寄存器(ARx)。装载时,数据看作无符号数, 不受SXM的影响。 【例3-65 】 LAR AR0,16 ;DP=6:地址0300h-037Fh
指令执行后 数据存储器 310h AR0 18h 18h 指令执行前 数据存储器 310h AR0 18h 6h

退出

【例3-66】
ARP 数据存储器 300h AR4

LAR

AR4,*-
指令执行后 5 ARP 数据存储器 300h AR4 4

指令执行前

32h 300h

32h 32h

【例3-67】
AR4

LAR

AR4,#01h
指令执行后 AR4 01h 0FF09h

指令执行前

【例3-68 】 LAR
AR6

AR6,#3FFFh
指令执行后 0h AR6 3FFFh

指令执行前

退出

(31)LDP

数据页指针装载 P97 直接寻址 间接寻址 短立即数寻址

语法:LDP dma LDP ind[,ARn] LDP #k

说明:指定数据单元内容的低9位或一个9位立即数加载 到状态寄存器ST0中的DP位。DP也可由LST指令加载。DP 用于直接寻址,9位的DP和7位的dma连接起来形成指令访 问的数据存储单元的地址。 【例3-69】
FFFFh DP

LDP

127
FEDCh 1FFh

;DP=511:地址FF80h-FFFFh
指令执行后 FFFFh DP FEDCh 0DCh

指令执行前

退出

【例3-70】

LDP

#0h
指令执行后 DP 0h 1FFh

指令执行前 DP

【例3-71】

LDP

*,AR5
指令执行后 4 0300h ARP AR4 数据存储器 300h DP 5 0300h

指令执行前 ARP AR4 数据存储器 300h DP

06h 1FFh

06h 06h

退出

(32) LPH 乘积寄存器高位字装载 P86 (33)LST 状态寄存器装载 P98 语法:LST #m,dma 直接寻址 LST #m,ind[,ARn] 间接寻址 说明:指定数据存储单元的内容装载到指定的状态寄存 器(ST0或ST1)。当m=0时,装载ST0;当m=1时,装载ST1。 指令影响ARB、ARP、OV、OVM、DP、CNF、TC、SXM、C、 XF和PM状态位,但不影响INTM位。 使用该指令时需注意以下事项: 1)LST

#0操作不影响ST1中的ARB,即使加载一个新的ARP。

2)LST #1操作时,装入到ARB的值也同时装入到ST0中的 ARP。 3)在间接寻址方式时,如果下一个AR值被指定为一个操作 数,该操作数被忽略。ARP用指定数据存储单元中内容的 高3位加载。 退出

【例3-74 】 LST
数据存储器 060h ST0 ST1

#0,60h
2404h 6E00h 05ECh

;DP=0
指令执行后 数据存储器 060h ST0 ST1 2404h 2404h 05ECh

指令执行前

【例3-75】
ARP AR4 数据存储器 03FFh ST0 ST1

LST

#0,*-,AR1
指令执行后 4 3FFh ARP AR4 数据存储器 03FFh ST0 ST1 1 3FEh

指令执行前

EE04h EE00h F7ECh

EE04h EE04h F7ECh

退出

(34)LT

TREG寄存器装载 P86 直接寻址 间接寻址

语法:LT dma LT ind[,ARn]

说明:指定数据存储单元的内容加载到TREG中。在乘法 运算时,可用LT指令加载TREG 【例3-76】
数据存储器 418h TREG

LT

24

;DP=8:地址0400h-047Fh
数据存储器 418h TREG 指令执行后 62h 62h

指令执行前 62h 3h

退出

【例3-77】
ARP AR2 数据存储器 418h TREG

LT

*,AR3
指令执行后 2 418h ARP AR2 数据存储器 418h TREG 3 418h

指令执行前

62h 3h

62h 62h

退出

(35)LTA (36)LTD

TREG寄存器装载并累加前一次乘积 P86 TREG寄存器装载、累加前一次乘积并数据移动 P86

(37)LTP (38)LTS (39)MAC (40)MACD

TREG寄存器装载并将乘积寄存器内容存入累加器 P87 TREG寄存器装载、累加器减去前一次的乘积 P87 乘累加 P88 乘累加并数据移动 P88

(41)MAR

修改辅助寄存器 P84 直接寻址 间接寻址

语法:MAR dma MAR ind[,ARn]

说明:在直接寻址方式下,MAR指令的作用等同NOP指令。 在间接寻址方式下,指令可修改辅助寄存器的值和ARP的 值。当MAR修改ARP时,原来的ARP值复制到ST1的ARB中。 【例3-90】 MAR *,AR1 ;加载1到ARP
指令执行后 0 7 ARP ARB 1 0

指令执行前 ARP ARB

退出

【例3-91】

MAR

*+,AR5
指令执行后 34h 1 0 AR1 ARP ARB 35h 5 1

指令执行前 AR1 ARP ARB

退出

(42)MPY 乘 P89 语法:MPY dma MPY ind[,ARn] MPY #k

直接寻址 间接寻址 短立即数寻址

说明:在直接或间接寻址时,TREG寄存器与指定的数据存 储单元的内容相乘,结果存入PREG中;在使用短立即数寻 址时,TREG的内容乘以有符号的13位常数,结果存入 PREG中,这里的13位常数是右对齐的,且无论SXM为何值, 该常数都将进行符号扩展。

退出

【例3-92】
数据存储器 40Dh TREG PREG

MPY

13
7h 6h 36h

;DP=8:地址0400h-047Fh
指令执行后 数据存储器 40Dh TREG PREG 7h 6h 2Ah

指令执行前

【例3-94】
TREG PREG

MPY

#031h
指令执行后 2h 36h TREG PREG 2h 62h

指令执行前

退出

【例3-93】
ARP AR1 数据存储器 40Dh TREG PREG

MPY

*,AR2
指令执行后 1 40Dh ARP AR1 数据存储器 40Dh TREG PREG 2 40Dh

指令执行前

7h 6h 36h

7h 6h 2Ah

(43) MPYA 乘并累加前一次乘积 P90 (44) MPYS 乘并减上一次乘积 P90 退出

(45)MPYU

乘无符号数 P90 直接寻址 间接寻址

语法:MPYU dma MPYU ind[,ARn]

说明:TREG中的无符号数与指定的数据存储单元中的无 符号数相乘,结果存入PREG。指令受PM和OVM影响,指 令执行结果影响C和OV。 【例3-103】
数据存储器 210h TREG PREG

MPYU

16

;DP=4:地址0200h-027Fh
指令执行后 数据存储器 210h TREG PREG 0FFFFh 0FFFFh 0FFFE0001h

指令执行前 0FFFFh 0FFFFh 1h

退出

【例3-104】

MPYU

*,AR6
指令执行后 5 ARP AR5 数据存储器 210h TREG PREG 6 210h

指令执行前 ARP AR5 数据存储器 210h TREG PREG

210h

0FFFFh 0FFFFh 1h

0FFFFh 0FFFFh 0FFFE0001h

(46) NEG

累加器取补码 P77 退出

(47)NMI 非屏蔽中断 语法:NMI 说明:执行该指令时,首先将PC+1压入堆栈,然后将 程序计数器强制置为不可屏蔽中断向量地址24h。该指 令与硬件不可屏蔽中断NMI的效果相同。指令不受INTM 的影响,执行后置INTM=1。 (48)NOP 语法:NOP 说明:该指令除了执行PC值加1外不执行任何操作。在 建立流水线和执行延时情况下,该指令很有用。 (49) NORM 累加器内容归一化 P77 退出 空操作

(50)OR

与累加器进行或操作 P78 直接寻址 间接寻址 长立即数寻址 左移16位的长立即数寻址

语法:OR dma OR ind[,ARn] OR #1k[,shift] OR #1k,16

说明:ACC与指定的数据存储单元中的数或一个长立即 数进行或操作,结果存ACC中,长立即数在操作前可进 行左移位。对于直接寻址、间接寻址或不移位的长立即 数,ACC的高16位内容不变。而对于移位数不为0的立即 寻址,左移时低位填0,高位不进行符号扩展。指令不 受SXM影响。 (51) OUT 输出数据到端口 P105 退出

【例3-111】
数据存储器 408h ACC × C

OR

8

;DP=8
数据存储器 408h ACC × C 指令执行后 0F000h 10F002h

指令执行前 0F000h 100002h

【例3-112】
ARP AR1 数据存储器 300h ACC × C

OR

*,AR0
指令执行后 1 0300h ARP AR1 数据存储器 300h ACC × C 0 0300h

指令执行前

1111h 222h

1111h 1333h

退出

(52)PAC

乘积寄存器内容装载到累加器 P90

语法:PAC

说明:将PREG的内容左移,移位后加载到累加器中,移 位的次数由ST1寄存器的PM位定义。
【例3-116】 PAC ;PM=0
指令执行后 PREG ACC × C 144h 144h

指令执行前 PREG ACC × C 144h 20h

退出

(53)POP

栈顶内容弹出到累加器低16位 P99

语法:POP 说明:将栈顶(TOS)的内容复制到ACC的低16位,累加 器的高16位清0,堆栈上弹一级。

退出

【例3-117】
指令执行前 ACC × C 堆栈

POP
指令执行后 82h ACC × C 45h 16h 7h 33h 42h 56h 37h 61h 堆栈 16h 7h 33h 42h 56h 37h 61h 61h 45h

退出

(54)POPD

栈顶内容弹出到数据存储单元 P99 dam ind[,ARn] 直接寻址 间接寻址 POPD

语法:POPD

说明:将栈顶(TOS)内容复制到指定的数据存储单 元中,堆栈中的低7个单元依次向上复制一级。

退出

【例3-118】
数据存储器 40Ah 堆栈

POPD
55h 45h 16h 7h 33h 42h 56h 37h 61h

10

;DP=8
指令执行后 45h 16h 7h 33h 42h 56h 37h 61h 61h

指令执行前

数据存储器 40Ah 堆栈

退出

【例3-119】
ARP AR0 数据存储器 300h 堆栈

POPD
0 300h

*+,AR1
指令执行后 ARP AR0 数据存储器 300h 堆栈 1 301h

指令执行前

55h 45h 16h 7h 33h 42h 56h 37h 0AAh

45h 16h 7h 33h 42h 56h 37h 0AAh 0AAh

退出

(55)PSHD

数据存储单元内容压入堆栈 P99 直接寻址 间接寻址

语法:PSHD dma PSHD ind[,ARn]

说明:将指定的数据存储单元的内容复制到栈顶 (TOS),堆栈中的低7个单元值向下移动一级,栈底的 值从堆栈中丢失。

退出

【例3-120】
数据存储器 1FFh 堆栈

PSHD
65h 2h 16h 7h 33h 42h 56h 37h 0AAh

127

;DP=3
指令执行后 65h 65h 2h 16h 7h 33h 42h 56h 37h

指令执行前

数据存储器 1FFh 堆栈

退出

【例3-121】
ARP AR0 数据存储器 1FFh 堆栈

PSHD
0 1FFh

*,AR1
指令执行后 ARP AR0 数据存储器 1FFh 堆栈 1 1FFh

指令执行前

65h 2h 16h 7h 33h 42h 56h 37h 0AAh

65h 65h 2h 16h 7h 33h 42h 56h 37h

退出

(56)PUSH 累加器的低16位压入堆栈 P100 语法:PUSH 说明:堆栈下压一级,累加器的低16位内容复制到栈 顶(TOS),堆栈底部的值丢失。累加器的高16位为0。

退出

【例3-122】 PUSH
指令执行前 ACC 堆栈 × C 65h 2h 16h 7h 33h 42h 56h 37h 0AAh 堆栈 7h ACC × C 7h 65h 2h 16h 7h 33h 42h 56h 37h 指令执行后 7h

退出

(57)RET 子程序返回 P95 语法:RET 说明:栈顶(TOS)的内容弹出到PC中,堆栈值依次向上 复制一级。RET指令用于子程序或中断服务程序返回到 程序调用处。

退出

【例3-123】
PC

RET
指令执行后 7h PC 65h

指令执行前

堆栈

65h 2h 16h 7h 33h 42h 56h 37h 0AAh

堆栈

2h 16h 7h 33h 42h 56h 37h 0AAh 0AAh

退出

(58)RETC

条件返回 P95

语法:RETC cond1[,cond2][,…] 说明:如果指定的条件都满足,那么就执行一个标准 的返回(RET)指令,否则执行下一条指令。 【例3-124】 RETC GEQ,NOV

如果满足ACC≥0且OV=0,那么执行返回。

退出

(59)ROL 累加器循环左移 P79 语法:ROL 说明:ACC循环左移1位,进位位C的值移到ACC的最低 位,ACC的最高位移到C位。指令不受SXM影响,指令执 行结果影响C位。

【例3-125】

ROL
指令执行后 ACC 1
C

指令执行前 ACC 0
C

B0001234h

60002468h

(60) ROR

累加器循环右移 P79

退出

(61)RPT

重复执行下一条指令 P100 直接寻址 间接寻址 短立即数寻址

语法:RPT dma RPT ind[,ARn] RPT #k

说明:将指定数据存储单元中的内容或8位短立即数装 载到重复计数器(RPTC)中,使得RPT后的一条指令被重 复执行n次,n等于RPTC值加1。RPT指令本身不能循环执 行。RPT循环不能被中断。 【例3-127】 RPT 127 ;DP=511:地址FF80h- FFFFh;下一条指令重复13次
数据存储器 FFFFh RPTC 指令执行前 0Ch 0h 数据存储器 FFFFh RPTC 指令执行后 0Ch 0Ch

退出

【例3-128】
ARP AR0 数据存储器 300h RPTC

RPT

*,AR1
0 0300h

;下一条指令重复4096次
指令执行后 ARP AR0 数据存储器 300h RPTC 1 0300h

指令执行前

0FFFh 0h

0FFFh 0FFFh

【例3-129】

RPT

#1

;下一条指令重复2次
指令执行后

指令执行前 RPTC 0h RPTC

1h

退出

(62)SACH

存储累加器移位后的高16位 P79 直接寻址 间接寻址

语法:SACH dma[,shift] SACH ind[,shift[,ARn]]

说明:该指令先将ACC内容复制到输出移位器,在输 出移位器中将整个32位数左移0~7位,再将移位后数 值的高16位复制到指定的数据存储单元。移位时低位 补0,高位丢失。指令执行后,累加器本身保持不变。 指令不受SXM影响。 【例3-130】 SACH 10,1 ;DP=4:地址0200h-027Fh;左移1位
指令执行前 ACC 数据存储器 20Ah × C 0h 4208001h ACC 数据存储器 20Ah × C 0841h 指令执行后 4208001h

退出

【例3-131】
ARP AR1 ACC 数据存储器 300h × C

SACH
1 0300h

*+,0,AR2
ARP AR1 ACC 数据存储器 300h

;无移位
指令执行后 2 0301h × C 0420h 4208001h

指令执行前

4208001h

0h

退出

(63)SACL 存储累加器移位后的低16位 P79 语法:SACL dma[,shift] 直接寻址 SACL ind[,shift[,ARn]] 间接寻址 说明:该指令先将ACC内容复制到输出移位器,在输 出移位器中将整个32位数左移0~7位,再将移位后数 值的低16位复制到指定的数据存储单元。移位时低位 补0,高位丢失。指令执行后,累加器本身保持不变。 指令不受SXM影响。 【例3-132】SACL
ACC 数据存储器 20Bh × C 5h

11,1 ;DP=4:地址0200h-027Hh;左移1位
指令执行后 ACC 数据存储器 20Bh × C 0842h 7C638421h

指令执行前 7C638421h

退出

【例3-133】

SACL

*,0,AR7

;无移位
指令执行后

指令执行前 ARP AR6 ACC 数据存储器 300h × C 05h 6 0300h 00FF8421h ARP AR6 ACC 数据存储器 300h × C

7 0300h 00FF8421h

8421h

退出

(64)SAR 存储辅助寄存器 P85 语法:SAR ARx,dma SAR ARx,ind[,ARn]

直接寻址 间接寻址

说明:将指定的辅助寄存器(ARx)中的内容复制到指定 的数据存储单元。对于间接寻址,若需要修改辅助寄存 器中的内容时,则先将该辅助寄存器中的内容复制到指 定的数据存储单元,然后再修改辅助寄存器。 【例3-134】
AR0 数据存储器 31Eh

SAR

AR0,30
37h 18h

;DP=6:地址0300h-037Fh
指令执行后 AR0 37h 37h

指令执行前

数据存储器 31Eh

退出

【例3-135】

SAR

AR0,*+
指令执行后 0 401h 0h ARP AR0 数据存储器 401h 0 402h 401h

指令执行前 ARP AR0 数据存储器 401h

退出

(65)SBRK

辅助寄存器减去短立即数 P85

语法:SBRK #k 短立即数寻址 说明:当前辅助寄存器中的内容减去一个8位立即数( 右对齐),结果存人当前辅助寄存器。 【例3-136】 SBRK
7 0h

#0FFh
指令执行后 ARP AR7 7 FF01h

指令执行前 ARP AR7

退出

(66)SETC

控制位置位 P101

语法:SETC 控制位 说明:将指定的控制位置1。控制位包括:C、CNF、 INTM、OVM、SXM、TC、XF。 (67)SFL 累加器左移 P80 语法:SFL 说明:将ACC的内容左移1位,ACC的最高位移到C位, 最低位补0。该指令不受SXM影响,指令执行的结果影 响C。 【例3-138】
0 C

SFL
指令执行后 ACC 1 C 60002468h

指令执行前 ACC B0001234h

退出

(68)SFR 累加器右移 P80 语法:SFR 说明:将ACC右移1位,若SXM=1,指令进行算术右移, 最高位(MSB)保持不变并复制到第30位,第0位(LSB)移 到C;若SXM=0,指令进行逻辑右移,ACC内容均右移1 位,最高位填0,最低位移到C。指令受SXM影响,指令 执行的结果影响C。 【例3-139】 SFR ;SXM=0:无符号扩展
指令执行前 ACC 0 C B0001234h ACC 0 C 指令执行后 5800091Ah

【例3-140】
ACC 0 C

SFR
指令执行前 B0001234h

;SXM=1:符号扩展
指令执行后 ACC 0 C D800091Ah

退出

(69)SPAC 累加器减乘积寄存器 P90 语法:SPAC 说明:ACC减去移位后的PREG值,结果存入ACC,移位 的次数由PM控制。指令不受SXM影响,PREG总是进行 符号扩展。指令受PM和OVM影响,指令执行的结果影 响C和OV位。 【例3-141】 SPAC ;PM=0
指令执行后 PREG ACC 1 C 10000000h 60000000h

指令执行前 PREG ACC × C 10000000h 70000000h

退出

(70)SPH

存储乘积寄存器的高16位 P91

语法:SPH dma 直接寻址 SPH ind[,ARn] 间接寻址 说明:按PM指定的方式将PREG的内容移位,移位后的 高16位保存到指定的数据存储单元。指令执行时,先 将PREG内容复制到乘积移位器,然后根据PM进行移位, 若是右移6位,则高位符号扩展,低位丢失;若是左移, 则高位丢失,低位填0。移位后的高16位保存到数据存 储单元中,而ACC和PREG中的内容保持不变。 【例3-142】 SPH
PREG 数据存储器 203h

3

;DP=4:地址0200h-027Fh;PM=0
指令执行后 PREG 数据存储器 203h FE079844h

指令执行前 FE079844h

4567h

FE07h

退出

【例3-143】

SPH

*,AR7

;PM=2:左移4位
指令执行后

指令执行前 ARP AR6 PREG 数据存储器 203h 6 0203h FE079844h ARP AR6 PREG 数据存储器 203h

7 0203h FE079844h

4567h

E079h

退出

(71)SPL 存储乘积寄存器的低16位 P91 语法:SPL dma 直接寻址 SPL ind[,ARn] 间接寻址 说明:按PM指定的方式将PREG的内容移位,移位后的 低16位保存到指定的数据存储单元。指令执行时,先 将PREG内容复制到乘积移位器,然后根据PM进行移位, 若是右移6位,则高位符号扩展,低位丢失;若是左 移,则高位丢失,低位填0。移位后的低16位保存到 数据存储单元中,而ACC和PREG中的内容保持不变。 【例3-144】
PREG 数据存储器 205h

SPL

5

;DP=4:PM=2:左移4位
指令执行后 PREG 数据存储器 205h FE079844h

指令执行前 FE079844h

4567h

08440h

退出

【例3-145】
ARP AR2 PREG 数据存储器 205h

SPL
2 0205h

*,AR3
ARP AR2 PREG

;PM=0
指令执行后 3 0205h FE079844h

指令执行前

FE079844h

4567h

数据存储器 205h

09844h

退出

(72)SPLK 长立即数存储到数据存储单元 P105 语法:SPLK #1k,dma 直接寻址 SPLK #1k,ind[,ARn] 间接寻址 说明:将16位长立即数存储到指定的数据存储单元。 【例3-146】 SPLK #7FFFh,3 ;DP=6
数据存储器 303h 指令执行前 FE07h 数据存储器 303h 指令执行后 7FFFh

【例3-147】
ARP AR0 数据存储器 300h

SPLK

#1111h,*+,AR4
指令执行后 0 ARP AR0 数据存储器 300h 4 301h

指令执行前

300h

01h

1111h

退出

(73)SPM

设置PREG输出的移位模式 P102

语法:SPM 常数(0-3) 说明:将指令中的常数复制到状态寄存器ST1的乘积模 式(PM)位。PM控制PREG输出移位器的移位模式(见表29)。当指令访问PREG时,PREG值先通过乘积移位器完 成指定模式的移位。 【例3-148】 SPM 3

该指令选择乘积寄存器移位模式3,使后面的乘 积寄存器的值都右移6位。 (74) SQRA 数值平方并累加前一次乘积 P91 (75) SQRS 数值平方并减去前一次乘积 P92 退出

(76)SST 存储状态寄存器 P102 语法:SST #m,dma 直接寻址 SST #m,ind[,ARn] 间接寻址 说明:将状态寄存器的值存储到指定的数据存储单元, 指令中的m=0时为ST0,m=1时为ST1。使用直接寻址时, 指令将不管DP为何值,都将状态寄存器值存储到第0 页的数据存储单元。采用间接寻址时,存储器地址由 所选的辅助寄存器指定,因此状态寄存器的值可以存 储到数据寄存器的任何页面。 【例3-154】 SST
ST0 数据存储器 60h

#0,96 ;直接寻址,自动访问数据页面0
指令执行后 ST0 数据存储器 60h 0A408h

指令执行前 0A408h

0Ah

0A408h

退出

【例3-155】
ARP AR0 ST1 数据存储器 300h

SST

#1,AR7
指令执行后 0 ARP AR0 ST1 数据存储器 300h 7 300h 2580h

指令执行前

300h 2580h

4567h

2580h

退出

(77)SUB 累加器减 P80 语法:SUB dma[,shift] 直接寻址 SUB dma,16 左移16位直接寻址 SUB ind[,shift[,ARn]] 间接寻址 SUB ind,16[,ARn] 左移16位间接寻址 SUB #k 短立即数寻址 SUB #1k[,shift] 长立即数寻址 说明:在直接寻址、间接寻址和长立即数寻址时,累 加器减去左移后的数据单元内容或一个16位长立即数, 结果存入ACC中。在移位时,低位填0,若SXM=1,高位 进行符号扩展;若SXM=0,高位填0。 在使用短立即数寻址时,ACC减去一个8位正的常数。 在这种情况下,不能指定移位值,减法不受SXM的影响。 通常,若相减的结果产生借位,则C=0;若不产生借位, C=1。但是,当左移16位进行相减时,若相减的结果产 生借位,则C=0;若不产生借位,则C不变。
退出

【例3-156】
数据存储器 450h ACC × C

SUB

80
11h 24h

;DP=8:地址0400h-047Fh
数据存储器 450h ACC 1 C 指令执行后 11h 13h

指令执行前

【例3-157】
ACC × C

SUB

#8h
ACC

;减短立即数
指令执行后 0 C FFFFFFFFh

指令执行前 07h

退出

【例3-158】
ARP AR7 数据存储器 301h ACC ×
C

SUB

*-,1,AR0
7 ARP AR7

;左移1位;SXM=0
指令执行后 0 0300h

指令执行前

0301h

04h 09h

数据存储器 301h ACC 1
C

04h 01h

【例3-159】
ACC × C

SUB

#0FFFh,4
ACC

;左移4位;SXM=0
指令执行后 1 C 0Fh

指令执行前 0FFFFh

退出

(78)SUBB

带借位的累加器减 P81 直接寻址 间接寻址

语法:SUBB dma SUBB ind[,ARn]

说明:ACC减去指定的数据存储单元的内容及进位位C 的逻辑反,结果存入ACC中,符号不扩展。进位位按正 常方式变化,若相减产生借位,则C=0;若不产生借位, C=1。指令受OVM影响,执行的结果影响C和OV。该指令 常用于多精度的算术运算。 【例3-160】
数据存储器 405h ACC 0 C

SUBB

5
06h 6h

;DP=8:地址0400h-047Fh
数据存储器 405h ACC 0 C 指令执行后 06h 0FFFFFFFFh

指令执行前

退出

【例3-161】
ARP AR6 数据存储器 301h ACC 1 C

SUBB

*
指令执行后 6 ARP AR6 数据存储器 301h ACC 1 C 6 0301h

指令执行前

0301h

02h 04h

02h 02h

指令执行前,C=1,前面没有借位,该操作的结果也不 产生借位,故C=1。

退出

(79)SUBC

条件减 P81 直接寻址 间接寻址

语法:SUBC dma SUBC ind[,ARn]

说明:该指令要求ACC和指定的数据存储单元中的值必 须大于或等于0。指令先用ACC减去左移15位后的数据 存储单元的值,若减的结果大于或等于0,则结果左移 1位再加1后存入ACC;否则,ACC只左移1位。 该指令常用于实现除法运算(用移位减实现除法): 把正的16位被除数放在ACC的低16位,ACC的高位清0; 把正的16位除数放在数据存储单元中,连续执行SUBC 指令16次,最后一次SUBC指令完成后,ACC的低16位就 是除法的商,高16位是除法的余数。如果ACC和数据存 储单元的值为负数,则不能用该指令实现除法。该指 令不受SXM和OVM的影响,指令执行的结果影响C和OV。 退出

【例3-162】
数据存储器 302h ACC × C

SUBC
01h 04h

2

;DP=6
数据存储器 302h ACC 0 C 指令执行后 01h 08h

指令执行前

【例3-163】

RPT SUBC

#15 *

指令执行前 ARP AR3 数据存储器 1000h ACC × C 3 1000h ARP AR3 数据存储器 1000h ACC 1 C

指令执行后 3 1000h

07h 41h

07h 20009h

退出

(80)SUBS

符号扩展抑制的累加器减 P82 直接寻址 间接寻址

语法:SUBS dma SUBS ind[,ARn]

说明:ACC减去指定的数据存储单元的内容,抑制符号 扩展。无论SXM为何值,数据存储单元中的值均被看作 16位无符号数,ACC的内容被看作有符号数。若相减的 结果产生借位,则C=0;否则C=1。指令受OVM影响,指 令执行的结果影响C和OV。 该指令与SXM=0和移位数为0时的SUB指令的功能相 同。

退出

【例3-164】
ARP AR0 数据存储器 310h ACC × C

SUBS
0 0310h

*

;SXM=1
指令执行后 ARP AR0 数据存储器 310h ACC 1 C 0 0310h

指令执行前

0F003h 0FFFF105h

0F003h 0FFF0102h

【例3-165】
数据存储器 802h ACC × C

SUBS
0F003h 0F105h

2

;DP=16;SXM=1
数据存储器 802h ACC 1 C 指令执行后 0F003h 102h

指令执行前

退出

(81)SUBT

TREG确定移位的累加器减 P82 直接寻址 间接寻址

语法:SUBT dma SUBT ind[,ARn]

说明:ACC减去左移后的数据存储单元中的值,结果 存入ACC中,左移的位数由TREG的低4位(0-15)确定。 数据存储单元中数值的符号扩展受SXM控制。指令受 SXM和OVM影响,指令执行的结果影响C和OV。 【例3-166】SUBT
数据存储器 02FFh TREG ACC × C

127
06h 08h

;DP=5:地址0280h-02FFh;SXM=0
数据存储器 02FFh TREG ACC 1 C 指令执行后 06h 08h 0F7A5h

指令执行前

0FDA5h

退出

【例3-167】

SUBT

*

;SXM=1
指令执行后

指令执行前 ARP AR1 数据存储器 800h TREG ACC × C 1 800h ARP AR1 数据存储器 800h TREG ACC 0 C

1 800h

01h 08h 0h

01h 08h FFFFFF00h

(82) TBLR 表读 P105 (83) TBLW 表写 P106 退出

(84) TRAP 软件中断 P95
(85)XOR 与累加器进行异或操作 P82

语法:XOR dma 直接寻址 XOR ind[,ARn] 间接寻址 XOR #1k[,shift] 长立即数寻址 XOR #1k,16 左移16位的长立即数寻址 说明:使用直接或间接寻址时,指定的数据存储单 元的内容与ACC的低16位进行异或操作,结果存入 ACC的低16位,ACC的高16位不变。使用立即寻址时, 长立即数左移,两端(数据操作数没有占用的位)填0, 然后和ACC的32位数进行异或。该指令不受SXM影响, 执行的结果不影响C。 退出

【例3-173】
数据存储器 0FFFFh ACC × C

XOR

127
0F0F0h

;DP=511:地址FF80h-FFFFh
数据存储器 0FFFFh ACC × C 指令执行后 0F0F0h 1234A688h

指令执行前

12345678h

【例3-174】
ARP AR7 数据存储器 300h ACC × C

XOR

*+,AR0
指令执行后 7 0300h ARP AR7 数据存储器 300h ACC × C 0 0301h

指令执行前

0FFFFh 1234F0F0h

0FFFFh 12340F0Fh

退出

【例3-175】

XOR

#0F0F0h,4

;先将数据左移4位
指令执行后

指令执行前 ACC × C 11111010h ACC × C

111E1F10h

(86) ZLAR 累加器低位字清零,高位字带舍入装载 P83

退出

3.3 DSP软件的文件结构
在DSP软件进行调试之前,一般需要书写3种格式的文件: 汇编语言文件、头文件和命令文件。在编写这3类文件时, 通常要用到一些汇编伪指令。 1.常用的汇编伪指令 (1).include。该指令是告诉汇编器在汇编时将其他文件包 含在内,即执行到该指令时,编译器开始从其他文件中读 源语句,完成后再从当前文件读源语句。 (2).ref。用于识别在当前程序模块中使用但在其他模块 中定义的符号。 (3).set和.equ。把常量赋予给符号,即定义常量。 (4).sect。定义一个初始化命名段,并把后续代码或数据 与该段相联系。用.sect定义的段可包含代码和数据。

(5).usect。在未初始化命名段内保留空间。 (6).def。用于定义在当前程序模块中定义的、在其他 程序模块中可以使用的符号。 (7).bss。未初始化的变量在.bss段内保留空间,即声明变量
(8).data。定义初始化的数据命名段。

(9).word和.int。将一个或多个16位数值存储在当前段内 的连续字中。 (10).text。定义段内代码部分,一般用于包含程序主代码
(11).end。终止汇编,它应当是书写的程序的最后一条语句 (12).label。定义特定的符号,它表示当前段内装载时的地 址。当段在一个地址处装载但在另一个地址处运行时该指令 特别有用。 (13)MEMORY。程序和数据区的分配指令。 (14)SECTIONS。指定的程序段和数据单元的分配。 退出

2.头文件 头文件是用来定义系统内用到的一些寄存器的映射地址, 以及用户自定义的一些变量和寄存器。该文件的扩展名为.H, 它只在程序编译的过程中使用,不占用程序存储单元。另外, 系统中没有用到的寄存器,不必在头文件中进行定义。 以下用一个简单的头文件F2407REGS.H为例来说明头文 件的基本结构。 IMR IFR PIVR MCRA MCRB … .set .set .set .set .set 0004h 0006h 0701Eh 07090h 07092h

退出

3.汇编语言文件 汇编语言文件是完成用户功能的应用软件,是系统软件 的主体部分,其扩展名为.ASM。此文件经编译器编译后存储 在程序存储单元。在汇编语言文件的开头要将所定义的相关 头文件包含进来(.include F2407REGS.H)。 下面通过一个例子来说明汇编语言文件的基本结构。 .include F2407REGS.H ;包含头文件F2407REGS.H .def _c_int0 ;定义程序模块的符号_c_int0 .sect “.vectors” ;定义主向量区 RSVECT B _c_int0 ;复位向量 INT1 B PHANTOM ;中断优先级1 INT2 B GISR2 ;中断优先级2 … 退出

.sect PVECTORS B B .text

“.pvecs” PHANTOM … T1PINTISR …

;定义偏移向量区

;T1PINT中断偏移向量地址 ;主程序

_c_int0:
SETC CLRC … GISR2: 保护现场 中断处理 恢复现场 RET … .END INTM SXM

;中断返回 ;程序结束 退出

4.命令文件 命令文件又称系统配置文件,用于实现对程序存储空间和 数据存储空间的分配,具体地讲就是定义用户的汇编程序放在 程序存储器中的位置,定义用户程序中自定义的变量在所使用 的数据存储器中的确定位置。命令文件的扩展名为.CMD。
在命名文件中使用MEMORY和SECTIONS两个伪指令对程序 和数据存储区间进行分配。 (1)MEMORY。该伪指令对目标系统中可以被使用的或将要 被使用的程序和数据区间进行定义,包括定义其名称、属 性、起始地址和地址长度。具体格式如下: MEMORY { PAGE0: 名称MC1[属性]:起始地址,字节长度 … 名称MCn[属性]:起始地址,字节长度 退出

PAGE1: 名称MD1[属性]: … 名称MDn[属性]: }

起始地址, 起始地址,

字节长度 字节长度

其中,PAGE0规定为程序存储区间;PAGE1规定为数据存储区间 属性选项可以定义为: R——所定义的存储区间的内容可以被读出; W——所定义的存储区间可以被写人; X——所定义的存储区间可以包含可执行的代码; I——所定义的存储区间可以被初始化。 一般不定义属性,在不定义属性选项时,表示具有以上 所有的属性。

退出

(2)SECTIONS。该指令定义汇编语言文件中的程序代码存放在 由MEMORY所指定的程序存储器的哪个区间内,或者定义汇编 语言文件中所定义的变量、缓冲区及数据区存放在由MEMORY 所定义的哪个特定的数据区间中。 SECTIONS的具体格式如下: SECTIONS { 名称SC1: 名称SC2: … 名称SDn: } {}>名称MC1 {}>名称MC2 {}>名称MDn PAGE0 PAGE0 PAGE1

退出

(3) 命令文件举例 MEMORY { PAGE0: VECS: origin=0000h, length=40h PROG: origin=100h, length=8000h PAGE1: B2: origin=60h, length=20h B0: origin=200h, length=100h B1: origin=300h, length=100h }

退出

SECTIONS { .vectors: .text: .bass: .buffer: .data }

{}>VECS {}>PROG {}>B0 {}>B1 {}>B2

PAGE0 PAGE0 PAGE1 PAGE1 PAGE1

其中,.vectors和.text分别为汇编语言文件中定义的程序 段;.bass、.buffer和.data分别为汇编语言文件中定义的一些 数据区和缓冲区。此命令文件是将程序段.vectors分配在程序 存储器的VECS段(0000h-0040h)内;将主程序段.text分配在程 序存储器的PROG段(0100h-8100h)内;将数据区.bass分配在数 据存储器中的B0(0200h-0300h)块内;将数据缓冲区.buffer分 配在数据存储器中的B1(0300h-0400h)块内;将数据区.data分 配在数据存储器中的B2(0060h-0080h)块内。 退出


推荐相关:

第六章 DSP寻址方式汇编指令当硬件执行指令时...为读者讲解 DSP寻址方式汇 编指令系统,其中大...PM +4 +1 0 -1 -2 -3 -4 -5 -6 保存...


DSP控制器及原理课堂笔记重点_信息与通信_工程科技_专业资料。整理DSP笔记 第一章 绪论(大题 20 分) 1-1 DSP 的概念与主要特点 一.Dsp 概念 数字信号处理(...


DSP控制器原理 复习大纲_工学_高等教育_教育专区。dps的部分复习知识 15-16-1 DSP 控制器原理 复习大纲 答案 2016-1-4 一、DSP 控制器基本概念题 1. DSP ...


DSP控制器原理 复习大纲 答案2016-1-4_工学_高等...(1)进入低功耗模式,采用执行软件指令“IDEL” ,即...DSP控制器原理与应用 张... 暂无评价 117页 免费...


参考书: DSP 芯片的原理与开发应用(第四版),张雄伟,电子工业出版社,2009.3....第 3 章、TMS320C54X 的指令系统 第 3 章、TMS320C54X 的指令系统 寻址...


1​2​1​3DSP 原理及应用 DSP Theory and Application 课程编号:1630033...第三章 TMS320C55x 指令系统 课程教学内容: (1)寻址方式 (2)指令系统 课程...


6 中)P338 第 3 章 TMS320C55x 的指令系统 1.C55x DSP 有哪三种寻址...送控制字 // 延时 // 反向顺序送控制字 // 延时 4 第 6 章 DSP 集成...


快速 的指令周 期;丰 富的 片内存储 器件 灵活 的寻址方 式;独 立的 ...DSP 第二类应用:大量便宜的嵌入式系统,如 手机、硬盘光盘驱动器(用于伺服控制...


(无线电技术与信息系统、 年级 4 专业 计算机应用...第3周 备 注 第二章 TMS320 系列 DSP 结构及...寻址方式中的程序存储器寻址方式是 DSP 寻址方式的...


DSP原理及应用考试卷答案 4页 免费如要投诉违规内容...3. DSP 的内部存储器类型可分为随机存取存储器 (...7. 在’C54x DSP 寻址和指令系统中, Xmem Y...

网站首页 | 网站地图
3986 3986.net
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@qq.com