Presentation is loading. Please wait.

Presentation is loading. Please wait.

第3章 汇编语言指令系统 在DSP应用中,虽然可以使用C/C++高级语言编程,降低了对编程者的要求,但在一些实时性要求高的场合仍然需要采用汇编编程,以充分利用DSP丰富的硬件资源,发挥它的实时运算能力。 用汇编语言编程,要求编程者对DSP的低层有充分的了解,包括硬件结构、存储器空间模型和I/O口的组织等。同时又要求编程者对指令系统有深刻的了解。

Similar presentations


Presentation on theme: "第3章 汇编语言指令系统 在DSP应用中,虽然可以使用C/C++高级语言编程,降低了对编程者的要求,但在一些实时性要求高的场合仍然需要采用汇编编程,以充分利用DSP丰富的硬件资源,发挥它的实时运算能力。 用汇编语言编程,要求编程者对DSP的低层有充分的了解,包括硬件结构、存储器空间模型和I/O口的组织等。同时又要求编程者对指令系统有深刻的了解。"— Presentation transcript:

1 第3章 汇编语言指令系统 在DSP应用中,虽然可以使用C/C++高级语言编程,降低了对编程者的要求,但在一些实时性要求高的场合仍然需要采用汇编编程,以充分利用DSP丰富的硬件资源,发挥它的实时运算能力。 用汇编语言编程,要求编程者对DSP的低层有充分的了解,包括硬件结构、存储器空间模型和I/O口的组织等。同时又要求编程者对指令系统有深刻的了解。

2 第3章 汇编语言指令系统 目录: 3.1 C54x汇编语言指令集介绍 3.2 寻址方式 3.3 C54x系列DSP的指令系统
第3章 汇编语言指令系统 目录: C54x汇编语言指令集介绍 寻址方式 C54x系列DSP的指令系统 参考:TMS320C54x DSP Reference Set Volume 2:Mnemonic Instruction Set.pdf, spru172c, 2001, TI官网

3 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.

4 3.1 C54x汇编语言指令集介绍 3.1.1 指令系统中的符号、缩写及操作符 指令系统中采用的符号和缩写如下列表中所示
BIT Xmem, BITC 3.1.1 指令系统中的符号、缩写及操作符 指令系统中采用的符号和缩写如下列表中所示 序号 符 号 含 义 1 A 累加器A 2 ALU 算术逻辑运算单元 3 AR 泛指通用辅助寄存器 4 ARx 指定某一辅助寄存器AR0~AR7 5 ARP ST0中的3位辅助寄存器指针 6 ASM ST1中的5位累加器移位方式位-16~15 7 B 累加器B 8 BRAF ST1中的块重复操作标志位 9 BRC 块重复操作计数器 10 BITC或bit_code 用于测试指令,指定数据存储器单元中的哪 一位被测试,取指范围:0~15

5 3.1.1 指令系统中的符号、缩写及操作符 (续) 第3章 汇编语言指令系统 序号 符 号 含 义 11 C16
第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 (续) 序号 符 号 含 义 11 C16 ST1中的双16位/双精度算术运算方式位 12 C ST0中的进位位 13 CC 2位条件码(0CC3) 14 CMPT ST1中的ARP修正方式位 15 CPL ST1中的直接寻址编辑标志位 16 cond 表示一种条件的操作数,用于条件执行指令 17 [d],[D] 延时选项 18 DAB D地址总线 19 DAR DAB地址寄存器 20 dmad 16位立即数数据存储器地址(0~65535)

6 3.1.1 指令系统中的符号、缩写及操作符 (续) 第3章 汇编语言指令系统 序号 符 号 含 义 21 Dmem 数据存储器操作数 22
第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 (续) 序号 符 号 含 义 21 Dmem 数据存储器操作数 22 DP ST0中的数据存储器页指针(0DP511) 23 Dst 目的累加器(A和B) 24 dst_ 与dst相反的目的累加器 25 EAB E地址总线 26 EAR EAB地址寄存器 27 extpmad 23位立即数程序存储器地址 28 FRCT ST1中的小数方式位 29 hi(A) 累加器的高阶位(AH或BH) 30 HM ST1中的保持方式位

7 3.1.1 指令系统中的符号、缩写及操作符 (续) 第3章 汇编语言指令系统 序号 符 号 含 义 31 IFR 中断标志寄存器 32
第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 (续) 序号 符 号 含 义 31 IFR 中断标志寄存器 32 INTM ST1中的中断屏蔽位 33 K 少于9位的短立即数 34 k3 3位立即数(0k37) 35 k5 5位立即数(-16k515) 36 k9 9位立即数(0k9511) 37 lk 16位长立即数 38 Lmem 利用长字寻址的32位单数据存储器操作数 39 mmr,MMR 存储器映像寄存器 40 MMRx,MMRy 存储器映像寄存器,AR0~AR7或SP

8 3.1.1 指令系统中的符号、缩写及操作符(续) 第3章 汇编语言指令系统 XC n, cond [, cond 􀀀[, cond] ]
第3章 汇编语言指令系统 XC n, cond [, cond 􀀀[, cond] ] RSBX N, SBIT 3.1.1 指令系统中的符号、缩写及操作符(续) 序号 符 号 含 义 41 n XC指令后面的字数,取1或2 42 N 指定状态寄存器,N=0为ST0,N=1为ST1 43 OVA ST0中的累加器A溢出标志 44 OVB ST0中的累加器B溢出标志 45 OVdst 指定目的累加器(A或B)的溢出标志 46 OVdst_ 另一个目的累加器(A或B)的溢出标志 47 OVsrc 指定源累加器(A或B)的溢出标志 48 OVM ST1中的溢出方式位 49 PA 16位立即数端口地址(0PA65535) 50 PAR 程序存储器地址寄存器

9 3.1.1 指令系统中的符号、缩写及操作符 (续) 第3章 汇编语言指令系统 序号 符 号 含 义 51 PC 程序计数器 52 pmad
第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 (续) 序号 符 号 含 义 51 PC 程序计数器 52 pmad 16位立即数程序存储器地址(0pmad65535) 53 pmem 程序存储器操作数 54 PMST 处理器工作方式状态寄存器 55 prog 56 [R] 舍入选项 57 rnd 舍入 Round 58 RC 重复计数器 59 RTN 快速返回寄存器 60 REA 块重复结束地址寄存器

10 3.1.1 指令系统中的符号、缩写及操作符(续) 第3章 汇编语言指令系统 RSBX N, SBIT 序号 符 号 含 义 61 RSA
第3章 汇编语言指令系统 RSBX N, SBIT 3.1.1 指令系统中的符号、缩写及操作符(续) 序号 符 号 含 义 61 RSA 块重复起始地址寄存器 62 SBIT 用于指定状态寄存器位的4位地址(0~15) 63 SHFT 4位移位值(0~15) 64 SHIFT 5位移位值(-16~15) 65 Sind 间接寻址的单数据存储器操作数 66 Smem 16位单数据存储器操作数 67 SP 堆栈指针寄存器 68 src 源累加器(A或B) 69 ST0,ST1 状态寄存器0,状态寄存器1 70 SXM ST1中的符号扩展方式位

11 3.1.1 指令系统中的符号、缩写及操作符(续) 第3章 汇编语言指令系统 序号 符 号 含 义 71 T 暂存器 72 TC
第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符(续) 序号 符 号 含 义 71 T 暂存器 72 TC ST0中的测试/控制标志 73 TOS 堆栈顶部 74 TRN 状态转移寄存器(比较选择存储CSST单元内) 75 TS 由T寄存器的5~0位所规定的移位数(-16~31) 76 uns 无符号数 77 XF ST1中的外部标志状态位 78 XPC 程序计数器扩展寄存器 79 Xmem 16位双数据存储器操作数, 用于双数据操作数指令和单数据操作指令 80 Ymem 16位双数据存储器操作数,用于双数据操作数指令 CMPS指令

12 指令系统中的运算符号及优先级如下列表中所示
第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 指令系统中的运算符号及优先级如下列表中所示 序号 符 号 运算功能 求值顺序 1 + - ~ ! 取正、取负、按位求补、 逻辑非 从右至左 2 * / % 乘法、除法、求模 从左至右 3 + - 加法、减法 4 ^ 指数 从左到右 5 << >> 左移、右移 6 <  小于、小于等于 7 >  大于、大于等于 8  != 不等于

13 指令系统中的运算符号及优先级如下列表中所示 序号 符 号 运算功能 求值顺序
第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 指令系统中的运算符号及优先级如下列表中所示 序号 符 号 运算功能 求值顺序 8 = 等于 从左至右 9 & 按位与运算(AND) 10 按位异或运算(exclusive OR) 11 | 按位或运算(OR)

14 3.1 C54x汇编语言指令集介绍 3.1.2 汇编语言指令举例 本节以LD装载指令为例,说明指令的格式和其它一些有用信息。
(1)LD Smem, dst 汇编语法 操作数 指令代码 执行 状态位 说明 指令字长 周期数 1 D I A (2)LD Xmem, SHFT, dst 1 D X S H F T (3)LD #lk [, SHFT ], dst 1 D S H F T

15 3.1.2 汇编语言指令举例: LD命令

16 3.1.2 汇编语言指令举例: LD命令

17 3.1.2 汇编语言指令举例: LD命令

18 3.1.2 汇编语言指令举例: LD命令

19 3.1.2 汇编语言指令举例: LD命令

20 3.1.2 汇编语言指令举例: LD命令

21 3.1.2 汇编语言指令举例: LD命令

22 3.2 寻址方式 3.2 寻址方式 C54x的寻址方式共有下列7种: (1)立即寻址 (2)绝对寻址 (3)累加器寻址 (4)直接寻址
(5)间接寻址 (6)存储器映像寄存器寻址 (7)堆栈寻址

23 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

24 3.2 寻址方式 3.2.1 立即寻址 可使用立即寻址的指令及立即数的位数如下表所示: 3位或5位立即数 8位 立即数 9位 16位 LD
FRAME RPT ADD BITF OR ST ADDM CMPM ORM STM AND LD RPT SUB ANDM MAC RPTZ XOR XORM FRAME: Stack Pointer Immediate Offset; Syntax: FRAME K

25 3.2 寻址方式 3.2.2 绝对寻址 绝对寻址有下列4种类型 : 数据存储器(dmad)寻址 程序存储器(pmad)寻址
I/O端口(PA)寻址 *(lk)寻址

26 3.2.2 绝对寻址 相关指令如下表所示: 绝对寻址方式 相关指令 数据存储器 (dmad)寻址 MVDK Smem, dmad MVDM dmad, MMR MVKD dmad, Smem MVMD MMR, dmad 程序存储器 (pmad)寻址 FIRS Xmem, Ymem, pmad MACD Smem, pmad, src pmad→PAR, While (RC)≠0, (B)+(A(32–16))×(Pmem addressed by PAR)→B, ((Xmem)+(Ymem))<<16→A, (PAR)+1→PAR, (RC) −1→RC (FIRS指令功能) pmad→PAR, (Smem)×(Pmem addressed by PAR) +(src)→src, (Smem)→T, (Smem)→Smem+1, If (RC)≠0, (PAR)+1→PAR (MACD指令功能)

27 3.2 寻址方式 3.2.2 绝对寻址 绝对寻址方式 相关指令 程序存储器 (pmad)寻址 MACP Smem, pmad, src
MVDP Smem, pmad MVPD pmad, Smem I/O端口(PA)寻址 PORTR PA, Smem PORTW Smem, PA *(lk)寻址 可用于所有支持单数据操作数(Smem) 的指令

28 3.2 寻址方式 3.2.3 累加器寻址 有两条指令采用这种寻址方式 :A(22-0)→PAR , 累加器寻址指令 解释
READA Smem A中内容为程序存储器地址,将 该地址中的数据送入Smem指定 的数据存储器中 WRITA Smem 将Smem指定的数据存储器中的内容送入A所指出的程序存储器中 (Smem) (Pmem addressed by PAR), If (RC)≠0, (RC)–1→RC , (PAR)+1→PAR

29 第3章 汇编语言指令系统 3.2.3 累加器寻址 例3-7 程序存储器中有一个常数表格,首地址为TABLE, 长度是10个字。要求把该表格读入首地址为BUFFER的数据存储器区中。实现该功能的程序段如下: LD #TABLE,A ;#TABLE→A STM #BUFFER,AR3 ;#BUFFER→AR3 RPT #9 ;后面一条指令将运行10次 READA *AR ; A →PAR, ((PAR))→(AR3) ; (PAR)+1→PAR, (AR3)+1→AR3

30 3.2 寻址方式 3.2.4 直接寻址 直接寻址是指利用指令中的地址偏移量dma与数据页指针DP或堆栈指针SP组合,找到数据空间中的一个16位地址的方式。 指令代码格式如下所示: 15 ~ 8 7 6 ~ 0 操 作 码 I = 0 数据存储器地址偏移(dma)

31 3.2 寻址方式 3.2.4 直接寻址 CPL=0时 直接寻址 指 令 15~8 7 6~0 操作码 I=0 dma 页指针DP
指 令 15~8 7 6~0 操作码 I=0 dma 页指针DP (位于ST0中) 9位数据页指针DP 16位数据 存储器地址 9位数据页指针DP dma 高9位 低7位

32 3.2 寻址方式 3.2.4 直接寻址 CPL=1时 直接寻址 指 令 15~8 7 6~0 操作码 I=0 dmad 16位堆栈指针SP
指 令 15~8 7 6~0 操作码 I=0 dmad 16位堆栈指针SP 堆栈指针SP + dmad 16位数据 存储器地址 16位: SP dmad 低7位

33 3.2.4 直接寻址 @常省略。 例3-8 下列程序段实现的功能是:将两个数据存储单元01E0h和01E1h中的内容相加,然后把结果送入A。
第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 16位数据 存储器地址 E h DP @60h @常省略。

34 3.2.5 间接寻址 间接寻址是指通过两个辅助算术逻辑单元ARAU0、ARAU1及8个辅助寄存器AR0~AR7,间接获得数据存储器地址的方式。 单操作数寻址 LD *AR1, A 双操作数寻址 MAC *AR5+, *AR4+[AR6],A, B

35 3.2.5 间接寻址 间接寻址是指通过两个辅助算术逻辑单元ARAU0、ARAU1及8个辅助寄存器AR0~AR7,间接获得数据存储器地址的方式。 单操作数寻址 LD *AR1, A 双操作数寻址 MAC *AR5+, *AR4+[AR6],A, B

36 3.2.5 间接寻址 (1)单操作数间接寻址址 LD *AR1, A
单操作数寻址是一条指令中,只有一个存储器操作数(即从存储器中只存取一个操作数),其指令的格式: 其中:15~8位是指令的操作码;第7位I=1,表示指令的寻址方式为间接寻址;6~3位为方式(MOD),定义了间接寻址的类型(表3-4);2~0位定义寻址所使用的辅助寄存器(如AR0~AR7)。

37 3.2.5 间接寻址 单操作数寻址 地址存放情况及地址调整功能共16种: 操作句法 功 能 说 明 * ARx 地址=ARx
单操作数寻址 地址存放情况及地址调整功能共16种: 操作句法 功 能 说 明 * ARx 地址=ARx ARx的内容为数据存储器地址 * +ARx ARx=ARx+1 ARx中的地址加1后,再寻址,只用于写 * ARx- ARx=ARx-1 寻址结束后,ARx地址减1 * ARx+ 寻址结束后,ARx地址加1 * ARx-0 ARx=ARx-AR0 寻址结束后,从ARx中减去AR0的值 * ARx+0 地址=ARx ARx=ARx+AR0 寻址结束后,把AR0加到ARx 中

38 3.2.5 间接寻址 单操作数寻址 操作句法 功 能 说 明 *ARx-0B 地址=ARx ARx=B(ARx-AR0)
功 能 说 明 *ARx-0B 地址=ARx ARx=B(ARx-AR0) 寻址结束后,用位倒序进位的方法从ARx中减去AR0的值 *ARx+0B ARx=B(ARx+AR0) 寻址结束后,用位倒序进位的方法将 AR0加到ARx中 *ARx-% ARx=Circ(ARx-1) 寻址结束后,ARx中的地址值按循环减的方法减1 *ARx+% ARx=Circ(ARx+1) 寻址结束后,ARx中的地址值按循环加的方法加1 *ARx-0% ARx=Circ(ARx-AR0) 寻址结束后,按循环减的方法从ARx中减去AR0中的值

39 3.2.5 间接寻址 单操作数寻址 $不用于MMR 操作句法 功 能 说 明 *ARx+0% 地址=ARx
功 能 说 明 *ARx+0% 地址=ARx ARx=Circ(ARx+AR0) 寻址结束后,按循环加的方法将AR0中的值加到ARx *ARx(lk) 地址=ARx+lk ARx=ARx 以ARx与16位数之和作为地址,寻址结束后,ARx中的值不变 $ *+ARx(lk) ARx=ARx+lk 将一个16位带符号数加到ARx,然后寻址 $ *ARx(lk)% 地址=Circ(ARx+lk) ARx=Circ(ARx+lk) 将一个16位带符号数按循环加的方法加至ARx,然后再寻址$ * (lk) 地址=lk 利用16位无符号数作为地址,寻址数据存储器$

40 3.2.5 间接寻址 单操作数寻址: 单操作数寻址结构图如下所示. 操作数 操作 无lk, 写操作地址范围64k

41 3.2 寻址方式 3.2.5 间接寻址 位反向寻址 位反向寻址是专门为快速傅立叶变换FFT而设计的。 例 3-9 求 b b

42 3.2.5 间接寻址 位反向寻址:4位二进制数的原始地址与位反向地址的对应关系如下表所示: 正常顺序 原始地址 位反向地址 位反向顺序
0000 1 0001 1000 8 2 0010 0100 4 3 0011 1100 12 5 0101 1010 10 6 0110 7 0111 1110 14

43 3.2.5 间接寻址 位反向寻址 正常顺序 原始地址 位反向地址 位反向顺序 8 1000 0001 1 9 1001 10 1010
0101 5 11 1011 1101 13 12 1100 0011 3 14 1110 0111 7 15 1111

44 3.2.5 间接寻址 2 N﹥20 循环寻址 循环寻址示意图如下: 例如: *AR1+%
循环缓冲区长度20,因为2 5﹥20,所以N=5,取基地址EFB的低5位为5个0,设EFB=1000h。在初始化编程中将20→BK 地址指针为AR1, 1000h→AR1 假设step = +1,当index变化到19(13h)时,再做index = index + step时就会使index等于BK里的值20,因此应该进行index = index + step – BK的操作,使得index=0,也就是使AR1=1000h,又回到基地址EFB的位置,从而形成了循环寻址。 2 N﹥20 循环寻址 循环寻址示意图如下: EFB EOB

45 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位。

46 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。

47 ② 双操作数间接寻址 ADD Xmem,Ymem, dst
3.2.5 间接寻址 ② 双操作数间接寻址 ADD Xmem,Ymem, dst 用途:用在完成两个读或一个读且一个写的指令中。 说明:该指令只有一个字长,只能以间接寻址的方式工作。 格式如下: 例如 ADD *AR2+0%, *AR3–, A 其中,15~8位:指令操作码;7~6位为Xmod,定义了用于访问Xmem操作数间接寻址方式的类型(见表3-5);5~4位为Xar,确定了包含Xmem地址的辅助寄存器;3~2位为Ymod,定义了用于访问Ymem操作数的间接寻址方式的类型;1~0位为Yar,确定了包含Ymem的辅助寄存器。

48 3.2.5 间接寻址 ②双操作数寻址 双操作数寻址结构图如下所示:

49 3.2.5 间接寻址 ②双操作数寻址 双操作数寻址有4种地址存放情况和地址调整功能 : Xmod or Ymod 操作码 语法 功 能
功 能 说 明 00 * ARx 地址=ARx ARx中的内容是数据存储器地址 01 * ARx- ARx=ARx-1 寻址后,ARx的地址减1 10 * ARx+ ARx=ARx+1 寻址后,ARx的地址加1 11 * ARx+0% ARx=circ(ARx+AR0) 寻址后,AR0以循环寻址方式加到ARx中去

50 3.2.5 间接寻址–特别实例 例3-10 双操作数间接寻址指令举例 MAC[R] Xmem, Ymem, src [, dst ];
第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))→T, (AR5)+1→AR5, (AR4)+1→AR4 ;

51 3.2.5 间接寻址 –特别实例 第3章 汇编语言指令系统 又是 存储器映像寄存器寻址 又是 存储器映像寄存器寻址
第3章 汇编语言指令系统 3.2.5 间接寻址 –特别实例 TMS320C54x DSP Reference Set Volume 2 Mnemonic Instruction Set--spru172c.pdf 又是 存储器映像寄存器寻址 AR0, AR7的数据存储器的地址分别是0x0010, 0x0017 又是 存储器映像寄存器寻址

52 3.2 寻址方式 3.2.6 存储器映像寄存器寻址 存储器映像寄存器寻址是一种直接访问存储器映像寄存器MMR的方式,可以用来修改MMR的值。
有8条指令可以使用存储器映像寄存器寻址:

53 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

54 3.2 寻址方式 3.2.7 堆栈寻址 下列4条指令使用堆栈寻址: 堆 栈 寻 址 PSHD Smem PSHM MMR POPD Smem
POPM MMR

55 3.3 C54x系列DSP的指令系统 3.3 C54x系列DSP的指令系统 C54x的汇编语言指令集共有129条基本指令,
按完成的功能可以分为6类: 数据存取指令 (共28条) 算术运算指令 (共42条) 逻辑运算指令(共17条) 控制程序转移指令(共31+3条) 重复操作指令(共3条(包含于上面类) 并行操作指令(共8条)

56 3.3 C54x系列DSP的指令系统 3.3.1 数据存取指令 (表3-7 共28条) 1. 加载指令 (6条细分为21条)
本节只介绍非并行的数据存取指令,包括 : 1. 加载指令 (6条细分为21条) 2. 存储指令 (10条细分为18条) 4. 混合加载和存储指令(12条) 3.以上包括32位长操作数的加载、存储指令(2条)

57 1. 加载指令 (共6条) 以累加器A或B为目标操作数的LD指令 以累加器 A或B为 目标操作数 的LD指令 LD Smem, dst
1. 加载指令 (共6条) 以累加器A或B为目标操作数的LD指令 以累加器 A或B为 目标操作数 的LD指令 LD Smem, dst LD Smem, TS, dst LD Smem, 16, dst LD Smem [, SHIFT ], dst LD Xmem, SHFT, dst LD #K, dst LD #lk [, SHFT ], dst LD #lk, 16, dst LD src, ASM [, dst ] LD src [, SHIFT ], dst TS:Shift value specified by bits 5–0 of T (–16≤TS≤31) (1条)

58 3.3 C54x系列DSP的指令系统 1. 加载指令 (共6条) 以暂存器
以暂存器T或ST0、ST1的DP、ASM及ARP字段为目标操作数的LD指令 以暂存器 T或ST0、 ST1的DP、 ASM及ARP 字段为目标 操作数的 LD指令 LD Smem, T LD Smem, DP LD #k9, DP LD #k5, ASM LD #k3, ARP LD Smem, ASM (1条续)

59 1. 加载指令 (共6条) DLD Lmem,dst 32位长操作数的加载指令
dst = Lmem,将Lmem所指定的单数据存储器中的32位数据送入累加器A或B中。 功能: LDM MMR,dst dst = MMR 将MMR寄存器中的数据,送 入累加器dst。 功能: LDR Smem,dst dst(31-16)=(Smem)<<16, dst(15)=1,dst(14-0)=0; 功能: (Smem) << << 15 → dst(31–16) Load Memory Value in Accumulator High With Rounding

60 3.3 C54x系列DSP的指令系统 1. 加载指令 (共6条) LDU Smem,dst
功能:dst = uns(Smem) 将Smem所指定的单数 据存储器的无符号数据,送入累加器。 LTD Smem 功能:T=Smem,(Smem+1)= Smem 将单数据存 储器Smem的数据,送入寄存器T,并memory delay。

61 1. 加载指令 (共6条) 例3.11 LD *AR3, A 1)当SXM=0时,进行无符号数的加载 指令执行前 指令执行后
第3章 汇编语言指令系统 1. 加载指令 (共6条) 例 LD *AR3, A 1)当SXM=0时,进行无符号数的加载 指令执行前 指令执行后 A SXM AR 数据存储器 0200H A6 A A6 SXM AR 数据存储器 0200H A6

62 3.3 C54x系列DSP的指令系统 1. 加载指令 (共6条) 例3.11 LD *AR3, A 2)当SXM=1时,进行有符号数的加载
指令执行前 指令执行后 A SXM AR 数据存储器 0200H A6 A FF FFFF 95A6 SXM AR 数据存储器 0200H A6

63 3.3 C54x系列DSP的指令系统 1. 加载指令 (共6条) 例3.12 LD A, 4, B
1)当OVM=0时,对溢出不进行处理,仅通过OVB=1反映溢出 指令执行前 指令执行后 A FFF B FFFF OVB OVM A FFF 8000 B FFF OVB OVM

64 1. 加载指令 (共6条) 例3.12 LD A, 4, B 2)当OVM=1时,对溢出进行处理 指令执行前 指令执行后
第3章 汇编语言指令系统 1. 加载指令 (共6条) 例 LD A, 4, B 2)当OVM=1时,对溢出进行处理 指令执行前 指令执行后 A FFF B FFFF OVB OVM A FFF B FFF FFFF OVB OVM

65 直接寻址 ST1 1. 加载指令 例3.13 LD @0,ASM CPL=0 0001 0010 0011 0100 指令执行前 指令执行后
第3章 汇编语言指令系统 ST1 1. 加载指令 例 LD @0,ASM CPL=0 0180H 指令执行前 指令执行后 ASM DP 数据存储器 0180H ASM DP 数据存储器 0180H 16位数据 存储器地址 h DP @ 0 直接寻址 CPL=0

66 3.3 C54x系列DSP的指令系统 2. 存储指令 (共10条) (表3-7 ) 1: ST T, Smem
2: ST TRN, Smem 3: ST #lk, Smem; #有时可省略

67 3.3 C54x系列DSP的指令系统 2. 存储指令 (共10条) STLM src, MMR; 为MMR赋值的指令
MMR = src(15-0),将累加器的低16 位送入MMR,是1字1周期指令。 STM #lk, MMR; MMR = #lk, 将长立即数送入MMR,是2字2周期指令。

68 3.3 C54x系列DSP的指令系统 2. 存储指令 (共10条) 例 3.14 STLM A, *AR2 指令执行前 指令执行后
AR5(15h) F69 A AR AR STLM和STM 可访问位于数据存储器 0页上的MMR 和暂存寄存器0060h~007Fh。对其进行直接寻址或间接寻址时,不管当前DP或 ARx的值如何,在指令执行后,DP值或ARx的高9位都被强制清0.

69 第3章 汇编语言指令系统 2. 存储指令 (共10条) STM #lk, MMR; #有时可省略

70 3.3 C54x系列DSP的指令系统 2. 存储指令 例 3.15 STM #1357H, *AR4+ 指令执行前 指令执行后
例 STM #2468H, 60H 指令执行前 指令执行后 0060H 0060H

71 3.3 C54x系列DSP的指令系统 2. 存储指令 (共10条) STH src, Smem STH src, ASM, Smem
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

72 3.3 C54x系列DSP的指令系统 2. 存储指令 (共10条) 例 3.17 设累加器(A)=FF 9876 5432H
STL A,8,da (da)=3200H STL A,-8,da (da)=7654H STH A,8,da (da)=7654H (da)=FF98H STH A,-8,da (da)=00FFH (SXM=0) STH A,-16,da (da)=FFFFH (SXM=1) STH A,-16,da 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.

73 2. 存储指令 (共10条)条件存储指令: CMPS src, Smem;比较选择累加器(src)的高、低字
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 ASM=01 AR3=0202 *(0202)=0101 A=FF FE00 C321 ASM=01 AR3=0202 *(0202)=FC01

74 3.3 C54x系列DSP的指令系统 3. 32位长操作数的加载、存储指令及数据存放格式 DLD Lmem, dst
3. 32位长操作数的加载、存储指令及数据存放格式 32位 长操作数 的加载、 存储指令 及数据 存放格式 DLD Lmem, dst 在单周期内同时利用CAB、CB和AB、DB总线将32位Lmem读入累加器。是1字1周期指令。 DST src, Lmem 两次使用EAB、EB总线将累加器的内容分别写入高16位和低16 位数据存储器。是1字2周期指令。

75 3. 32位长操作数的加载、存储指令及数据存放格式 长操作数指令中给出的地址总是指向数据高有效字
第3章 汇编语言指令系统 3. 32位长操作数的加载、存储指令及数据存放格式 长操作数指令中给出的地址总是指向数据高有效字 C54x的32位长操作数有两种数据存放格式: 偶地址存放和奇地址存放 偶地址存放是指数据的高有效字存放在偶地址且是较低的地址,低有效字存放在奇地址且是较高的地址 奇地址存放是指数据的高有效字存放在奇地址且是较高的地址,低有效字存放在偶地址且是较低的地址 一般推荐使用偶地址存放格式

76 3.3 C54x系列DSP的指令系统 3. 32位长操作数的加载、存储指令及数据存放格式 例3-18 存放格式对数据存储的影响
DST B, *AR3+ 1)偶地址存放 指令执行前 指令执行后 B CAC BD90 AR 数据存储器 0100H 0101H B CAC BD90 AR 数据存储器 0100H CAC 0101H BD90

77 3.3 C54x系列DSP的指令系统 3. 32位长操作数的加载、存储指令及数据存放格式 2)奇地址存放 DST B, *AR3+
指令执行前 指令执行后 B CAC BD90 AR 数据存储器 0100H 0101H B CAC BD90 AR 数据存储器 0100H BD90 0101H CAC

78 3.3 C54x系列DSP的指令系统 3. 32位长操作数的加载、存储指令及数据存放格式 例3-19 存放格式对数据存储的影响
DLD *AR3+, B 1)偶地址存放 指令执行前 指令执行后 B AR 数据存储器 0100H CAC 0101H BD90 B CAC BD90 AR 数据存储器 0100H CAC 0101H BD90

79 3.3 C54x系列DSP的指令系统 3. 32位长操作数的加载、存储指令及数据存放格式 2)奇地址存放 DLD *AR3+, B
3. 32位长操作数的加载、存储指令及数据存放格式 2)奇地址存放 DLD *AR3+, B 指令执行前 指令执行后 B AR 数据存储器 0100H CAC 0101H BD90 B BD90 6CAC AR 数据存储器 0100H CAC 0101H BD90

80 4. 混合加载和存储指令(共12条) 绝对寻址方式 相关指令 数据存储器 (dmad)寻址 MVDD Xmem, Ymem
4. 混合加载和存储指令(共12条) 绝对寻址方式 相关指令 数据存储器 (dmad)寻址 MVDD Xmem, Ymem MVMM MMRx, MMRy MVDK Smem, dmad MVDM dmad, MMR MVKD dmad, Smem MVMD MMR, dmad 程序存储器 (pmad)寻址 MVDP Smem, pmad MVPD pmad, Smem I/O端口(PA)寻址 PORTR PA, Smem PORTW Smem, PA

81 3.3 C54x系列DSP的指令系统 4. 混合加载和存储指令 累加器寻址指令 解释 READA Smem A中内容为程序存储器地址,将
4. 混合加载和存储指令 累加器寻址指令 解释 READA Smem A中内容为程序存储器地址,将 该地址中的数据送入Smem指定 的数据存储器中 WRITA Smem 将Smem指定的数据存储器中的内容送入A所指出的程序存储器中 A→PAR , (Pmem addressed by PAR) (Smem), If (RC)≠0, (RC)–1→RC , (PAR)+1→PAR

82 3.3 C54x系列DSP的指令系统 3.3.2 算术运算指令(共42条) C54x的算术运算指令包括: 基本算术运算指令 (共12条)
特殊运算指令 (共15条) 双字(32位)算术运算指令 (共6条) 乘累加和乘累减指令 (共9条)

83 基本算术运算指令(共12条) 加法指令 操作 字数 周期数 ADD Smem , src src=src+Smem 1
ADD Smem , TS,src src=src+Smem<<TS 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 ADD Xmem ,Ymem ,dst dst=Xmem<<16+Ymem<<16 ADD #lk,[,SHFT],src[,dst] dst=src+#lk<< SHFT ADD #lk,16,src[,dst] dst=src+#lk<< 16 ADD src,[,SHIFT][,dst] dst=dst+src<< SHIFT ADD src,ASM[,dst] dst=dst+src<< ASM ADDC Smem , src src=src+Smem+C ADDM #lk, Smem Smem=Smem+#lk ADDS Smem , src src=src+uns(Smem)

84 基本算术运算指令(共12条)(续) 减法指令 操作 字数 周期数 SUB Smem , src src=src-Smem 1
SUB Smem , TS,src src=src-Smem<<TS SUB Smem ,16 ,src[,dst] dst=src-Smem<<16 SUB Smem,[,SHIFT],src[,dst] dst=src-Smem<< SHIFT 2 SUB Xmem ,SHFT ,src src=src-Xmem<< SHFT SUB Xmem ,Ymem ,dst dst=Xmem<<16-Ymem<<16 SUB #lk,[,SHFT],src[,dst] dst=src-#lk<< SHFT SUB #lk,16,src[,dst] dst=src-#lk<< 16 SUB src,[,SHIFT][,dst] dst=dst-src<< SHIFT SUB src,ASM[,dst] dst=dst-src<< ASM SUBB Smem , src src=src-Smem-C SUBC Smem,src (用于除法) If(src-Smem<<15)≥0, src=(src-Smem<<15)<<1+1 Else src=src<<1 SUBS Smem , src src=src-uns(Smem)

85 基本算术运算指令(共12条)(续) 乘法指令 操作 字数 周期数 MPY Smem , dst dst=T*Smem 1
MPYR Smem , dst dst=rnd(T*Smem) MPY Xmem ,Ymem ,dst dst= Xmem *Ymem,T=Xmem MPY Smem ,#lk ,dst dst= Smem *#lk ,T=Smem 2 MPY #lk ,dst dst= T*#lk MPYA dst dst=T*A(32-16) MPYA Smem B= Smem*A(32-16),T=Smem MPYU Smem , dst dst=uns(T )*uns(Smem) SQUR Smem , dst dst= Smem *Smem ,T=Smem SQUR A , dst dst=A(32-16)*A(32-16)

86 基本算术运算指令 例3-20 设被除数1000在数据空间0060h单元中,除数5在0061h中。用条件减法指令SUBC完成16位/16位无符号数除法1000÷5,并将结果存放在0062h单元。 实现的程序段如下: RSBX SXM ;无符号数除法,不进行符号扩展 STM #0060h, AR1 ;地址指针指向被除数 LD *AR1+, A ;被除数1000(3E8h)→A RPT # ;下条指令重复执行16次 SUBC *AR1 , A ;进行条件减法 MAR *AR ; AR1+1指向商单元,因不能在前行调整AR1 STL A, *AR ;将商装入0062h单元 If (src-Smem<<15)≥0, src=(src-Smem<<15)<<1+1 Else src=src<<1

87 3.3 C54x系列DSP的指令系统 2. 特殊运算指令(共15条) 特殊运算指令 操作 字数 周期数 ABDST Xmem , Ymem
B = B + |A(32-16)|, A = (Xmem-Ymem)<<16 1 ABS src [,dst ] dst = |src | CMPL src [,dst ] dst = src DELAY Smem (Smem)→Smem +1 EXP src T = 冗余符号位数(src)-8 FIRS Xmem ,Ymem ,Pmad B = B +A(32–6)*(Pmad), A = (Xmem +Ymem)<<16 2 3 LMS Xmem ,Ymem B = B + Xmem *Ymem, A = (A +Xmem<<16)+215

88 2. 特殊运算指令(共15条)(续) 第3章 汇编语言指令系统 特殊运算指令 功 能 字数 周期数 MAX dst
第3章 汇编语言指令系统 2. 特殊运算指令(共15条)(续) 特殊运算指令 功 能 字数 周期数 MAX dst dst = max(A,B) 1 MIN dst dst = min(A,B) NEG src [,dst ] dst = -src NORM src [,dst ] dst = src<<TS, dst = norm (src ,TS) POLY Smem B = Smem<<16,(Smem系数,T未知数) A = rnd(A (32–16)*T + B ) RND src [,dst ] dst = src +215 SAT src Saturate(src) SQDST Xmem ,Ymem B = B + A(32-16)*A(32-16) A = (Xmem-Ymem)<<16

89 3. 双字(32位)算术运算指令(共6条) 双字指令 操作 字 数 C16 = 0 C16 = 1
3. 双字(32位)算术运算指令(共6条) 双字指令 操作 C16 = 0 C16 = 1 DADD Lmem, src [ , dst ] dst = Lmem + src dst(39~16) = Lmem(31~16)+src(31~16) dst(15~0) = Lmem(15~0) + src(15~0) 1 DADST Lmem, dst dst=Lmem+ (T << 16 +T) Lmem(31~16) + T Lmem(15~0) – T DRSUB Lmem, src src = Lmem – src src(39~16) = Lmem(31~16) –src(31~16) src(15~0) = Lmem(15~0) –src(15~0)

90 3. 双字(32位)算术运算指令(共6条)(续) 第3章 汇编语言指令系统 双字指令 操作 字 数 C16 = 0 C16 = 1
第3章 汇编语言指令系统 3. 双字(32位)算术运算指令(共6条)(续) 双字指令 操作 C16 = 0 C16 = 1 DSADT Lmem, dst dst = Lmem – (T << 16 + T) dst(39~16) = Lmem(31~16) –T dst(15~0)= Lmem(15~0) + T 1 DSUB Lmem, src src = src – Lmem src (39~16) = src(31~16) – mem(31~16) src (15~0) = src(15~0) – mem(15~0) DSUBT Lmem, dst Lmem(31~16) – T dst(15~0) = Lmem(15~0) – T

91 4. 乘累加和乘累减指令(共9条) 指令 操作 MAC Smem, src src = src + T * Smem 1
4. 乘累加和乘累减指令(共9条) 指令 操作 字数 周期数 MAC Smem, src src = src + T * Smem 1 MACR Smem, src src = rnd(src + T * Smem) MAC #lk, src [ , dst ] dst = src + T * #lk 2 MAC Smem, #lk, src [, dst] dst = src + Smem * #lk, T = Smem MAC Xmem, Ymem, src [ , dst ] dst = src + Xmem * Ymem, T = Xmem MACR Xmem, Ymem, src [ , dst ] dst = rnd(src + Xmem * Ymem), T = Xmem MACA Smem [ , B ] B = B + Smem * A(32~16), MACAR Smem [ , B ] B=B+rnd( Smem*A(32~16)), T = Smem

92 4. 乘累加和乘累减指令(共9条)(续) 指令 操作 MACA T,src [ , dst ]
4. 乘累加和乘累减指令(共9条)(续) 指令 操作 字数 周期数 MACA T,src [ , dst ] dst = src + T * A(32~16) 1 MACAR T, src [ , dst ] dst = rnd(src + T * A(32~16)) MACD Smem, pmad, src src = src + Smem * pmad, T = Smem, (RC)≠0, (PAR)+1→PAR (Smem + 1) = Smem 2 3 MACP Smem, pmad, src MACSU Xmem, Ymem, src src=src+ uns(Xmem)*Ymem, T = Xmem MAS Smem, src src = src – T * Smem MASR Smem, src src = rnd(src – T * Smem)

93 4. 乘累加和乘累减指令(共9条)(续) 指令 操作 MAS Xmem, Ymem, src [ , dst ]
字数 周期数 MAS Xmem, Ymem, src [ , dst ] dst = src – Xmem * Ymem, T = Xmem 1 MASR Xmem, Ymem, src [ , dst ] dst = rnd(src – Xmem * Ymem), T = Xmem MASA Smem [ , B ] B = B – Smem * A(32~16), T = Smem MASA T, src [ , dst ] dst = src – T * A(32~16) MASAR T, src [ , dst ] dst = rnd(src – T * A(32~16)) SQURA Smem, src src = src + Smem * Smem, SQURS Smem, src src = src – Smem * Smem,

94 指令MACD Smem, pmad, src 的操作框图
3.3 C54x系列DSP的指令系统 4. 乘累加和乘累减指令(共9条)(续) 对常用的乘累加指令的分析: MAC[R] MACA[R] MACP和MACD MACSU Xmem, Ymem, src 指令MACD Smem, pmad, src 的操作框图 如下图所示 :

95 MACD Smem, pmad, src 的操作框图
4. 乘累加和乘累减指令(共9条)(续)

96 (1)当FRCT=0时, 执行指令MACD *AR1,TABLE, A的情况
例3-21 乘累加指令举例。 (1)当FRCT=0时, 执行指令MACD *AR1,TABLE, A的情况 指令执行前 0000 A T 0100 TABLE 0064 FRCT AR1 程序存储器 0100h 1234 数据存储器 0101h 指令执行后 E84 1234 A T 0100 TABLE 0064 FRCT AR1 程序存储器 0100h 数据存储器 0101h 1234h×64h=71C50h b (2)当FRCT=1时,执行指令后,A= E 4AD4, FRCT=1, 其他相同。 b E A h

97 3.3 C54x系列DSP的指令系统 3.3.3 逻辑运算指令(共17条) 逻辑运算指令包括: 布尔型指令(共6条) 移位指令 (共6条)
第3章 汇编语言指令系统 3.3 C54x系列DSP的指令系统 3.3.3 逻辑运算指令(共17条) 逻辑运算指令包括: 布尔型指令(共6条) 移位指令 (共6条) 测试指令 (共5条)

98 AND #lk[,SHFT],src[,dst] dst = src&#lk<<SHFT 2
布尔型指令(共6条) 与指令 操作 字数 周期数 AND Smem , src src = src&Smem 1 AND #lk[,SHFT],src[,dst] dst = src&#lk<<SHFT 2 AND #lk,16,src[,dst] dst = src&#lk<<16 AND src[,SHIFT][,dst] dst=dst &src<<SHIFT ANDM #lk, Smem Smem = Smem&#lk

99 dst=src | #lk<<SHFT 2
布尔型指令(共6条)(续) 或指令 操作 字数 周期数 OR Smem , src src = src | Smem 1 OR #lk[,SHFT],src[,dst] dst=src | #lk<<SHFT 2 OR #lk,16,src[,dst] dst = src | #lk<<16 OR src[,SHIFT][,dst] dst=dst |src<<SHIFT ORM #lk, Smem Smem = Smem | #lk

100 XOR #lk[,SHFT],src[,dst] dst = src  #lk<<SHFT 2
布尔型指令(共6条)(续) 异或指令 操作 字数 周期数 XOR Smem , src src = src  Smem 1 XOR #lk[,SHFT],src[,dst] dst = src  #lk<<SHFT 2 XOR #lk,16,src[,dst] dst = src  #lk<<16 XOR src[,SHIFT][,dst] dst=dst  src<<SHIFT XORM #lk, Smem Smem = Smem  #lk

101 dst = src << SHIFT {算术移位} SFTC src {条 件移位}
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 {逻辑移位}

102 3.3 C54x系列DSP的指令系统 2. 移位指令 39 ~ 32 31 0 累加器src 保护位 C 39 ~ 32 31 0
2. 移位指令 带进位位C的循环左移ROL移位示意图如下: 39 ~ 32 累加器src 保护位 C 带进位位C的循环右移ROR移位示意图如下: 39 ~ 32 累加器src 保护位 C

103 带测试位TC的循环左移ROLTC移位示意图如下: 39 ~ 32 31 0 累加器src 保护位 TC
第3章 汇编语言指令系统 2. 移位指令 带测试位TC的循环左移ROLTC移位示意图如下: 39 ~ 32 累加器src 保护位 TC C 39 ~ 32 累加器src 保护位 比较ROL移位 C

104 逻辑移位指令SFTL src, SHIFT的操作示意图:
39 ~ 32 累加器src 保护位 0﹤SHIFT≤15时 C 39~32 累加器src 保护位 C -16≤ SHIFT<0时 C SHIFT=0时

105 算术移位指令SFTA src,SHIFT的操作示意图 :
39 累加器src 0﹤SHIFT≤15时 C

106 算术移位指令SFTA src,SHIFT的操作示意图 :
39 累加器src C -16≤ SHIFT<0,且SXM=0 累加器 39 Src C -16≤ SHIFT<0,且SXM=1

107 (1)当SXM=1时,执行算术移位指令,结果进行符号扩展。SFTA A, -5, B
例3-22 移位指令举例。 (1)当SXM=1时,执行算术移位指令,结果进行符号扩展。SFTA A, -5, B 指令执行前 FF A B 1 C x SXM 指令执行后 FF FF FC3B 2802 A T 1 C SXM 指令执行后 FF FF FC3B 2802 A T 1 C SXM 指令执行前 FF A B 1 C x SXM (2)当SXM=0时,执行算术移位指令,结果不进行符号扩展。SFTA A, -5, B 指令执行前 FF A B C x SXM 指令执行后 FF 07 FC3B 2802 A T C 1 SXM

108 例3-22 移位指令举例。 (3)执行逻辑移位指令的情况。 SFTL A, -5, B 指令执行前 FF 8765 0055
C 指令执行后 FF 00 043B 2802 A T C 1

109 3. 测试指令 (共5条) 测试指令通常和条件转移等指令结合,实现程序转移,或用于检测数据的正、负极性,数据的位状态等。 测试指令 操作
3. 测试指令 (共5条) 测试指令通常和条件转移等指令结合,实现程序转移,或用于检测数据的正、负极性,数据的位状态等。 测试指令 操作 字数 周期数 BIT Xmem, BITC TC = Xmem(15 – BITC) 测试Xmem中指定的某位 1 BITF Smem, #lk TC= (Smem && #lk) , 非0则1,测试Smem中指定的某些位 2 BITT Smem TC = Smem(15 – T(3~0)) 测试由T指定的位 CMPM Smem, #lk TC = (Smem == #lk) ,等则1, 比较Smem与长立即数是否相等 CMPR CC, ARx ARx与AR0进行比较

110 3.3 C54x系列DSP的指令系统 3. 测试指令举例 例3-23 检测数据单元0060h中的数据低8位是否为全0。
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.

111 控制程序转移类指令的功能是改变程序执行的顺序,可划分为6类:
3.3 C54x系列DSP的指令系统 3.3.4 控制程序转移指令(共34条) 控制程序转移类指令的功能是改变程序执行的顺序,可划分为6类: 跳转指令 (共6条) 调用和返回指令(共11条) 中断指令 (共2条) 堆栈操作指令(共5条) 重复指令(共3条) 其它程序控制指令(共7条)

112 1. 跳转指令 (共6条)无条件转移和条件转移 第3章 汇编语言指令系统 跳转指 令分类 指令 操作 字数 周期数 近程无 条件转移
第3章 汇编语言指令系统 1. 跳转指令 (共6条)无条件转移和条件转移 跳转指 令分类 指令 操作 字数 周期数 近程无 条件转移 B[D] pmad PC = pmad(15~0) 2 4/[2] BACC[D] src PC = src(15~0) 1 6/[4] 远程无 FB[D] extpmad PC = pmad(15~0), XPC = pmad(22~16) FBACC[D] src PC = src(15~0), XPC = src(22~16) 近程条 件转移 BC[D] pmad, cond [ , cond [ , cond ] ] 若条件(cond(s))满足, 则PC = pmad(15~0) 5/3/ /[3] BANZ[D] pmad, Sind 若(Sind≠0) 则 4/2/ /[2]

113 条件转移指令的条件如表所示: 条件 指令中 的表示 说明 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 累加器A大于0 (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无溢出

114 条件组合的规律如下:(两组之间是或的关系)
1. 跳转指令 条件组合的规律如下:(两组之间是或的关系) 第1组 第2组 A类 B类 C类 EQ OV TC C BIO NEQ NOV NTC NC NBIO LT LEQ GT GEQ 第1组最多可选2个条件,且必须针对同一个累加器。 第2组最多可选3个条件。每组每类中只能选择一个条件。 在一条指令中,2~3个条件是与的关系;或关系用多条指令实现。

115 例3-24 检测数据单元0060h中的数据若为负数,则转移至LP1位置。
跳转指令举例 例3-24 检测数据单元0060h中的数据若为负数,则转移至LP1位置。 实现的程序段如下: STM #0060h,AR2; 赋地址指针0060h→AR2 STM #0,T ; 0→T,令T(3~0)=0 BITT *AR2 ; 检测0060h的D15位 BC LP1,TC ; 当0060h的D15位为1 时转移至LP1 BITT Smem; TC = Smem(15 – T(3~0)) 测试由T指定的位

116 例3-25 编程,将数据单元0060h~006Fh清0 跳转指令举例 实现的程序段如下:
STM #0060h,AR1 ;赋地址指针060h→AR1 STM #15,AR2 ;赋循环次数15→AR2 LD #0,A ;A清0 LOOP1: STL A,*AR1+ ;(A)→AR1所指出的数据 单元,(AR1)+1→AR1 BANZ LOOP1,*AR2- ;AR2的内容非0则循环至LOOP1, AR2的内容减1

117 跳转指令说明 无延迟转移和有延迟转移 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)

118 2. 调用和返回指令 (共11条) 指令 操作 近程无条件调用 CALA[D] src
调用指令分类 指令 操作 周期数 近程无条件调用 CALA[D] src – –SP, PC + 1[3] → TOS, PC = src(15~0) 1 6/4 CALL[D] pmad – –SP, PC + 2[4] → TOS, PC=pmad(15~0) 2 4/2 远程无条件调用 FCALA[D] src – –SP, PC + 1[3] → TOS, – –SP, XPC → TOS , PC = src(15~0), XPC = src(22~16) FCALL[D] extpmad – –SP, PC + 2[4] → TOS, – –SP, XPC → TOS , PC=pmad(15~0), XPC = pmad(22~16) 近程条件调用 CC[D] pmad, cond [ , cond [ , cond ]] 若(cond(s))满足, 则– –SP, PC + 2[4] → TOS, PC = pmad(15~0) 5/3/ /[3]

119 2. 调用和返回指令 (共11条)续 操作 近程 无条件返回 RET[D] 子程序返回 PC = TOS, ++SP 1 5/[3]
返回指令分类 指令 操作 周期 近程 无条件返回 RET[D] 子程序返回 PC = TOS, ++SP 1 5/[3] RETE[D] 中断返回 PC = TOS, ++SP, INTM = 0 RETF[D] 快速中断返回 PC = RTN, ++SP, 3/[1] 远程 无条件 返回 FRET[D] 子程序返回 XPC = TOS, ++ SP, PC = TOS,++SP 6/[4] FRETE[D] 中断返回 PC = TOS, ++SP, INTM = 0 近程条件返回 RC[D] cond [ , cond [ , cond ] ] 若(cond(s))满足, 则PC = TOS, ++SP 5/3/ /[3]

120 3.3 C54x系列DSP的指令系统 3. 中断指令 (共2条) 指令 操作 字数 周期数 INTR K
(SP)-1→SP, (PC) +1→TOS, PC = IPTR(15~7) + K << 2, INTM = 1,清零IFR相应位 1 3 TRAP K (SP)-1→SP, (PC) +1→TOS, PC = IPTR(15~7) + K << 2

121 3.3 C54x系列DSP的指令系统 4. 堆栈操作指令(共5条) 指令 操作 FRAME K SP = SP + K POPD Smem
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

122 5. 其它程序控制指令(共7条) 指令 操作 IDLE K 省电模式,K=1或2或3 1 4 MAR Smem
字数 周期数 IDLE K 省电模式,K=1或2或3 1 4 MAR Smem 若CMPT = 0,则更新ARx,ARP不变 若CMPT=1且ARx≠AR0, 则更新ARx, ARP = x;若CMPT = 1 且ARx = AR0, 则更新AR(ARP), ARP不变 NOP 空操作 3 RESET 软件复位 RSBX N, SBIT STN (SBIT) = 0,N指出ST0或 ST1, SBIT指出某位,位清0 SSBX N, SBIT STN (SBIT) = 1,N指出ST0或 ST1, SBIT指出某位,位置1 XC n , cond [ , cond [ , cond ] ] 若(cond(s))满足,则执行下 面的n条指令; n = 1或2

123 3.3 C54x系列DSP的指令系统 3.3.5 重复操作指令 (共3条) C54x的重复操作指令共3条 ,包括: 单条指令重复 (共2条)
程序块重复 (共1条)

124 比较:程序块重复指令只有1条,其格式如下: RPTB[D] pmad;0 ≤pmad≤65 535
第3章 汇编语言指令系统 单条指令重复 (共2条) 单条指令重复执行指令 指令 操作 字数 周期数 RPT Smem RC = Smem 1 3 RPT #K RC = #K (8-bit) RPT #lk RC = #lk(16-bit) 2 RPTZ dst, #lk RC = #lk, dst = 0 比较:程序块重复指令只有1条,其格式如下: RPTB[D] pmad;0 ≤pmad≤65 535

125 可以通过重复机制由多周期变为单周期的指令如下:
单条指令重复 可以通过重复机制由多周期变为单周期的指令如下: 指令 说明 周期 FIRS 对称FIR滤波 3 MACD 带延迟的乘法并将结果送累加器 MACP 乘并将结果送累加器 MVDK 数据空间到数据空间的数据传送 2 MVDM 数据空间到MMR的数据传送 MVDP 数据空间到程序空间的数据传送 4 MVKD MVMD MMR到数据空间的数据传送 MVPD 程序空间到数据空间的数据传送 READA 从程序空间到数据空间的数据读 5 WRITA 从数据空间到程序空间的写

126 单条指令重复 例3-27 计算Y=10X1+10X2+……10X100 1) 采用RPT指令,要用106个周期。 第3章 汇编语言指令系统
第3章 汇编语言指令系统 单条指令重复 例 计算Y=10X1+10X2+……10X100 1) 采用RPT指令,要用106个周期。 STM #X1,AR ;2周期 LD #0,A ;1周期 RPT # ;1周期 MAC *AR2+,#10,A ;(A) +((AR2))×10→A, ((AR2))→T,(AR2)+1→AR2, (1+100)周期 STL ;1周期

127 2) 采用BANZ指令,要用604(600-2+6)个周期。
第3章 汇编语言指令系统 单条指令重复 2) 采用BANZ指令,要用604( )个周期。 STM #99,AR1 ;2周期 STM #X1,AR2 ;2周期 LD #0,A ;1周期 LP: MAC *AR2+,#10,A ;2×100周期 BANZ LP,*AR1- ;4×100周期 STL ;1周期 ;2个机器周期(条件假)

128 2. 程序块重复 程序块重复指令只有1条,其格式如下: RPTB[D] pmad;0 ≤pmad≤65 535 块重复计数器BRC
2. 程序块重复 程序块重复指令只有1条,其格式如下: RPTB[D] pmad;0 ≤pmad≤65 535 STM #215, BRC RPTB #TABLE ;卷积算法 STM #16,BK RPTZ A,#15 MAC *AR4+0%,*AR5+0%,A STH A,*AR2+ TABLE: MVDD *AR3+,*AR4+0% 块重复计数器BRC 块重复起始地址RSA 块结束地址REA 用存储器映像寄存器: block-Repeat Start (End) Address register (RSA, REA) 执行操作: ① 1→BRAF(重复块操作标志位在ST1中); ② 若延迟则(PC)+4→RSA;否则 (PC)+ 2→RSA ; ③ pmad → REA; ④ 每执行一遍程序块BRC 减1直至为0,重复结束, BRAF清零。程序重复执行(BRC)+1次

129 3.3.6 并行操作指令(共8条) (13小条) 并行操作指令可分为四类: 并行存储和装载指令(1条) (2小条)
第3章 汇编语言指令系统 3.3.6 并行操作指令(共8条) (13小条) 并行操作指令可分为四类: 并行存储和装载指令(1条) (2小条) 并行装载和乘法指令(2条) (4小条) 并行存储和加/减指令(2条)(2小条) 并行存储和乘法指令(3条) (5小条) 并行操作指令特点: (AR2)= B << (ASM – 16) || A = (AR4) << 16 单字单周期; 都工作在累加器高位(LD); 某些并行指令(ST)与ASM有关; 只能采用Xmem或Ymem寻址。 ST B, *AR2- || LD *AR4+, A

130 Ymem = src << (ASM – 16) || dst = Xmem << 16 1
第3章 汇编语言指令系统 并行存储和装载指令(1条) (2小条) 指令 操作 字数 周期数 ST src, Ymem || LD Xmem, dst Ymem = src << (ASM – 16) || dst = Xmem << 16 1 || LD Xmem, T || T = Xmem If src is equal to dst, the value stored in Ymem is the value of src before the execution.

131 2. 并行装载和乘法指令(2条) (4小条) 第3章 汇编语言指令系统 指令 操作 字数 周期数 LD Xmem, dst
第3章 汇编语言指令系统 2. 并行装载和乘法指令(2条) (4小条) 指令 操作 字数 周期数 LD Xmem, dst || MAC Ymem, dst_ dst = Xmem << 16 || dst_ = dst_ + T * Ymem 1 || MACR Ymem, dst_ || dst_ = rnd(dst_ + T * Ymem) || MAS Ymem, dst_ || dst_ = dst_ – T * Ymem || MASR Ymem, dst_ || dst_ = rnd(dst_ – T * Ymem)

132 Ymem= src<< (ASM–16) || dst = dst_ +Xmem<<16 1
第3章 汇编语言指令系统 3. 并行存储和加/减指令(2条) 指令 操作 字数 周期数 ST src, Ymem ||ADD Xmem, dst Ymem= src<< (ASM–16) || dst = dst_ +Xmem<<16 1 ||SUB Xmem, dst Ymem= src <<(ASM–16) || dst = dst_ ﹣(Xmem<<16)

133 4. 并行存储和乘法指令 (3条) (5小条) 第3章 汇编语言指令系统 指令 操作 字数 周期数 ST src, Ymem
第3章 汇编语言指令系统 4. 并行存储和乘法指令 (3条) (5小条) 指令 操作 字数 周期数 ST src, Ymem || MAC Xmem, dst Ymem = src << (ASM – 16) || dst = dst + T * Xmem 1 || MACR Xmem, dst || dst = rnd(dst + T * Xmem || MAS Xmem, dst || dst = dst – T * Xmem || MASR Xmem, dst || dst = rnd(dst – T * Xmem) || MPY Xmem, dst || dst = T * Xmem

134 (AR2)= B << (ASM – 16) || A = (AR4) << 16
第3章 汇编语言指令系统 3.3.6 并行操作指令 (AR2)= B << (ASM – 16) || A = (AR4) << 16 例 ST B, *AR2- || LD *AR4+, A –4的补码 B <<-20 指令执行前 指令执行前 A C B FF SXM ASM C AR FF AR 数据存储器 01FFH XXXX 0200H A C B FF SXM ASM C AR FF AR 数据存储器 01FFH XXXX 0200H A C B FF SXM ASM C AR FF AR 数据存储器 01FFH XXXX 0200H A FF B FF SXM ASM C AR FE AR 数据存储器 01FFH F842 0200H A FF B FF SXM ASM C AR FE AR 数据存储器 01FFH F842 0200H

135 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.

136 作业 习题3.2, 3.6, 3.7,3.8, 3.11, 3.17, 3.19,3.21


Download ppt "第3章 汇编语言指令系统 在DSP应用中,虽然可以使用C/C++高级语言编程,降低了对编程者的要求,但在一些实时性要求高的场合仍然需要采用汇编编程,以充分利用DSP丰富的硬件资源,发挥它的实时运算能力。 用汇编语言编程,要求编程者对DSP的低层有充分的了解,包括硬件结构、存储器空间模型和I/O口的组织等。同时又要求编程者对指令系统有深刻的了解。"

Similar presentations


Ads by Google