1 / 133

第 3 章 汇编语言指令系统

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

waylon
Download Presentation

第 3 章 汇编语言指令系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. 第3章 汇编语言指令系统 C54x 指令集包括: 本章介绍C54x DSP的汇编语言指令系统。与其它CPU的指令集相同,汇编语言指令又称为硬指令,它们在汇编和连接后形成可执行的机器码,供DSP进行运算和其它操作。 汇编语言指令 汇编伪指令 宏指令 3.1 C54x汇编语言指令集介绍

  4. 第3章 汇编语言指令系统 指令系统中采用的符号和缩写如下列表中所示 BIT Xmem, BITC 3.1.1 指令系统中的符号、缩写及操作符

  5. 第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符(续)

  6. 第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符(续)

  7. 第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符(续)

  8. 第3章 汇编语言指令系统 XC n, cond [, cond 􀀀[, cond] ] RSBX N, SBIT 3.1.1 指令系统中的符号、缩写及操作符(续)

  9. 第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符(续)

  10. 第3章 汇编语言指令系统 RSBX N, SBIT 3.1.1 指令系统中的符号、缩写及操作符(续)

  11. 第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符(续) CMPS指令

  12. 第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符(续)

  13. 第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 • 指令系统中的运算符号及优先级如下列表中所示

  14. 第3章 汇编语言指令系统 3.1.1 指令系统中的符号、缩写及操作符 • 指令系统中的运算符号及优先级如下列表中所示

  15. 第3章 汇编语言指令系统 本节以LD装载指令为例,说明指令的格式和其它一些有用信息。 汇编语法 操作数 指令代码 执行 状态位 说明 指令字长 周期数 3.1.2 汇编语言指令举例 (1)LD Smem, dst (2)LD Xmem, SHFT, dst (3)LD #lk [, SHFT ], dst

  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.1.2 汇编语言指令举例: LD命令

  23. 第3章 汇编语言指令系统 3.2 寻址方式 C54x的寻址方式共有下列7种: • (1)立即寻址 • (2)绝对寻址 • (3)累加器寻址 • (4)直接寻址 • (5)间接寻址 • (6)存储器映像寄存器寻址 • (7)堆栈寻址

  24. 第3章 汇编语言指令系统 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

  25. 第3章 汇编语言指令系统 3.2.1 立即寻址 可使用立即寻址的指令及立即数的位数如下表所示: FRAME: Stack Pointer Immediate Offset; Syntax: FRAME K

  26. 第3章 汇编语言指令系统 第3章 汇编语言指令系统 3.2.2 绝对寻址 绝对寻址有下列4种类型 : • 数据存储器(dmad)寻址 • 程序存储器(pmad)寻址 • I/O端口(PA)寻址 • *(lk)寻址

  27. 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 pmad→PAR, (Smem)×(Pmem addressed by PAR) +(src)→src, (Smem)→T, (Smem)→Smem+1, If (RC)≠0, (PAR)+1→PAR,

  28. 第3章 汇编语言指令系统 3.2.2 绝对寻址

  29. 第3章 汇编语言指令系统 3.2.3 累加器寻址 有两条指令采用这种寻址方式: A→PAR , (Smem)(Pmem addressed by PAR), If (RC)≠0, (RC)–1→RC , (PAR)+1→PAR

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

  31. 第3章 汇编语言指令系统 3.2.4 直接寻址 直接寻址是指利用指令中的地址偏移量dma与数据页指针DP或堆栈指针SP组合,找到数据空间中的一个16位地址的方式。 指令代码格式如下所示:

  32. 第3章 汇编语言指令系统 3.2.4 直接寻址 • CPL=0时 高9位 低7位

  33. 第3章 汇编语言指令系统 16位SP+dmad dmad 16位堆栈指针SP 堆栈指针SP 3.2.4 直接寻址 • CPL=1时 SP+dmad 16位数据 存储器地址 低7位

  34. 16位数据 存储器地址 @60h DP 0000 00011110 0000 0 1 E 0 h 第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 @常省略。

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

  36. 3.2.5 间接寻址 • 单操作数寻址 地址存放情况及地址调整功能共16种:

  37. 3.2.5 间接寻址 • 单操作数寻址

  38. 3.2.5 间接寻址 $不用于MMR • 单操作数寻址

  39. 3.2.5 间接寻址 • 单操作数寻址: 单操作数寻址结构图如下所示.

  40. 第3章 汇编语言指令系统 3.2.5 间接寻址 • 位反向寻址 位反向寻址是专门为快速傅立叶变换FFT而设计的。

  41. 第3章 汇编语言指令系统 3.2.5 间接寻址 • 位反向寻址:4位二进制数的原始地址与位反向地址的对应关系如下表所示:

  42. 第3章 汇编语言指令系统 3.2.5 间接寻址 • 位反向寻址

  43. 第3章 汇编语言指令系统 循环寻址 • 在循环寻址中,有下列几个关键的参量: • 循环缓冲区的长度R:在编程中,用户应将R值赋给循环缓冲区长度寄存器BK。 • 循环缓冲区的基地址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 间接寻址

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

  45. 第3章 汇编语言指令系统 循环寻址的算法: If 0  偏移量+步长 <BK; 偏移量=偏移量+步长; Elseif 偏移量+步长BK; 偏移量=偏移量+步长-BK; Elseif 偏移量+步长< 0; 偏移量=偏移量+步长+BK。 3.2.5 间接寻址 • 循环寻址 算法如下:

  46. 第3章 汇编语言指令系统 3.2.5 间接寻址 ②双操作数寻址 双操作数寻址结构图如下所示:

  47. 3.2.5 间接寻址 ②双操作数寻址 双操作数寻址有4种地址存放情况和地址调整功能 :

  48. 第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 ;

  49. 第3章 汇编语言指令系统 3.2.6 存储器映像寄存器寻址 存储器映像寄存器寻址是一种直接访问存储器映像寄存器MMR的方式,可以用来修改MMR的值。 有8条指令可以使用存储器映像寄存器寻址:

  50. 第3章 汇编语言指令系统 3.2.6 存储器映像寄存器寻址 MMRx: AR0–AR7, SP MMRy: AR0–AR7, SP

More Related