第3章汇编语言指令系统20131001

Report
第3章 汇编语言指令系统
在DSP应用中,虽然可以使用C/C++高
级语言编程,降低了对编程者的要求,但
在一些实时性要求高的场合仍然需要采用
汇编编程,以充分利用DSP丰富的硬件资
源,发挥它的实时运算能力。 用汇编语
言编程,要求编程者对DSP的低层有充分
的了解,包括硬件结构、存储器空间模型
和I/O口的组织等。同时又要求编程者对
指令系统有深刻的了解。
第3章 汇编语言指令系统
目录:
3.1 C54x汇编语言指令集介绍
3.2 寻址方式
3.3 C54x系列DSP的指令系统
参考:TMS320C54x DSP Reference Set
Volume 2:Mnemonic Instruction Set.pdf,
spru172c, 2001, TI官网
3.1 C54x汇编语言指令集介绍
C54x汇编语言源程序指令包括:
 汇编语言指令Assembly Language Instructions
 汇编伪指令Assembler Directives
 宏指令Macro Directives
本章介绍C54x DSP的汇编语言指令系统。与
其它CPU的指令集相同,汇编语言指令又称为硬
指令,它们在汇编和连接后形成可执行的机器
码,供DSP进行运算和其它操作。
TMS320C54x assembly language source programs consist of source
statements that can contain assembler directives, assembly language
instructions, macro directives, and comments.
3.1 C54x汇编语言指令集介绍
BIT Xmem, BITC
3.1.1 指令系统中的符号、缩写及操作符
 指令系统中采用的符号和缩写如下列表中所示
序号
1
2
3
4
5
6
7
8
9
10
符 号
A
ALU
AR
ARx
ARP
ASM
B
BRAF
BRC
含
义
累加器A
算术逻辑运算单元
泛指通用辅助寄存器
指定某一辅助寄存器AR0~AR7
ST0中的3位辅助寄存器指针
ST1中的5位累加器移位方式位-16~15
累加器B
ST1中的块重复操作标志位
块重复操作计数器
用于测试指令,指定数据存储器单元中
BITC或bit_code
的哪 一位被测试,取指范围:0~15
第3章 汇编语言指令系统
3.1.1 指令系统中的符号、缩写及操作符
(续)
序号
符 号
含
义
11
C16
12
C
13
CC
14
CMPT
15
CPL
ST1中的直接寻址编辑标志位
16
cond
表示一种条件的操作数,用于条件执行指令
17
[d],[D]
18
DAB
D地址总线
19
DAR
DAB地址寄存器
20
dmad
16位立即数数据存储器地址(0~65535)
ST1中的双16位/双精度算术运算方式位
ST0中的进位位
2位条件码(0CC3)
ST1中的ARP修正方式位
延时选项
第3章 汇编语言指令系统
3.1.1 指令系统中的符号、缩写及操作符
(续)
序号
21
符 号
Dmem
22
DP
23
24
25
26
27
28
29
30
Dst
dst_
EAB
EAR
extpmad
FRCT
hi(A)
HM
含
义
数据存储器操作数
ST0中的数据存储器页指针
(0DP511)
目的累加器(A和B)
与dst相反的目的累加器
E地址总线
EAB地址寄存器
23位立即数程序存储器地址
ST1中的小数方式位
累加器的高阶位(AH或BH)
ST1中的保持方式位
第3章 汇编语言指令系统
3.1.1 指令系统中的符号、缩写及操作符 (续)
序号
31
32
33
34
35
36
37
符 号
IFR
INTM
K
k3
k5
k9
lk
含
义
中断标志寄存器
ST1中的中断屏蔽位
少于9位的短立即数
3位立即数(0k37)
5位立即数(-16k515)
9位立即数(0k9511)
16位长立即数
38
Lmem
利用长字寻址的32位单数据存储器操作数
39
40
mmr,MMR 存储器映像寄存器
MMRx,
存储器映像寄存器,AR0~AR7或SP
MMRy
第3章 汇编语言指令系统
XC n, cond [, cond
[, cond] ]
RSBX N, SBIT
3.1.1 指令系统中的符号、缩写及操作符(续)
序号
41
符 号
n
含
义
XC指令后面的字数,取1或2
42
N
43
44
45
OVA
OVB
OVdst
ST0中的累加器A溢出标志
ST0中的累加器B溢出标志
指定目的累加器(A或B)的溢出标志
46
OVdst_
另一个目的累加器(A或B)的溢出标志
47
48
49
50
OVsrc
OVM
PA
PAR
指定源累加器(A或B)的溢出标志
ST1中的溢出方式位
16位立即数端口地址(0PA65535)
程序存储器地址寄存器
指定状态寄存器,N=0为ST0,N=1为ST1
第3章 汇编语言指令系统
3.1.1 指令系统中的符号、缩写及操作符
(续)
序号
符 号
51
PC
52
pmad
53
54
55
56
57
58
59
60
pmem
PMST
prog
[R]
rnd
RC
RTN
REA
含
义
程序计数器
16位立即数程序存储器地址
(0pmad65535)
程序存储器操作数
处理器工作方式状态寄存器
程序存储器操作数
舍入选项
舍入 Round
重复计数器
快速返回寄存器
块重复结束地址寄存器
第3章 汇编语言指令系统
RSBX N, SBIT
3.1.1 指令系统中的符号、缩写及操作符(续)
序号
61
62
63
64
65
66
67
68
69
70
符 号
含
义
块重复起始地址寄存器
用于指定状态寄存器位的4位地址
SBIT
(0~15)
SHFT
4位移位值(0~15)
SHIFT
5位移位值(-16~15)
Sind
间接寻址的单数据存储器操作数
Smem
16位单数据存储器操作数
SP
堆栈指针寄存器
src
源累加器(A或B)
ST0,ST1 状态寄存器0,状态寄存器1
SXM
ST1中的符号扩展方式位
RSA
第3章 汇编语言指令系统
3.1.1 指令系统中的符号、缩写及操作符(续)
序号
71
72
73
74
75
76
77
78
79
80
符 号
T
TC
TOS
TRN
TS
uns
XF
XPC
含
义
暂存器
ST0中的测试/控制标志
堆栈顶部
状态转移寄存器(比较选择存储CSST单元内) CMPS
指令
由T寄存器的5~0位所规定的移位数(-16~31)
无符号数
ST1中的外部标志状态位
程序计数器扩展寄存器
16位双数据存储器操作数, 用于双数据操作
Xmem
数指令和单数据操作指令
16位双数据存储器操作数,用于双数据操作
Ymem
数指令
第3章 汇编语言指令系统
3.1.1 指令系统中的符号、缩写及操作符
 指令系统中的运算符号及优先级如下列表中所示
序号
符 号
1
+-~!
2
* /%
3
+ -
4
^
5
<< >>
6
运算功能
取正、取负、按位求补、
逻辑非
乘法、除法、求模
求值顺序
从右至左
从左至右
加法、减法
从左至右
指数
从左到右
左移、右移
从左至右
<
小于、小于等于
从左至右
7
> 
大于、大于等于
从左至右
8
 !=
不等于
从左至右
第3章 汇编语言指令系统
3.1.1 指令系统中的符号、缩写及操作符
 指令系统中的运算符号及优先级如下列表中所示
序号 符 号
8
9
=
&
10
∧
11
|
运算功能
等于
按位与运算(AND)
按位异或运算
(exclusive OR)
按位或运算(OR)
求值顺序
从左至右
从左至右
从左至右
从左至右
3.1 C54x汇编语言指令集介绍
3.1.2 汇编语言指令举例
本节以LD装载指令为例,说明指令的格式和
其它一些有用信息。
(1)LD Smem, dst
 汇编语法
0 0 0 1 0 0 0 DI AAAAAAA
 操作数
(2)LD Xmem, SHFT, dst
 指令代码
1 0 0 1 0 1 0 DX X X X S H F T
 执行
(3)LD #lk [, SHFT ], dst
 状态位
 说明
1 1 1 1 0 0 0 D0 0 1 0 S H F T
 指令字长
 周期数
3.1.2 汇编语言指令举例: LD命令
3.1.2 汇编语言指令举例: LD命令
3.1.2 汇编语言指令举例: LD命令
3.1.2 汇编语言指令举例: LD命令
3.1.2 汇编语言指令举例: LD命令
3.1.2 汇编语言指令举例: LD命令
3.1.2 汇编语言指令举例: LD命令
D
3.2 寻址方式
3.2 寻址方式
C54x的寻址方式共有下列7种:







(1)立即寻址
(2)绝对寻址
(3)累加器寻址
(4)直接寻址
(5)间接寻址
(6)存储器映像寄存器寻址
(7)堆栈寻址
3.2 寻址方式
3.2.1 立即寻址
立即寻址是指指令中的操作数是一个立即数,用#表示
l 短立即数—3位(k3)、5位(k5) 、8位(K)或9位(k9)
l 长立即数—16(lk)位
使用短立即数的指令代码通常为一个字长
使用长立即数的指令代码通常为两个字长
例3-3
LD #4, DP ;4→DP
指令代码:EA04H
LD #7850H,A ;7850H→A; 指令代码:F020H 7850H
3.2 寻址方式
3.2.1 立即寻址
可使用立即寻址的指令及立即数的位数如下表所示:
3位或5位
8位
9位
立即数 立即数 立即数
LD
FRAME
LD
RPT
LD
16位
立即数
ADD
ST
ORM
LD
ANDM
XOR
FRAME: Stack Pointer Immediate Offset;
BITF
ADDM
STM
RPT
MAC
XORM
OR
CMPM
AND
SUB
RPTZ
Syntax: FRAME K
3.2 寻址方式
3.2.2 绝对寻址
绝对寻址有下列4种类型 :
 数据存储器(dmad)寻址
 程序存储器(pmad)寻址
 I/O端口(PA)寻址
 *(lk)寻址
3.2.2 绝对寻址
绝对寻址方式
数据存储器
(dmad)寻址
程序存储器
(pmad)寻址
相关指令如下表所示:
相关指令
MVDK Smem, dmad
MVDM dmad, MMR
MVKD dmad, Smem
MVMD MMR, dmad
FIRS Xmem, Ymem, pmad
MACD Smem, pmad, src
pmad→PAR,
(RC)≠0, (B)+(A(32–16))×(Pmem
pmad→PAR,While
(Smem)×(Pmem
addressed by PAR)
addressed
by(Smem)→T,
PAR)→B, ((Xmem)+(Ymem))<<16→A,
+(src)→src,
(Smem)→Smem+1,
(PAR)+1→PAR,
(RC) −1→RC (MACD指令功能)
(FIRS指令功能)
If (RC)≠0, (PAR)+1→PAR
3.2 寻址方式
3.2.2 绝对寻址
绝对寻址方式
相关指令
MACP Smem, pmad, src
程序存储器
MVDP Smem, pmad
(pmad)寻址
MVPD pmad, Smem
I/O端口(PA)寻址 PORTR PA, Smem
PORTW Smem, PA
可用于所有支持单数据操作数
*(lk)寻址
(Smem) 的指令
3.2 寻址方式
3.2.3 累加器寻址
有两条指令采用这种寻址方式 :A(22-0)→PAR ,
累加器寻址指令
解释
A中内容为程序存储器地址,将
READA Smem 该地址中的数据送入Smem指定
的数据存储器中
将Smem指定的数据存储器中的内
WRITA Smem
容送入A所指出的程序存储器中
(Smem)
(Pmem addressed by PAR),
If (RC)≠0, (RC)–1→RC , (PAR)+1→PAR
第3章 汇编语言指令系统
3.2.3 累加器寻址
例3-7 程序存储器中有一个常数表格,首地址为TABLE,
长度是10个字。要求把该表格读入首地址为BUFFER的
数据存储器区中。实现该功能的程序段如下:
LD
#TABLE,A
;#TABLE→A
STM #BUFFER,AR3 ;#BUFFER→AR3
RPT #9
READA *AR3+
;后面一条指令将运行10次
; A →PAR, ((PAR))→(AR3)
; (PAR)+1→PAR, (AR3)+1→AR3
3.2 寻址方式
3.2.4 直接寻址
直接寻址是指利用指令中的地址偏移量dma与数
据页指针DP或堆栈指针SP组合,找到数据空间中
的一个16位地址的方式。
指令代码格式如下所示:
15 ~ 8
7
6~0
操 作 码
I=0
数据存储器地址偏移(dma)
3.2 寻址方式
3.2.4 直接寻址
 CPL=0时
直接寻址
指
令
15~8
操作码
7
I=0
页指针DP
(位于ST0中)
9位数据页指针DP
16位数据
存储器地址
9位数据页指针DP
高9位
6~0
dma
dma
低7位
3.2 寻址方式
3.2.4 直接寻址
 CPL=1时
直接寻址
指
令
堆栈指针SP
16位数据
存储器地址
15~8
操作码
7
I=0
6~0
dmad
16位堆栈指针SP
16位:
+
dmad
SP +
dmad
低7位
第3章 汇编语言指令系统
• 3.2.4 直接寻址
例3-8 下列程序段实现的功能是:将两个数据存储单
元01E0h和01E1h中的内容相加,然后把结果送入A。
RSBX CPL
;CPL=0,采用DP方式。
LD
#3,DP
;DP指向第3页。
LD
@60h,A ;dma=60h,(01E0h)→A
ADD @61h,A ; dma=61h , ((A))+(01E1h)→A
@60h
DP
@常省略。 16位数据
0000 0001 1110 0000
存储器地址
0
1
E
0 h
3.2.5 间接寻址
间接寻址是指通过两个辅助算术逻辑单元ARAU0、
ARAU1及8个辅助寄存器AR0~AR7,间接获得数据
存储器地址的方式。
① 单操作数寻址
LD *AR1, A
② 双操作数寻址
MAC *AR5+, *AR4+[AR6],A, B
3.2.5 间接寻址
间接寻址是指通过两个辅助算术逻辑单元ARAU0、
ARAU1及8个辅助寄存器AR0~AR7,间接获得数据
存储器地址的方式。
① 单操作数寻址
LD *AR1, A
② 双操作数寻址
MAC *AR5+, *AR4+[AR6],A, B
3.2.5 间接寻址
(1)单操作数间接寻址址
LD *AR1, A
单操作数寻址是一条指令中,只有一个存储器操作
数(即从存储器中只存取一个操作数),其指令的格式:
15
~
操作码
8
7
I=1
6 ~ 3
2~0
MOD
ARF
其中:15~8位是指令的操作码;第7位I=1,表示
指令的寻址方式为间接寻址;6~3位为方式(MOD),
定义了间接寻址的类型(表3-4);2~0位定义寻
址所使用的辅助寄存器(如AR0~AR7)。
39
3.2.5 间接寻址
① 单操作数寻址 地址存放情况及地址调整功能共16种:
操作句法
功
能
说
明
* ARx
地址=ARx
ARx的内容为数据存储器地址
ARx=ARx+1
ARx中的地址加1后,再寻址,
* +ARx 地址=ARx
只用于写
地址=ARx
* ARx寻址结束后,ARx地址减1
ARx=ARx-1
地址=ARx
* ARx+
寻址结束后,ARx地址加1
ARx=ARx+1
地址=ARx
寻址结束后,从ARx中减去
* ARx-0 ARx=ARx-AR0
AR0的值
地址=ARx
寻址结束后,把AR0加到ARx
* ARx+0 ARx=ARx+AR0
中
3.2.5 间接寻址
操作句法
功
能
地址=ARx
*ARx-0B ARx=B(ARx-AR0)
① 单操作数寻址
说
明
寻址结束后,用位倒序进
位的方法从ARx中减去AR0
的值
地址=ARx
寻址结束后,用位倒序进位
*ARx+0B
ARx=B(ARx+AR0) 的方法将 AR0加到ARx中
地址=ARx
寻址结束后,ARx中的地
*ARx-%
ARx=Circ(ARx-1) 址值按循环减的方法减1
地址=ARx
寻址结束后,ARx中的地
*ARx+%
ARx=Circ(ARx+1) 址值按循环加的方法加1
地址=ARx
寻址结束后,按循环减的方
*ARx-0%
ARx=Circ(ARx-AR0) 法从ARx中减去AR0中的值
3.2.5 间接寻址 ① 单操作数寻址
操作句法
功
能
$不用于MMR
说
明
寻址结束后,按循环加
地址=ARx
*ARx+0%
的方法将AR0中的值加
ARx=Circ(ARx+AR0)
到ARx
以ARx与16位数之和作
地址=ARx+lk
*ARx(lk)
为地址,寻址结束后,
ARx=ARx
ARx中的值不变 $
地址=ARx+lk
将一个16位带符号数加
*+ARx(lk)
ARx=ARx+lk
到ARx,然后寻址 $
将一个16位带符号数按
地址=Circ(ARx+lk)
*ARx(lk)%
循环加的方法加至ARx,
ARx=Circ(ARx+lk)
然后再寻址$
利用16位无符号数作为
* (lk)
地址=lk
地址,寻址数据存储器$
3.2.5 间接寻址
① 单操作数寻址:
单操作数寻址结构图如下所示.
操作数
操作
无lk, 写操作
地址范围64k
3.2 寻址方式
3.2.5 间接寻址
 位反向寻址
位反向寻址是专门为快速傅立叶变换FFT而设计的。
例 3-9 求01101110b+00100100b
3.2.5 间接寻址
 位反向寻址:4位二进制数的原始地址与位反向
地址的对应关系如下表所示:
正常顺序
原始地址
位反向地址
位反向顺序
0
1
2
3
4
5
6
7
0000
0001
0010
0011
0100
0101
0110
0111
0000
1000
0100
1100
0010
1010
0110
1110
0
8
4
12
2
10
6
14
3.2.5 间接寻址
 位反向寻址
正常顺序
原始地址
位反向地址
位反向顺序
8
9
10
11
12
13
14
15
1000
1001
1010
1011
1100
1101
1110
1111
0001
1001
0101
1101
0011
1011
0111
1111
1
9
5
13
3
11
7
15
3.2.5 间接寻址
例如: *AR1+%
2 N﹥20
 循环寻址
循环缓冲区长度20,因为2 5﹥20,所
循环寻址示意图如下: 以N=5,取基地址EFB的低5位为5个0,
设EFB=1000h。在初始化编程中将
20→BK
EFB
EOB
地址指针为AR1, 1000h→AR1
假设step = +1,当index变化到19(13h)
时,再做index = index + step时就会
使index等于BK里的值20,因此应该
进行index = index + step – BK的操作,
使得index=0,也就是使AR1=1000h,
又回到基地址EFB的位置,从而形成
了循环寻址。
3.2.5 间接寻址
循环寻址, 例 *ARx+0%
在循环寻址中,有下列几个关键的参量:
•
循环缓冲区的长度R:在编程中,用户应将R值赋给循环缓冲
区长度寄存器BK (circular-buffer size register) 。
•
循环缓冲区的基地址EFB (EFfective Base Address):该值必
须从N位地址的边界开始,其中,N是满足2N﹥R的最小整数,
即循环缓冲区的基地址EFB的低位必须有N个0,其余的高位由
用户指定。通常用ARx作地址指针,在初始化中将EFB赋给
ARx作初始指针。end of buffer address (EOB) 由BK内容决定。
• 调整步长step:step是每做一次运算循环缓冲区地址的变化情况,
也就是加至ARx或从ARx中减去的值。
•
相对位置index:index是被访问元素在循环缓冲区内的相对位
置,也就是循环缓冲区地址每变化一次后ARx的低N位。
3.2.5 间接寻址
 循环寻址
算法如下:
循环寻址的算法:
If 0  index+step< BK;
index=index+step;
Else if index+step  BK;
index=index+step-BK;
Else if index+step < 0;
index=index+step+BK。
3.2.5 间接寻址
② 双操作数间接寻址 ADD Xmem,Ymem, dst
用途:用在完成两个读或一个读且一个写的指令中。
说明:该指令只有一个字长,只能以间接寻址的方式工作。
格式如下:
15
~
操作码
例如 ADD *AR2+0%, *AR3–, A
8
7~6
Xmod
5~4
Xar
3~2
1~0
Ymod
Yar
其中,15~8位:指令操作码;7~6位为Xmod,定义了用于访问Xmem操作
数间接寻址方式的类型(见表3-5);5~4位为Xar,确定了包含Xmem地址的
辅助寄存器;3~2位为Ymod,定义了用于访问Ymem操作数的间接寻址方式的
类型;1~0位为Yar,确定了包含Ymem的辅助寄存器。
50
3.2.5 间接寻址
②双操作数寻址
双操作数寻址结构图如下所示:
3.2.5 间接寻址
②双操作数寻址
双操作数寻址有4种地址存放情况和地址调整功能 :
Xmod or
Ymod
操作码
语法
功
能
说
明
00
* ARx
地址=ARx
ARx中的内容是
数据存储器地址
01
* ARx-
地址=ARx
ARx=ARx-1
寻址后,ARx的
地址减1
10
* ARx+
地址=ARx
ARx=ARx+1
寻址后,ARx的
地址加1
11
*
ARx+0%
地址=ARx
寻址后,AR0以
ARx=circ(ARx+AR 循环寻址方式加
0)
到ARx中去
第3章 汇编语言指令系统
• 3.2.5 间接寻址–特别实例
例3-10 双操作数间接寻址指令举例
MAC[R] Xmem, Ymem, src [, dst ];
(Xmem) × (Ymem) + (src) → dst,(Xmem) → T
具体实现的指令如下:
MAC *AR5+, *AR4+,A, B;
((AR5)) ×((AR4))+(A)→B,
(AR5)+1→AR5,
((AR5))→T,
(AR4)+1→AR4 ;
第3章 汇编语言指令系统
• 3.2.5 间接寻址 –特别实例
TMS320C54x DSP Reference Set Volume 2 Mnemonic Instruction Set--spru172c.pdf
又是 存储器映像寄存器寻址
AR0, AR7的数据存储器的地址分别是0x0010, 0x0017
又是 存储器映像寄存器寻址
3.2 寻址方式
3.2.6 存储器映像寄存器寻址
存储器映像寄存器寻址是一种直接访问存
储器映像寄存器MMR的方式,可以用来修改
MMR的值。
有8条指令可以使用存储器映像寄存器寻址:
3.2 寻址方式
3.2.6 存储器映像寄存器寻址
LDM
MMR,dst
MVDM dmad,MMR
存储器
MVMD MMR,dmad
映像
MVMM MMRx,MMRy
POPM MMR
寄存器
PSHM MMR
寻址
STLM src,MMR
STM
#lk,MMR
MMRx: AR0–AR7, SP
MMRy: AR0–AR7, SP
3.2 寻址方式
3.2.7 堆栈寻址
堆栈寻址用于进行数据或者MMR的入栈和出栈
操作。
下列4条指令使用堆栈寻址:
堆
栈
寻
址
PSHD
PSHM
POPD
POPM
Smem
MMR
Smem
MMR
3.3 C54x系列DSP的指令系统
3.3 C54x系列DSP的指令系统
C54x的汇编语言指令集共有129条基本指令,
按完成的功能可以分为6类:
 数据存取指令 (共28条)
 算术运算指令 (共42条)
 逻辑运算指令(共17条)
 控制程序转移指令(共31+3条)
重复操作指令(共3条(包含于上面类)
 并行操作指令(共8条)
3.3 C54x系列DSP的指令系统
3.3.1 数据存取指令 (表3-7 共28条)
本节只介绍非并行的数据存取指令,包括 :
 1. 加载指令 (6条细分为21条)
 2. 存储指令 (10条细分为18条)
3.以上包括32位长操作数的加载、存储指令(2条)
 4. 混合加载和存储指令(12条)
1. 加载指令 (共6条)
以累加器A或B为目标操作数的LD指令
LD Smem, dst
TS:Shift value specified
by bits 5–0 of T (–16≤TS≤31)
LD Smem, TS, dst
LD Smem, 16, dst
LD Smem [, SHIFT ], dst
以累加器
LD Xmem, SHFT, dst
(1条) A或B为
LD #K, dst
目标操作数
LD #lk [, SHFT ], dst
的LD指令
LD #lk, 16, dst
LD src, ASM [, dst ]
LD src [, SHIFT ], dst
3.3 C54x系列DSP的指令系统
1. 加载指令 (共6条)
 以暂存器T或ST0、ST1的DP、ASM及ARP字段
为目标操作数的LD指令
以暂存器
T或ST0、
(1条续)ST1的DP、
ASM及ARP
字段为目标
操作数的
LD指令
LD
LD
LD
LD
LD
LD
Smem, T
Smem, DP
#k9, DP
#k5, ASM
#k3, ARP
Smem, ASM
1. 加载指令 (共6条)
DLD
Lmem,dst
32位长操作数的加载指令
dst
=
Lmem,将Lmem所指定的单数据存储
功能:
器中的32位数据送入累加器A或B中。
MMR,dst
功能: dst = MMR 将MMR寄存器中的数据,送
入累加器dst。
LDM
LDR
Smem,dst
功能:
dst(31-16)=(Smem)<<16,
dst(15)=1,dst(14-0)=0;
(Smem) << 16 +1 << 15 → dst(31–16)
Load Memory Value in Accumulator High With Rounding
3.3 C54x系列DSP的指令系统
1. 加载指令 (共6条)
LDU
Smem,dst
功能:dst = uns(Smem) 将Smem所指定的单数
据存储器的无符号数据,送入累加器。
LTD
Smem
功能:T=Smem,(Smem+1)= Smem 将单数据存
储器Smem的数据,送入寄存器T,并memory delay。
第3章 汇编语言指令系统
1. 加载指令 (共6条)
 例3.11
LD *AR3, A
1)当SXM=0时,进行无符号数的加载
指令执行前
指令执行后
A
00 0000 0000
SXM
0
AR3
0200
数据存储器
0200H
95A6
A 00 0000 95A6
SXM
0
AR3
0200
数据存储器
0200H
95A6
3.3 C54x系列DSP的指令系统
1. 加载指令 (共6条)
 例3.11
LD *AR3, A
2)当SXM=1时,进行有符号数的加载
指令执行前
指令执行后
A
00 0000 0000
SXM
1
AR3
0200
数据存储器
0200H
95A6
A FF FFFF 95A6
SXM
1
AR3
0200
数据存储器
0200H
95A6
3.3 C54x系列DSP的指令系统
1. 加载指令 (共6条)
 例3.12
LD A, 4, B
1)当OVM=0时,对溢出不进行处理,仅通过
OVB=1反映溢出
指令执行前
A
00 7FFF 8000
B
00 0000 FFFF
OVB
0
OVM
0
指令执行后
A
B
OVB
OVM
00 7FFF 8000
07 FFF8 0000
1
0
第3章 汇编语言指令系统
1. 加载指令 (共6条)
例3.12
LD A, 4, B
2)当OVM=1时,对溢出进行处理
指令执行前
A
00 7FFF 8000
B
00 0000 FFFF
OVB
0
OVM
1
指令执行后
A
B
OVB
OVM
00 7FFF 8000
00 7FFF FFFF
1
1
第3章 汇编语言指令系统
ST1
1. 加载指令
 例3.13
CPL=0
0180H 0001 0010 0011 0100
指令执行前
ASM
DP
数据存储器
0180H
直接寻址
CPL=0
LD @0,ASM
00
003
指令执行后
ASM
14
DP
003
数据存储器
1234
0180H
1234
@0
DP
16位数据
0000 0001 1000 0000
存储器地址
0
1
8
0 h
3.3 C54x系列DSP的指令系统
2. 存储指令 (共10条) (表3-7 )
 1: ST T, Smem
 2: ST TRN, Smem
 3: ST #lk, Smem; #有时可省略
3.3 C54x系列DSP的指令系统
2. 存储指令 (共10条)
 为MMR赋值的指令
STLM src, MMR;
为MMR
赋值的指令
MMR = src(15-0),将累加器的低16
位送入MMR,是1字1周期指令。
STM #lk, MMR;
MMR = #lk, 将长立即数送入MMR,
是2字2周期指令。
3.3 C54x系列DSP的指令系统
2. 存储指令 (共10条)
 例 3.14
STLM A, *AR2
指令执行前
A
00 1234 5678
AR2
AR5(15h)
7315
3F69
指令执行后
A
AR2
AR5
00 1234 5678
0015
5678
STLM和STM 可访问位于数据存储器 0页上的MMR
和暂存寄存器0060h~007Fh。对其进行直接寻址或
间接寻址时,不管当前DP或 ARx的值如何,在指令
执行后,DP值或ARx的高9位都被强制清0.
第3章 汇编语言指令系统
2. 存储指令 (共10条)
 STM #lk, MMR; #有时可省略
3.3 C54x系列DSP的指令系统
2. 存储指令
 例 3.15
STM #1357H, *AR4+
指令执行前
指令执行后
AR0
0000
AR0
1357
AR4
8010
AR4
0011
 例 3.16
STM #2468H, 60H
指令执行前
0060H
0000
指令执行后
0060H
2468
3.3 C54x系列DSP的指令系统
2. 存储指令 (共10条)
 STH和STL指令
STH和
STL指令
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
3.3 C54x系列DSP的指令系统
2. 存储指令 (共10条)
 例 3.17
STL
设累加器(A)=FF 9876 5432H
A,8,da
STL A,-8,da
STH A,8,da
(da)=3200H
STH
STH
A,-8,da
A,-16,da
(da)=7654H
(da)=7654H
(da)=FF98H
(da)=00FFH (SXM=0)
STH
A,-16,da
(da)=FFFFH (SXM=1)
If SXM = 0, bit 39 of src is copied in the MSBs of the data-memory location.
If SXM = 1, the sign-extended value with bit 39 of src is stored in the MSBs of the
data-memory location after being right-shifted by the exceeding guard bit margin.
2. 存储指令 (共10条)条件存储指令:
CMPS src, Smem;比较选择累加器(src)的高、低字
节值,把最大值放到存储器(Smem)中;
SACCD src, Xmem, cond;
if(cond), Xmem= src<<(ASM-16) ,
cond:AEQ ANEQ AGT AGEQ ALT ALEQ
SRCCD Xmem, cond; if(cond) Xmem= BRC
STRCD Xmem, cond; if(cond) Xmem= T
例:
SACCD A, *AR3+, ALT
A=FF FE00 C321
A=FF FE00 C321
ASM=01
ASM=01
AR3=0202
AR3=0202
*(0202)=0101
*(0202)=FC01
3.3 C54x系列DSP的指令系统
3. 32位长操作数的加载、存储指令及数据存放格式
DLD Lmem, dst
在单周期内同时利用CAB、CB和AB、
32位
DB总线将32位Lmem读入累加器。
长操作数
是1字1周期指令。
的加载、
存储指令 DST src, Lmem
及数据
两次使用EAB、EB总线将累加器的
存放格式
内容分别写入高16位和低16 位数据
存储器。是1字2周期指令。
第3章 汇编语言指令系统
3. 32位长操作数的加载、存储指令及数据存放格式
•长操作数指令中给出的地址总是指向数据高有效字
•C54x的32位长操作数有两种数据存放格式:
偶地址存放和奇地址存放
偶地址存放是指数据的高有效字存放在偶地址且是
较低的地址,低有效字存放在奇地址且是较高的地址
奇地址存放是指数据的高有效字存放在奇地址且是
较高的地址,低有效字存放在偶地址且是较低的地址
•一般推荐使用偶地址存放格式
3.3 C54x系列DSP的指令系统
3. 32位长操作数的加载、存储指令及数据存放格式
 例3-18 存放格式对数据存储的影响
DST B, *AR3+
1)偶地址存放
指令执行前
B
00 6CAC
AR3
数据存储器
0100H
0101H
BD90
0100
0000
0000
指令执行后
B 00 6CAC BD90
AR3
0102
数据存储器
0100H
6CAC
0101H
BD90
3.3 C54x系列DSP的指令系统
3. 32位长操作数的加载、存储指令及数据存放格式
2)奇地址存放
DST B, *AR3+
指令执行前
B
00 6CAC
AR3
数据存储器
0100H
0101H
BD90
0101
0000
0000
指令执行后
B 00 6CAC
AR3
数据存储器
0100H
0101H
BD90
0103
BD90
6CAC
3.3 C54x系列DSP的指令系统
3. 32位长操作数的加载、存储指令及数据存放格式
 例3-19 存放格式对数据存储的影响
DLD *AR3+, B
1)偶地址存放
指令执行前
B
00 0000 0000
AR3
0100
数据存储器
0100H
6CAC
0101H
BD90
指令执行后
B 00 6CAC BD90
AR3
0102
数据存储器
0100H
6CAC
0101H
BD90
3.3 C54x系列DSP的指令系统
3. 32位长操作数的加载、存储指令及数据存放格式
2)奇地址存放
DLD *AR3+, B
指令执行前
B
00 0000 0000
AR3
0101
数据存储器
0100H
6CAC
0101H
BD90
指令执行后
B
00 BD90 6CAC
AR3
0103
数据存储器
0100H
6CAC
0101H
BD90
4. 混合加载和存储指令(共12条)
绝对寻址方式
数据存储器
(dmad)寻址
程序存储器
(pmad)寻址
I/O端口(PA)寻址
相关指令
MVDD Xmem, Ymem
MVMM MMRx, MMRy
MVDK Smem, dmad
MVDM dmad, MMR
MVKD dmad, Smem
MVMD MMR, dmad
MVDP Smem, pmad
MVPD pmad, Smem
PORTR PA, Smem
PORTW Smem, PA
3.3 C54x系列DSP的指令系统
4. 混合加载和存储指令
累加器寻址指令
解释
A中内容为程序存储器地址,将
READA Smem 该地址中的数据送入Smem指定
的数据存储器中
将Smem指定的数据存储器中的内
WRITA Smem
容送入A所指出的程序存储器中
A→PAR , (Pmem addressed by PAR) (Smem),
If (RC)≠0, (RC)–1→RC , (PAR)+1→PAR
3.3 C54x系列DSP的指令系统
3.3.2 算术运算指令(共42条)
C54x的算术运算指令包括:
基本算术运算指令 (共12条)
特殊运算指令 (共15条)
双字(32位)算术运算指令 (共6条)
乘累加和乘累减指令 (共9条)
1. 基本算术运算指令(共12条)
字
数
1
src=src+Smem
ADD Smem , src
1
src=src+Smem<<TS
ADD Smem , TS,src
1
ADD Smem ,16 ,src[,dst]
dst=src+Smem<<16
ADD Smem,[,SHIFT],src[,dst] dst=src+Smem<< SHIFT 2
ADD Xmem ,SHFT ,src
src=src+Xmem<< SHFT 1
ADD Xmem ,Ymem ,dst
dst=Xmem<<16+Ymem<<16 1
ADD #lk,[,SHFT],src[,dst] dst=src+#lk<< SHFT 2
2
ADD #lk,16,src[,dst]
dst=src+#lk<< 16
dst=dst+src<< SHIFT 1
ADD src,[,SHIFT][,dst]
1
dst=dst+src<< ASM
ADD src,ASM[,dst]
1
src=src+Smem+C
ADDC Smem , src
2
ADDM #lk, Smem
Smem=Smem+#lk
1
src=src+uns(Smem)
ADDS Smem , src
加法指令
操作
周期
数
1
1
1
2
1
1
2
2
2
1
1
2
1
1. 基本算术运算指令(共12条)(续)
字
减法指令
操作
数
1
src=src-Smem
SUB Smem , src
1
src=src-Smem<<TS
SUB Smem , TS,src
1
SUB Smem ,16 ,src[,dst]
dst=src-Smem<<16
2
SUB Smem,[,SHIFT],src[,dst] dst=src-Smem<< SHIFT
SUB Xmem ,SHFT ,src
src=src-Xmem<< SHFT 1
SUB Xmem ,Ymem ,dst
dst=Xmem<<16-Ymem<<16 1
2
SUB #lk,[,SHFT],src[,dst]
dst=src-#lk<< SHFT
2
SUB #lk,16,src[,dst]
dst=src-#lk<< 16
dst=dst-src<< SHIFT 1
SUB src,[,SHIFT][,dst]
1
dst=dst-src<< ASM
SUB src,ASM[,dst]
1
src=src-Smem-C
SUBB Smem , src
If(src-Smem<<15)≥0,
SUBC Smem,src (用于除法) src=(src-Smem<<15)<<1+1 1
Else src=src<<1
1
src=src-uns(Smem)
SUBS Smem , src
周期
数
1
1
1
2
1
1
2
2
1
1
1
1
1
1. 基本算术运算指令(共12条)(续)
乘法指令
操作
MPY Smem , dst
MPYR Smem , dst
dst=T*Smem
dst=rnd(T*Smem)
dst= Xmem *Ymem,T=Xmem
MPY Xmem ,Ymem ,dst
MPY
MPY
MPYA
MPYA
MPYU
SQUR
SQUR
Smem ,#lk ,dst dst= Smem *#lk ,T=Smem
#lk ,dst
dst= T*#lk
dst=T*A(32-16)
dst
B= Smem*A(32-16),T=Smem
Smem
dst=uns(T )*uns(Smem)
Smem , dst
dst= Smem *Smem ,T=Smem
Smem , dst
A , dst
dst=A(32-16)*A(32-16)
字 周期
数 数
1 1
1 1
1
1
2
2
2
1
2
1
1
1
1
1
1
1
1
1
1. 基本算术运算指令
例3-20 设被除数1000在数据空间0060h单元中,除
数5在0061h中。用条件减法指令SUBC完成16位/16位
无符号数除法1000÷5,并将结果存放在0062h单元。
实现的程序段如下:
RSBX SXM ;无符号数除法,不进行符号扩展
STM #0060h, AR1 ;地址指针指向被除数
LD *AR1+, A
;被除数1000(3E8h)→A
RPT #15
;下条指令重复执行16次
SUBC *AR1 , A ;进行条件减法
MAR *AR1+ ; AR1+1指向商单元,因不能在前行调整AR1
STL A, *AR1
;将商装入0062h单元
If (src-Smem<<15)≥0, src=(src-Smem<<15)<<1+1
Else src=src<<1
3.3 C54x系列DSP的指令系统
2. 特殊运算指令(共15条)
特殊运算指令
操作
ABDST Xmem , Ymem
B = B + |A(32-16)|,
A = (Xmem-Ymem)<<16
ABS
src [,dst ]
CMPL
src [,dst ]
DELAY Smem
EXP
src
FIRS Xmem ,Ymem ,Pmad
LMS
Xmem ,Ymem
字数 周期数
1
1
dst = |src |
dst = src
1
1
1
1
(Smem)→Smem +1
1
1
1
1
2
3
1
1
T = 冗余符号位数(src)-8
B = B +A(32–6)*(Pmad),
A = (Xmem +Ymem)<<16
B = B + Xmem *Ymem,
A = (A +Xmem<<16)+215
第3章 汇编语言指令系统
2. 特殊运算指令(共15条)(续)
特殊运算指令
功
能
dst = max(A,B)
dst = min(A,B)
dst = -src
dst = src<<TS,
src [,dst ]
dst = norm (src ,TS)
B = Smem<<16,(Smem系数,T未知数)
Smem
A = rnd(A (32–16)*T + B )
src [,dst ] dst = src +215
Saturate(src)
src
字数 周期数
dst
MIN
dst
NEG src [,dst ]
1
1
1
1
1
1
NORM
1
1
1
1
1
1
1
1
1
1
MAX
POLY
RND
SAT
SQDST Xmem ,Ymem
B = B + A(32-16)*A(32-16)
A = (Xmem-Ymem)<<16
3. 双字(32位)算术运算指令(共6条)
操作
双字指令
C16 = 0
C16 = 1
dst =
dst(39~16) =
DADD Lmem,
Lmem + src Lmem(31~16)+src(31~16)
src [ , dst ]
dst(15~0) =
Lmem(15~0) + src(15~0)
dst(39~16) =
DADST Lmem, dst=Lmem+
Lmem(31~16) + T
dst
(T << 16 +T) dst(15~0) =
Lmem(15~0) – T
src =
src(39~16) =
DRSUB Lmem, Lmem – src Lmem(31~16) –src(31~16)
src
src(15~0) =
Lmem(15~0) –src(15~0)
字
数
周
期
数
1 1
1 1
1 1
第3章 汇编语言指令系统
3. 双字(32位)算术运算指令(共6条)(续)
操作
双字指令
C16 = 0
C16 = 1
dst(39~16) =
dst =
Lmem(31~16) –T
DSADT Lmem, Lmem –
dst(15~0)=
dst
(T << 16 + T)
Lmem(15~0) + T
src (39~16) = src(31~16)
DSUB Lmem, src =
– mem(31~16)
src
src –
src (15~0) = src(15~0) –
Lmem
mem(15~0)
dst(39~16) =
DSUBT Lmem, dst =
Lmem(31~16) – T
dst
Lmem –
dst(15~0) =
(T << 16 + T)
Lmem(15~0) – T
字
数
周
期
数
1 1
1 1
1 1
4. 乘累加和乘累减指令(共9条)
指令
MAC Smem, src
MACR Smem, src
MAC #lk, src [ , dst ]
操作
src = src + T * Smem
src = rnd(src + T * Smem)
dst = src + T * #lk
MAC Smem, #lk, src [, dst] dst = src + Smem * #lk,
T = Smem
MAC Xmem, Ymem, src [ , dst = src + Xmem * Ymem,
dst ]
T = Xmem
MACR Xmem, Ymem, src dst = rnd(src + Xmem *
[ , dst ]
Ymem), T = Xmem
MACA Smem [ , B ]
B = B + Smem * A(32~16),
T = Smem
MACAR Smem [ , B ]
B=B+rnd( Smem*A(32~16)),
T = Smem
字
数
周期
数
1
1
2
1
1
2
2
2
1
1
1
1
1
1
1
1
4. 乘累加和乘累减指令(共9条)(续)
指令
MACA T,src [ , dst ]
操作
dst = src + T * A(32~16)
字 周期
数 数
1
1
MACAR T, src [ , dst ] dst = rnd(src + T * A(32~16))
1
1
src = src + Smem * pmad,
MACD Smem, pmad, T = Smem, (RC)≠0, (PAR)+1→PAR
src
(Smem + 1) = Smem
2
3
2
3
MACSU Xmem,
Ymem, src
src=src+ uns(Xmem)*Ymem, 1
T = Xmem
1
MAS Smem, src
src = src – T * Smem
1
1
MASR Smem, src
src = rnd(src – T * Smem)
1
1
MACP Smem, pmad, src = src + Smem * pmad,
src
T = Smem, (RC)≠0, (PAR)+1→PAR
4. 乘累加和乘累减指令(共9条)(续)
指令
MAS Xmem, Ymem,
src [ , dst ]
操作
dst = src – Xmem * Ymem,
T = Xmem
字 周期
数 数
1
1
1
1
1
1
1
1
MASAR T, src [ , dst ] dst = rnd(src – T * A(32~16))
1
1
SQURA Smem, src
1
1
1
1
MASR Xmem, Ymem, dst = rnd(src – Xmem *
src [ , dst ]
Ymem), T = Xmem
MASA Smem [ , B ]
B = B – Smem * A(32~16),
T = Smem
MASA T, src [ , dst ]
SQURS Smem, src
dst = src – T * A(32~16)
src = src + Smem * Smem,
T = Smem
src = src – Smem * Smem,
T = Smem
3.3 C54x系列DSP的指令系统
4. 乘累加和乘累减指令(共9条)(续)
对常用的乘累加指令的分析:
MAC[R]
MACA[R]
MACP和MACD
MACSU Xmem, Ymem, src
指令MACD Smem, pmad, src 的操作框图
如下图所示 :
4.
9
乘
累
加
和
乘
累
减
指
令
(
共
( )
条
)
续
MACD Smem, pmad, src
的操作框图
例3-21 乘累加指令举例。
(1)当FRCT=0时, 执行指令MACD *AR1,TABLE, A的
情况 指令执行前
指令执行后
A
00 0007 2E84
A
00 0000 1234
T
T
1234
0000
FRCT
FRCT
0
0
AR1
AR1
0100
0100
程序存储器
TABLE
数据存储器
0064
程序存储器
TABLE
0064
数据存储器
1234
1234
0100h
0100h
0000
0101h
1234
0101h
1234h×64h=71C50h
0111 0001 1100 0101 0000b
(2)当FRCT=1时,执行指令后,A= 00 000E 4AD4,
FRCT=1, 其他相同。1110 0011 1000 1010 0000b
E
3
8
A 0h
第3章 汇编语言指令系统
3.3 C54x系列DSP的指令系统
3.3.3 逻辑运算指令(共17条)
逻辑运算指令包括:
布尔型指令(共6条)
移位指令 (共6条)
测试指令 (共5条)
1. 布尔型指令(共6条)
与指令
AND
Smem , src
操作
src = src&Smem
AND #lk[,SHFT],src[,dst] dst = src&#lk<<SHFT
字 周期
数 数
1 1
2 2
AND #lk,16,src[,dst]
dst = src&#lk<<16
AND src[,SHIFT][,dst]
dst=dst &src<<SHIFT 1 1
ANDM
#lk, Smem
Smem = Smem&#lk
2 2
2 2
1. 布尔型指令(共6条)(续)
或指令
OR
Smem , src
操作
src = src | Smem
OR #lk[,SHFT],src[,dst] dst=src | #lk<<SHFT
OR #lk,16,src[,dst]
dst = src | #lk<<16
OR src[,SHIFT][,dst]
dst=dst |src<<SHIFT
ORM
#lk, Smem
Smem = Smem | #lk
字数
周期
数
1
1
2
2
2
2
1
1
2
2
1. 布尔型指令(共6条)(续)
异或指令
XOR
Smem , src
操作
src = src  Smem
XOR #lk[,SHFT],src[,dst] dst = src  #lk<<SHFT
XOR #lk,16,src[,dst]
dst = src  #lk<<16
XOR src[,SHIFT][,dst]
dst=dst  src<<SHIFT
XORM
#lk, Smem
Smem = Smem  #lk
字 周期
数 数
1 1
2 2
2 2
1 1
2 2
2. 移位指令(共6条)
移位指令共6条,都是单字单周期指令。
指令
操作
ROL src
带进位位C的循环左移
ROLTC src
带测试位TC的循环左移
ROR src
带进位位C的循环右移
SFTA src, SHIFT [, dst] dst = src << SHIFT {算术移位}
SFTC src
If (src)=0, 1→TC, else 若
{条 件移位}
src(31)= src(30)则 src = src<<1 ,
0→TC, 否则 1→TC
SFTL src, SHIFT [, dst] dst = src << SHIFT {逻辑移位}
3.3 C54x系列DSP的指令系统
2. 移位指令
带进位位C的循环左移ROL移位示意图如下:
39 ~ 32 31
0
累加器
src
保护位
C
0
带进位位C的循环右移ROR移位示意图如下:
39 ~ 32 31
0
累加器
src
保护位
0
C
第3章 汇编语言指令系统
2. 移位指令
带测试位TC的循环左移ROLTC移位示意图如下:
39 ~ 32 31
0
累加器
src
保护位
C
0
39 ~ 32
比较ROL移位
累加器
src
保护位
0
TC
0
C
 逻辑移位指令SFTL src, SHIFT的操作示意图:
39 ~ 32 31
累加器
src
0
保护位
0
39~32
累加器
src
0
C
0﹤SHIFT≤15时
31
0
保护位
0
C
0
-16≤ SHIFT<0时
C
SHIFT=0时
0
 算术移位指令SFTA src,SHIFT的操作示意图 :
39
0
累加器
src
0
C
0﹤SHIFT≤15时
 算术移位指令SFTA src,SHIFT的操作示意图 :
39
0
累加器
src
C
0
累加器 39
Src
-16≤ SHIFT<0,且SXM=0
0
C
-16≤ SHIFT<0,且SXM=1
例3-22 移位指令举例。
(1)当SXM=1时,执行算术移位指令,结果进行符号
扩展。SFTA A, -5, B
指令执行后
指令执行前
A
A
FF 8765 0055
FF 8765 0055
T
B
FF FC3B 2802
00 4321 1234
C
C
x
1
SXM
1
SXM
1
(2)当SXM=0时,执行算术移位指令,结果不进行符
号扩展。SFTA A, -5, B
指令执行前
指令执行后
A
A
FF 8765 0055
FF 8765 0055
B
T
00 4321 1234
07 FC3B 2802
C
C
x
1
SXM
SXM
0
0
例3-22 移位指令举例。
(3)执行逻辑移位指令的情况。
SFTL A, -5, B
A
B
C
指令执行前
FF 8765 0055
FF 8000 0000
0
A
T
C
指令执行后
FF 8765 0055
00 043B 2802
1
3. 测试指令 (共5条)
测试指令通常和条件转移等指令结合,实现程序转
移,或用于检测数据的正、负极性,数据的位状态等。
测试指令
操作
字
数
1
周期
数
1
BIT Xmem, BITC
TC = Xmem(15 – BITC) 测试
Xmem中指定的某位
BITF Smem, #lk
TC= (Smem && #lk) , 非0则1,
测试Smem中指定的某些位
TC = Smem(15 – T(3~0)) 测试
由T指定的位
2
2
1
1
CMPM Smem, #lk TC = (Smem == #lk) ,等则1, 比
较Smem与长立即数是否相等
CMPR CC, ARx
ARx与AR0进行比较
2
2
1
1
BITT Smem
3.3 C54x系列DSP的指令系统
3. 测试指令举例
例3-23 检测数据单元0060h中的数据低8位是否为全0。
STM #0060h, AR4
BITF *AR4, 00FFh;执行后若TC=0,说明该
数据的低8位全为0
BITF Smem, #lk ;
测试Smem中指定的某些位
If ((Smem) AND #lk) = 0 Then TC=0, Else TC=1.
3.3 C54x系列DSP的指令系统
3.3.4 控制程序转移指令(共34条)
控制程序转移类指令的功能是改变程序执行的
顺序,可划分为6类:
 跳转指令 (共6条)
 调用和返回指令(共11条)
 中断指令 (共2条)
 堆栈操作指令(共5条)
 重复指令(共3条)
 其它程序控制指令(共7条)
第3章 汇编语言指令系统
1. 跳转指令 (共6条)无条件转移和条件转移
跳转指
指令
令分类
近程无 B[D] pmad
条件转移 BACC[D] src
FB[D] extpmad
远程无
条件转移 FBACC[D] src
近程条
件转移
操作
PC = pmad(15~0)
字 周期
数 数
2 4/[2]
PC = src(15~0)
PC = pmad(15~0),
XPC = pmad(22~16)
1
2
6/[4]
4/[2]
PC = src(15~0),
XPC = src(22~16)
1
6/[4]
BC[D] pmad, cond [ , 若条件(cond(s))满足,
cond [ , cond ] ]
则PC = pmad(15~0)
2
5/3/
/[3]
BANZ[D] pmad, Sind 若(Sind≠0) 则
PC = pmad(15~0)
2
4/2/
/[2]
条件转移指令的条件如表所示:
条件
指令中
的表示
说明
条件
指令中
的表示
说明
BIO*低 BIO
BIO引脚电平为低
BIO*高 NBIO
BIO引脚电平为高
C=1
C
状态位C置位
C=0
NC
状态位C清0
TC = 1
TC
测试位TC置位
TC = 0
NTC
测试位TC清0
(A) = 0
AEQ
累加器A等于0
(B)=0
BEQ
累加器B等于0
(A)≠0
ANEQ 累加器A不等于0
(B)≠0
BNEQ
累加器B不等于0
(A)﹥0
AGT
(B)﹥0
BGT
累加器B大于0
(A)≥0
AGEQ 累加器A大于等于0
(B)≥0
BGEQ
累加器B大于等于0
(A)﹤0
ALT
累加器A小于0
(B)﹤0
BLT
累加器B小于0
(A)≤0
ALEQ
累加器A小于等于0
(B)≤0
BLEQ
累加器B小于等于0
OVA=1
AOV
累加器A溢出
OVB=1
BOV
累加器B溢出
OVA=0
ANOV 累加器A无溢出
OCB=0
BNOV
累加器B无溢出
累加器A大于0
1. 跳转指令
条件组合的规律如下:(两组之间是或的关系)
第1组
A类
EQ
NEQ
LT
LEQ
GT
GEQ
B类
OV
NOV
A类
TC
NTC
第2组
B类
C
NC
C类
BIO
NBIO
第1组最多可选2个条件,且必须针对同一个累加器。
第2组最多可选3个条件。每组每类中只能选择一个条件。
在一条指令中,2~3个条件是与的关系;或关系用多条指令实现。
跳转指令举例
例3-24 检测数据单元0060h中的数据若为负数,
则转移至LP1位置。
实现的程序段如下:
STM #0060h,AR2; 赋地址指针0060h→AR2
STM #0,T
; 0→T,令T(3~0)=0
BITT *AR2
; 检测0060h的D15位
BC
; 当0060h的D15位为1
时转移至LP1
LP1,TC
BITT Smem; TC = Smem(15 – T(3~0))
测试由T指定的位
跳转指令举例
例3-25 编程,将数据单元0060h~006Fh清0
实现的程序段如下:
STM #0060h,AR1 ;赋地址指针060h→AR1
STM #15,AR2
;赋循环次数15→AR2
LD
#0,A
;A清0
A,*AR1+
;(A)→AR1所指出的数据
单元,(AR1)+1→AR1
LOOP1: STL
BANZ LOOP1,*AR2- ;AR2的内容非0则循环至
LOOP1, AR2的内容减1
跳转指令说明
 无延迟转移和有延迟转移
BD 1000h
ANDM 4444h, *AR1+;执行此双字双周期指令后
PC = 1000h
BACC[D] src; PC = src(15~0)
 近程转移和远程转移
FB[D] extpmad;(extpmad(15–0)) → PC
(extpmad(22–16)) → XPC
FBACC[D] src ; PC = src(15~0),
XPC = src(22~16)
2. 调用和返回指令 (共11条)
调用指令
分类
指令
– –SP, PC + 1[3] → TOS, PC =
src(15~0)
CALL[D] pmad – –SP, PC + 2[4] → TOS,
PC=pmad(15~0)
FCALA[D] src
– –SP, PC + 1[3] → TOS, – –SP,
XPC → TOS , PC = src(15~0),
XPC = src(22~16)
FCALL[D]
– –SP, PC + 2[4] → TOS, – –SP,
extpmad
XPC → TOS , PC=pmad(15~0),
XPC = pmad(22~16)
CC[D] pmad, cond 若(cond(s))满足,
[ , cond [ , cond ]] 则– –SP, PC + 2[4] → TOS,
PC = pmad(15~0)
CALA[D] src
近程无
条件调
用
远程无
条件调
用
近程条
件调用
操作
字 周期
数 数
1 6/4
2 4/2
1 6/4
2 4/2
2 5/3/
/[3]
2. 调用和返回指令 (共11条)续
返回指令
分类
指令
RET[D] 子程序返回
近程
RETE[D] 中断返回
无条件
返回
RETF[D] 快速中断返
回
远程 FRET[D] 子程序返回
无条件
返回 FRETE[D] 中断返回
近程条
件返回
RC[D] cond [ , cond [ ,
cond ] ]
操作
字 周期
数 数
PC = TOS, ++SP
1 5/[3]
PC = TOS, ++SP,
INTM = 0
PC = RTN, ++SP,
INTM = 0
1 5/[3]
XPC = TOS, ++ SP,
PC = TOS,++SP
XPC = TOS, ++ SP,
PC = TOS, ++SP,
INTM = 0
1 6/[4]
若(cond(s))满足,
则PC = TOS, ++SP
1 5/3/
/[3]
1 3/[1]
1 6/[4]
3.3 C54x系列DSP的指令系统
3. 中断指令 (共2条)
指令
操作
(SP)-1→SP, (PC) +1→TOS,
INTR K PC = IPTR(15~7) + K << 2,
INTM = 1,清零IFR相应位
TRAP K (SP)-1→SP, (PC) +1→TOS,
PC = IPTR(15~7) + K << 2
字数 周期数
1
3
1
3
3.3 C54x系列DSP的指令系统
4. 堆栈操作指令(共5条)
堆栈操作指令有5条,都是单子单周期指令。
指令
操作
FRAME K
SP = SP + K
POPD Smem
Smem = (TOS), ++SP
POPM MMR
MMR = (TOS), ++SP
PSHD Smem
– –SP, (Smem) → TOS
PSHM MMR
– –SP, (MMR) → TOS
5. 其它程序控制指令(共7条)
指令
IDLE K
MAR Smem
NOP
RESET
RSBX N, SBIT
SSBX N, SBIT
XC n , cond [ ,
cond [ , cond ] ]
操作
字 周期
数 数
1 4
省电模式,K=1或2或3
若CMPT = 0,则更新ARx,ARP不变
若CMPT=1且ARx≠AR0, 则更新ARx,
ARP = x;若CMPT = 1 且ARx = AR0, 1 1
则更新AR(ARP), ARP不变
1 3
空操作
软件复位
STN (SBIT) = 0,N指出ST0或
ST1, SBIT指出某位,位清0
STN (SBIT) = 1,N指出ST0或
ST1, SBIT指出某位,位置1
若(cond(s))满足,则执行下
面的n条指令; n = 1或2
1
1
1
1
1
1
1
1
3.3 C54x系列DSP的指令系统
3.3.5 重复操作指令 (共3条)
C54x的重复操作指令共3条 ,包括:
 单条指令重复 (共2条)
 程序块重复 (共1条)
第3章 汇编语言指令系统
1. 单条指令重复 (共2条)
指令
单条指
令重复 RPT Smem
执行指
RPT #K
令
RPT #lk
RPTZ dst, #lk
操作
RC = Smem
字
数
1
周期
数
3
RC = #K (8-bit)
1
1
RC = #lk(16-bit)
2
2
RC = #lk, dst = 0
2
2
比较:程序块重复指令只有1条,其格式如下:
RPTB[D] pmad;0 ≤pmad≤65 535
1. 单条指令重复
可以通过重复机制由多周期变为单周期的指令如下:
指令
FIRS
MACD
MACP
说明
对称FIR滤波
带延迟的乘法并将结果送累加器
乘并将结果送累加器
周期
3
3
3
MVDK
MVDM
MVDP
数据空间到数据空间的数据传送
数据空间到MMR的数据传送
MVKD
MVMD
MVPD
READA
数据空间到数据空间的数据传送
MMR到数据空间的数据传送
程序空间到数据空间的数据传送
从程序空间到数据空间的数据读
2
2
3
5
WRITA
从数据空间到程序空间的写
5
数据空间到程序空间的数据传送
2
2
4
第3章 汇编语言指令系统
1. 单条指令重复
例3-27 计算Y=10X1+10X2+……10X100
1) 采用RPT指令,要用106个周期。
STM
LD
RPT
MAC
#X1,AR2
#0,A
#99
*AR2+,#10,A
STL
A,@Y
;2周期
;1周期
;1周期
;(A) +((AR2))×10→A,
((AR2))→T,(AR2)+1→AR2,
(1+100)周期
;1周期
第3章 汇编语言指令系统
1. 单条指令重复
2) 采用BANZ指令,要用604(600-2+6)个周期。
STM #99,AR1
;2周期
STM
#X1,AR2
;2周期
LD #0,A
;1周期
LP: MAC *AR2+,#10,A ;2×100周期
BANZ LP,*AR1- ;4×100周期
;2个机器周期(条件假)
STL A,@Y
;1周期
2. 程序块重复
程序块重复指令只有1条,其格式如下:
RPTB[D] pmad;0 ≤pmad≤65 535
STM #215, BRC
块重复计数器BRC
用存储
RPTB #TABLE ;卷积算法
器映像 块重复起始地址RSA
STM #16,BK
RPTZ A,#15
寄存器: 块结束地址REA
MAC *AR4+0%,*AR5+0%,A
block-Repeat Start (End)
STH A,*AR2+
Address register (RSA, REA) TABLE: MVDD *AR3+,*AR4+0%
执行操作:
① 1→BRAF(重复块操作标志位在ST1中);
② 若延迟则(PC)+4→RSA;否则 (PC)+ 2→RSA ;
③ pmad → REA;
④ 每执行一遍程序块BRC 减1直至为0,重复结束, BRAF
清零。程序重复执行(BRC)+1次
第3章 汇编语言指令系统
3.3.6 并行操作指令(共8条) (13小条)
并行操作指令可分为四类:
 并行存储和装载指令(1条) (2小条)
 并行装载和乘法指令(2条) (4小条)
 并行存储和加/减指令(2条)(2小条)
 并行存储和乘法指令(3条) (5小条)
并行操作指令特点:
1.
2.
3.
4.
(AR2)= B << (ASM – 16)
|| A = (AR4) << 16
单字单周期;
都工作在累加器高位(LD);
ST B, *AR2某些并行指令(ST)与ASM有关;|| LD *AR4+, A
只能采用Xmem或Ymem寻址。
第3章 汇编语言指令系统
1. 并行存储和装载指令(1条) (2小条)
指令
操作
字 周期
数 数
ST src, Ymem
1
Ymem = src << (ASM – 16)
1
|| LD Xmem, dst || dst = Xmem << 16
ST src, Ymem
|| LD Xmem, T
Ymem = src << (ASM – 16)
1
|| T = Xmem
If src is equal to dst, the value stored in Ymem
is the value of src before the execution.
1
第3章 汇编语言指令系统
2. 并行装载和乘法指令(2条) (4小条)
指令
LD Xmem, dst
|| MAC Ymem, dst_
操作
dst = Xmem << 16
|| dst_ = dst_ + T * Ymem
字 周期
数 数
1 1
LD Xmem, dst
dst = Xmem << 16
|| MACR Ymem, dst_ || dst_ = rnd(dst_ + T * Ymem)
1 1
LD Xmem, dst
|| MAS Ymem, dst_
1 1
dst = Xmem << 16
|| dst_ = dst_ – T * Ymem
LD Xmem, dst
dst = Xmem << 16
|| MASR Ymem, dst_ || dst_ = rnd(dst_ – T * Ymem)
1 1
第3章 汇编语言指令系统
3. 并行存储和加/减指令(2条)
指令
操作
ST src, Ymem
Ymem= src<< (ASM–16)
||ADD Xmem, dst || dst = dst_ +Xmem<<16
ST src, Ymem
||SUB Xmem, dst
Ymem= src <<(ASM–16)
|| dst = dst_ ﹣(Xmem<<16)
字 周期
数 数
1
1
1
1
第3章 汇编语言指令系统
4. 并行存储和乘法指令 (3条) (5小条)
指令
操作
ST src, Ymem
|| MAC Xmem, dst
Ymem = src << (ASM – 16)
|| dst = dst + T * Xmem
ST src, Ymem
|| MACR Xmem, dst
Ymem = src << (ASM – 16)
|| dst = rnd(dst + T * Xmem
ST src, Ymem
|| MAS Xmem, dst
Ymem = src << (ASM – 16)
|| dst = dst – T * Xmem
ST src, Ymem
|| MASR Xmem, dst
Ymem = src << (ASM – 16)
|| dst = rnd(dst – T * Xmem)
ST src, Ymem
|| MPY Xmem, dst
Ymem = src << (ASM – 16)
|| dst = T * Xmem
字 周期
数 数
1
1
1
1
1
1
1
1
1
1
第3章 汇编语言指令系统
3.3.6 并行操作指令
(AR2)= B << (ASM – 16)
|| A = (AR4) << 16
例3-29 ST B, *AR2|| LD *AR4+, A
B <<-20
指令执行前
A
B
SXM
ASM
AR2
AR4
数据存储器
01FFH
0200H
00 0000 001C
FF 8421 1234
1
1C
01FF
0200
XXXX
8001
–4的
补码
指令执行前
A
B
SXM
ASM
AR2
AR4
数据存储器
01FFH
0200H
FF 8001 0000
FF 8421 1234
1
1C
01FE
0201
F842
8001
Table 5–3. Indirect-Addressing Instruction Bit Summary – Single Data-Memory
Operand (Continued)
CMPT = 1 Compatibility mode. In compatibility mode, ARP selects the auxiliary
register if ARF = 0. Otherwise, ARF selects the auxiliary register and the ARF value
is loaded into ARP when the access is completed. *AR0 in the assembly instruction
indicates the auxiliary register selected by ARP in compatibility mode.
作业
习题3.2, 3.6, 3.7,3.8, 3.11,
3.17, 3.19,3.21

similar documents