1.36k likes | 1.51k Views
第 3 章 汇编语言指令系统. 在 DSP 应用中,虽然可以使用 C/C++ 高级语言编程,降低了对编程者的要求,但在一些实时性要求高的场合仍然需要采用汇编编程,以充分利用 DSP 丰富的硬件资源,发挥它的实时运算能力。 用汇编语言编程,要求编程者对 DSP 的低层有充分的了解,包括硬件结构、存储器空间模型和 I/O 口的组织等。同时又要求编程者对指令系统有深刻的了解。. 第 3 章 汇编语言指令系统. 目录: 3.1 C54x 汇编语言指令集介绍 3.2 寻址方式 3.3 C54x 系列 DSP 的指令系统.
E N D
第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官网
C54x汇编语言源程序指令包括: 汇编语言指令Assembly Language Instructions 汇编伪指令Assembler Directives 宏指令Macro Directives 3.1 C54x汇编语言指令集介绍 本章介绍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.
指令系统中采用的符号和缩写如下列表中所示 BIT Xmem, BITC 3.1 C54x汇编语言指令集介绍 3.1.1 指令系统中的符号、缩写及操作符
第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符(续)
第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符(续)
第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符(续)
第3章 汇编语言指令系统 XC n, cond [, cond [, cond] ] RSBX N, SBIT 3.1.1 指令系统中的符号、缩写及操作符(续)
第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符(续)
第3章 汇编语言指令系统 RSBX N, SBIT 3.1.1 指令系统中的符号、缩写及操作符(续)
第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符(续) CMPS指令
第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 • 指令系统中的运算符号及优先级如下列表中所示
第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 • 指令系统中的运算符号及优先级如下列表中所示
本节以LD装载指令为例,说明指令的格式和其它一些有用信息。本节以LD装载指令为例,说明指令的格式和其它一些有用信息。 汇编语法 操作数 指令代码 执行 状态位 说明 指令字长 周期数 3.1 C54x汇编语言指令集介绍 3.1.2 汇编语言指令举例 (1)LD Smem, dst (2)LD Xmem, SHFT, dst (3)LD #lk [, SHFT ], dst
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 立即寻址 可使用立即寻址的指令及立即数的位数如下表所示: FRAME: Stack Pointer Immediate Offset; Syntax: FRAME K
3.2 寻址方式 3.2.2 绝对寻址 绝对寻址有下列4种类型 : • 数据存储器(dmad)寻址 • 程序存储器(pmad)寻址 • I/O端口(PA)寻址 • *(lk)寻址
3.2.2 绝对寻址 相关指令如下表所示: 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指令功能)
3.2 寻址方式 3.2.2 绝对寻址
3.2 寻址方式 3.2.3 累加器寻址 有两条指令采用这种寻址方式:A(22-0)→PAR , (Smem)(Pmem addressed by PAR), If (RC)≠0, (RC)–1→RC , (PAR)+1→PAR
第3章 汇编语言指令系统 例3-7 程序存储器中有一个常数表格,首地址为TABLE, 长度是10个字。要求把该表格读入首地址为BUFFER的数据存储器区中。实现该功能的程序段如下: LD #TABLE,A ;#TABLE→A STM #BUFFER,AR3 ;#BUFFER→AR3 RPT #9 ;后面一条指令将运行10次 READA *AR3+ ; A →PAR, ((PAR))→(AR3) ; (PAR)+1→PAR, (AR3)+1→AR3 3.2.3 累加器寻址
3.2 寻址方式 3.2.4 直接寻址 直接寻址是指利用指令中的地址偏移量dma与数据页指针DP或堆栈指针SP组合,找到数据空间中的一个16位地址的方式。 指令代码格式如下所示:
3.2 寻址方式 3.2.4 直接寻址 • CPL=0时 高9位 低7位
16位: SP + dmad dmad 16位堆栈指针SP 堆栈指针SP 3.2 寻址方式 3.2.4 直接寻址 • CPL=1时 + 16位数据 存储器地址 低7位
@60h DP 16位数据 存储器地址 0000 00011110 0000 0 1 E 0 h 第3章 汇编语言指令系统 例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 • 3.2.4 直接寻址 @常省略。
间接寻址是指通过两个辅助算术逻辑单元ARAU0、ARAU1及8个辅助寄存器AR0~AR7,间接获得数据存储器地址的方式。间接寻址是指通过两个辅助算术逻辑单元ARAU0、ARAU1及8个辅助寄存器AR0~AR7,间接获得数据存储器地址的方式。 单操作数寻址 LD *AR1, A 3.2.5 间接寻址 双操作数寻址 MAC *AR5+, *AR4+[AR6],A, B
间接寻址是指通过两个辅助算术逻辑单元ARAU0、ARAU1及8个辅助寄存器AR0~AR7,间接获得数据存储器地址的方式。间接寻址是指通过两个辅助算术逻辑单元ARAU0、ARAU1及8个辅助寄存器AR0~AR7,间接获得数据存储器地址的方式。 单操作数寻址 LD *AR1, A 3.2.5 间接寻址 双操作数寻址 MAC *AR5+, *AR4+[AR6],A, B
(1)单操作数间接寻址址LD *AR1, A 单操作数寻址是一条指令中,只有一个存储器操作数(即从存储器中只存取一个操作数),其指令的格式: 3.2.5 间接寻址 其中:15~8位是指令的操作码;第7位I=1,表示指令的寻址方式为间接寻址;6~3位为方式(MOD),定义了间接寻址的类型(表3-4);2~0位定义寻址所使用的辅助寄存器(如AR0~AR7)。
3.2.5 间接寻址 • 单操作数寻址 地址存放情况及地址调整功能共16种:
3.2.5 间接寻址 • 单操作数寻址
$不用于MMR 3.2.5 间接寻址 • 单操作数寻址
3.2.5 间接寻址 • 单操作数寻址: 单操作数寻址结构图如下所示. 操作数 操作 无lk, 写操作地址范围64k
3.2 寻址方式 3.2.5 间接寻址 • 位反向寻址 位反向寻址是专门为快速傅立叶变换FFT而设计的。 例 3-9 求01101110b+00100100b
3.2.5 间接寻址 • 位反向寻址:4位二进制数的原始地址与位反向地址的对应关系如下表所示:
3.2.5 间接寻址 • 位反向寻址
3.2.5 间接寻址 2N﹥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的位置,从而形成了循环寻址。 • 循环寻址 循环寻址示意图如下: EFB EOB
3.2.5 间接寻址 • 在循环寻址中,有下列几个关键的参量: • 循环缓冲区的长度R:在编程中,用户应将R值赋给循环缓冲区长度寄存器BK (circular-buffer size register) 。 • 循环缓冲区的基地址EFB (EFfectiveBase 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位。 循环寻址, 例 *ARx+0%
循环寻址的算法: If 0 index+step<BK; index=index+step; Elseif index+stepBK; index=index+step-BK; Elseif index+step< 0; index=index+step+BK。 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的辅助寄存器。 3.2.5 间接寻址
3.2.5 间接寻址 ②双操作数寻址 双操作数寻址结构图如下所示:
3.2.5 间接寻址 ②双操作数寻址 双操作数寻址有4种地址存放情况和地址调整功能 :
第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 ;