第4章 TMS320C55x汇编语言编程.ppt
《第4章 TMS320C55x汇编语言编程.ppt》由会员分享,可在线阅读,更多相关《第4章 TMS320C55x汇编语言编程.ppt(121页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、DSP原理与应用,第5章 TMS320C55x汇编语言编程,刘忠国:电话:18764171197 ; 微信: jnliuzg 山东大学生物医学工程,1,任课教师:刘忠国网站: http:/ http:/TMS320C55x Assembly Language Tools Users Guide (SPRU280H, 2004年) (SPRU280G, 2003年: lnk55命令在H版本无介绍)TMS320C55x DSP Mnemonic Instruction Set Reference Guide (SPRU374G, 2002年),2,5.1 TMS320C55x软件开发流程5.2 T
2、MS320C55x目标文件格式5.3 TMS320C55x汇编器5.4 TMS320C55x汇编伪指令5.5 TMS320C55x汇编语言源文件的书写格式5.6 TMS320C55x链接器5.7 一个完整的TMS320C55x汇编程序,第5章TMS320C55x汇编语言编程,3,5.1 TMS320C55x软件开发流程,5.1.1 软件开发流程,编程语言汇编语言 编程过程复杂,但程序执行效率高C/C+语言 编程容易,但程序执行效率不如汇编语言软件开发环境集成开发环境CCS(Code Composer Studio)(第3章)非集成开发环境(本章介绍),4,5.1.1 软件开发流程,非集成开发环
3、境下,C55x的软件开发流程和所用工具与CCS下是一样的。因此本章有关内容也是学习CCS的基础。两个环境的不同在于: CCS把有关开发工具集成在一个Window界面下使用,使用更方便 CCS增加了一些新的开发工具,功能更强大,5,源程序(.C或.CPP),源程序(.asm),目标文件(.obj),库文件(.lib),可执行输出文件(.out),可脱机运行的执行程序(.hex),6,图5-1 非集成开发环境下C55x软件开发流程图,采用C/C+语言或汇编语言编写源文件(.c或.asm); 经C/C+编译器、汇编器生成COFF格式的目标文件(.obj),再用链接器进行链接,生成在C55x上可执行的
4、目标代码(.out);然后利用调试工具(软件仿真器simulator或硬件仿真器emulator)对可执行目标代码进行仿真和调试。当调试完成后, 通过Hex代码转换工具, 将调试后的可执行目标代码(.out)转换成EPROM编程器能接受的代码(.hex); 并将该代码固化到EPROM中或加载到用户的应用系统中, 以便DSP目标系统脱离计算机单独运行。,非集成开发环境下软件开发的流程图,7,5.1.2 软件开发工具,代码生成工具源代码编辑器 采用汇编语言或C/C+语言编写的源程序均为文本文件,可以在任何一种文本编辑器中进行。如WORD、EDIT、TC、Windows操作系统自带的笔记本等C/C+
5、编译器 用来将C/C+语言源程序(.C或.CPP)自动编译为C55x的汇编语言源程序(.asm)。,8,5.1.2 软件开发工具,汇编器 用来将汇编语言源文件(.asm)汇编成机器语言COFF目标文件(.obj)。链接器将汇编生成的、可重新定位的COFF目标模块(.obj)组合成一个可执行的COFF目标模块(.out)。文档管理器 允许用户将一组文件(源文件或目标文件)集中为一个文档文件库 。,9,5.1.2 软件开发工具,建库实用程序 用来建立用户自己使用的、并用C/C+语言编写的支持运行的库函数。十六进制转换程序 可以很方便地将COFF目标文件(.out)转换成TI、Intel、Motor
6、ola等公司的目标文件格式(.hex) 。绝对制表程序 将链接后的目标文件作为输入, 生成.abs输出文件。 交叉引用制表程序 利用目标文件生成一个交叉引用清单,列出链接的源文件中的符号以及它们的定义和引用情况。,10,5.1.2 软件开发工具,代码调试工具 软件仿真器(Simulator) 是一种模拟DSP芯片各种功能并在非实时条件下进行软件调试的调试工具,它不需目标硬件支持,只需在计算机上运行硬件仿真器(XDS510) 可用来进行系统级的集成调试,是进行DSP芯片软硬件开发的最佳工具,11,5.2 TMS320C55x目标文件格式,5.2.1 COFF文件的基本单元段5.2.2 汇编器对段
7、的处理5.2.3 链接器对段的处理5.2.4 链接器对程序的重新定位5.2.5 COFF文件中的符号,12,5.2.1 COFF文件的基本单元段,通用目标文件格式COFF: Common Object File Format段(section)是COFF文件的基本单元。一个段是一个占据存储器里连续地址的代码或者数据块, COFF目标文件的每个段都是分开和不同的COFF目标文件通常包括3个默认段,即.text段,通常包含可执行代码.data段,通常包含初始化数据.bss段,通常为未初始化变量保留存储空间,13,一些汇编伪指令可将代码和数据的各个部分与相应的段相联系,图5-2目标文件中的段与目标存
8、储器的关系,14,5.2.2 汇编器对段的处理,汇编器通过段伪指令自动识别各个段,并将段名相同的语句汇编在一起;汇编器有5条伪指令可以识别汇编语言程序的各个不同段:.text、.data、.sect创建初始化段.bss和.usect创建未初始化段.sect与.usect创建自定义段和子段,15,1.未初始化段,未初始化段占用处理器存储空间, 常常分配到RAM;未初始化段在目标文件里无实际内容, 仅用于保留存储空间, 当程序在运行时用这些空间来创建和存储变量;汇编命令.bss和.usect用来创建未初始化数据区域: .bss symbol, size ,blocking flag,alignme
9、nt flagsymbol .usect ”section name”,size ,blocking flag ,alignment flag,size: 为对应段开辟的存储空间大小, 单位为字。,alignment flag: 可选。若是非零值, 该段会在一个长字边界开始。,symbol: 指向.bss或者.usect指令创建的段的第一个字, 对应该存储空间的变量名; 可被其他段引用,被声明为一个全局符号。,section name:段名,16,blocking flag: 可选。若是非零值, 汇编器会连续分配字节空间, 这些区域不会超出一页边界, 除非该段大于一页(在这种情况下, 目标文件
10、会在页边界开始),1.未初始化段,每次使用.bss指令,汇编器就在对应的段开辟更多的存储空间每次使用.usect指令,汇编器就在指定的自定义段开辟更多的存储空间.bss和.usect指令不结束当前段的汇编去开始一个新的段,它们仅仅让汇编器暂时退出当前段的编辑.bss和.usect指令可以出现在一个初始化段的任何地方而不会影响该段的内容,17,2.初始化段,初始化段包含可执行代码或者初始化数据; 当程序被装载时, 它们就被放到处理器存储空间里;每个初始化段独立分配空间, 可以引用在其他段定义的标识(symbol), 链接器自动处理这些段间引用;定义初始化段的指令:.text value.data
11、 value .sect ”section name”,value,value表示段指针(SPC)的开始值, 只可以指定一次,必须在段第一次出现时指定。默认SPC从0开始。,当汇编器遇到其中一个指令就停止当前段的汇编(就好像一个当前段结束命令), 而将后面的代码汇编到另外指定的段, 直到遇到另一个.text、.data或者.sect指令。,18,3.自定义段,.usect 创建像.bss段那样的段,这些段为变量在RAM开辟存储空间。.sect创建像.text和.data段那样包含代码和数据的段,可以创建可重分配地址的自定义段。用户可以创建多达32767个自定义段,段名可以多至200个字符。每次
12、使用这两个指令可以用不同的section name来创建不同的段,如果用一个已经使用的section name,那么汇编器将代码和数据都汇编到同一个段。,19,4.子段,子段是更大的段中的较小的段, 链接器可以像段一样操作它;子段让用户可以更好的控制存储器映射;可用.sect或者.usect指令来创建子段,子段名的格式为: section name: subsection name同一个段中的子段可以独自分配地址,也可以一起分配存储空间。,例,在段.text中创建一个_func子段如下: .sect “text:_func” 用户可以为其单独分配地址, 也可以和.text段的其他部分一起分配地
13、址。,20,5.段指针,汇编器为每个段分配一个程序指针, 这些程序指针称为段指针(SPCs);一个SPC指向一个段的当前地址:初始时, 汇编器设置每个SPC为0;当汇编器在段中填充代码和数据时, SPC跟着增加;如果重新开始汇编一个段, 汇编器会记得该段SPC的原来值, 并继续增加SPC。,21,汇编语言源程序:,.datacoeff .word 011h,022h,033h .bss buffer, 10 prt .word 0123h .textAdd: MOV 0Fh, AC0 Aloop: SUB #1, AC0 BCC Aloop, AC0=#0 .dataivals .word 0
14、AAh, 0BBh, 0CCh,;初始化数据段 ;3组数据放入.data段 ;在.bss段保留10个单元 ;.bss后0123h仍然在.data段 ;初始化文本段 ;2字节(省略,DP直接寻址) ;2字节指令 ;3字节指令,;初始化数据段 ;3组数据放入.data段,22,例5-1 段伪指令的使用-源程序(单独汇总),var2 .usect “newvars”, 1 inbuf .usect “newvars”, 7 .text mpy: MOV 0Ah, AC1 mloop: MOV T3, HI(AC2) MPYK #10, AC1, AC1 BCC mloop, !overfolow(A
15、C1) .sect “vectors” .word 011h, 033h,例5-1 段伪指令的使用-源程序(单独汇总),;建newvars命名段,保留1个单元 ;在newvars段保留7个单元 ;初始化文本段 ;1字指令(省略,DP直接寻址) ;2字节指令 ;3字节指令 ;3字节指令,;建立vectors命名段 ;2组数据放入vectors命名段,23,汇编语言源程序经过汇编后,共建立了5个段:.text段文本段,段内有10个字可执行的程序代码.data段已初始化的数据段,段内有7个字的数据 vectors段用.sect命令生成的命名段,段内有2个字 的初始化数据.bss段未初始化的数据段,在
16、存储器中为变量保留 10个存储单元newvars段用.usect命令建立的未初始化的命名段, 为变量保留8个存储单元,24,例5-1 段伪指令的使用- 段总结,例5-1,段伪指令的使用。,教材中列出的是一个汇编语言程序经汇编后生成的.lst文件,每行包含4个区域:Field 1: 源代码 (源程序)行号Field 2: 段指针SPC(段程序计数器)Field 3: 目标代码(机器码)Field 4: 初始源代码(源程序),25,1 (空行)2 *3 * 汇编一个初始化表到.data段 *4 *5 .data6 coeff .word 011h,022h,033h 7 *8 * 在.bss段中为
17、变量保留空间 *9 *10 .bss buffer,1011 *12 * .bss结束后仍然在.data 段中 *13 *14 prt .word 0123h,26,例5-1, 段伪指令的使用。列表文件(.lst):,ProjectPropertiesCCS BuildC5500 Compiler Advanced Options Assembler Options Generate Assembly Listing Files(al),汇编设置:,000000 000000 0011000001 0022000002 0033,源程序的行号,段程序计数器,目标代码,汇编语言源程序,00000
18、0,000003 0123,15 *16 * 汇编代码到.text段 *17 *18 000000 .text19 000000 A01E add: MOV 0Fh,AC0 ;DP直接寻址20 000002 4210 aloop: SUB #1, AC021 000004 0450 BCC aloop,AC0=#0 000006 FB 22 *23 * 汇编另一个初始化表到.data段24 *25 000004 .data 26 000004 00AA ivals .word 0AAh,0BBh,0CCh 000005 00BB 000006 00CC27 *28 * 为更多的变量定义另一个段
19、 *29 *30 000000 var2 .usect “newvars”,1 31 000001 inbuf .usect “newvars”,7,源程序的行号,段程序计数器,目标代码,汇编语言源程序,27,32 *33 * 汇编更多代码到.text段 *34 *35 000007 .text 36 000007 A114 mpy: MOV 0Ah, AC137 000009 5272 mloop: MOV T3, HI(AC2)38 00000b 1E0A MPYK #10, AC1, AC1 00000d 9039 00000e 0471 BCC mloop,!overfolow(AC1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- tms320c55x 汇编语言 编程
限制150内