汇编语言程序的开发工具.ppt
《汇编语言程序的开发工具.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序的开发工具.ppt(122页珍藏版)》请在三一办公上搜索。
1、第4章,汇编语言程序的开发工具,知识要点:本章介绍了TMS320C54x软件开发流程、汇编语言程序的编写、编译和链接过程,重点介绍了COFF段的一般概念、汇编器和链接器处理段的方法以及程序的重定位方法等。,4.1 TMS320C54x软件开发流程,C54x的应用软件开发主要完成以下的工作:首先是选择编程语言编写源程序。C54x提供两种编程语言:汇编语言和C/C+语言。当源程序编写好后,选择开发环境,C54x提供了两种开发环境。一种是非集成开发环境,如图。另一种是集成开发环境,简称CCS。CCS在Windows操作系统下运行,它集成了非集成开发环境的所有功能,并扩展了许多其他的功能。在后面的章节
2、中会有介绍。,如果源程序是C/C+语言,需调用C54x的C编译器将其编译成汇编语言,并送入C54x的汇编器进行汇编。对于用汇编语言编写的程序则直接送给汇编器进行汇编,汇编后产生COFF格式的目标文件,再用链接器进行链接,生成在C54x可执行的COFF格式的目标代码,并利用调试工具对可执行的目标代码进行调试。,对C54x应用程序的开发提供以下几个开发调试工具:C/汇编语言源码调试器与软件仿真器、评价模块、软件开发系统、软件模拟器等开发工具配合使用。软件仿真模拟器 集成开发环境CCS DSK 软件开发系统SWDS 可扩展的开发系统仿真器(XDS510)评价模块(EVM板),4.2 汇编语言程序的编
3、辑、汇编和链接过程,汇编语言源程序可以在任何一种文本编辑器中进行。当汇编语言源程序完成后,还必须经过汇编和链接后才能进行。下图给出了汇编语言程序的编辑、汇编和链接过程:,编辑 利用各种文本编辑器,如记事本、WORD、EDIT等,可编写汇编语言源程序。汇编 当汇编语言源程序编写好以后,可利用C54x的汇编器ASM500,对一个或多个源程序进行汇编,生成.lst文件和.obj文件。常用汇编命令为:asm500%1-s-l-x,链接 链接就是利用C54x的链接器LNK500,根据链接器命令文件(.cmd)对已汇编过的一个或多个目标文件(.obj)进行链接,生成存储器映像文件(.map)和输出文件(.
4、out)。常用链接命令为 lnk500%1.cmd,调试 对输出文件(.out)调试可以采用多种手段,现介绍如下:软件仿真器进行调试 硬件仿真器进行调试 评价模块进行调试 固化用户程序 调试完成后,利用HEX500格式转换器对ROM编程,或对EPROM编程,最后安装到用户的的应用系统中。,4.3 COFF的一般概念,汇编器和链接器生成的目标文件,是一个可以由C54x器件执行的文件。这些目标文件的格式称为公共目标文件格式(Common Object File Format,缩写为COFF)。COFF采用代码段和数据段的形式,因此便于模块化的编程。,4.3.1 COFF文件的基本单元,COFF文件
5、有3种类型:COFF0、COFF1、COFF2。每种类型的COFF文件的标题格式都有所不同,但数据部分却是相同的。段是COFF文件中最重要的概念。每个目标文件都分成若干段。段是在存储器图中占据相邻空间的代码或数据块。,所有的COFF目标文件都包含以下3种形式段:.text段,通常包含可执行代码;.data段,通常包含初始化数据;.bss段,通常为未初始化变量保留存储空间。此外,汇编器和链接器可以建立、命名和链接自定义段。这种自定义段是程序员自已定义的段,使用起来与.data、.text、及.bss段类似。它的好处是在目标文件中与.data、.text、及.bss分开汇编,链接时作为一个单独部分
6、分配到存储器中。,COFF目标文件有以下两种基本类型的段。初始化段 初始化段中包含有数据或程序代码。包括:.text段是已初始化段;.data段是已初始化段;.sect汇编器伪指令建立的自定义段也是已初始化段。,未初始化段 在存储空间中,它为未初始化数据保留存储空间。包括:.bss段未初始化段;.usect汇编命令建立的自定义段也是未初始化段。,链接器的一个任务就是分配存储单元,即把各个段重新定位到目标存储器中,如下图:,链接器的功能之一是将目标文件中的段重新定位到目标系统的存储器中,该功能称为定位或分配。大多数系统都包含有几种存储器,通过对各个段的重新定位,可以使目标存储器得到更加有效的利用
7、。,4.3.2 汇编器对段的处理,汇编器对段的处理是通过段伪指令来区别各个段,并将段名相同的语句汇编在一起。汇编器有5条命令可识别汇编语言程序的各个部分。这5条命令是:.bss(未初始化段).usect(未初始化段).text(已初始化段).data(已初始化段).sect(已初始化段),未初始化段.bss和.usect命令生成未初始化段。未初始化段就是C54x存储器中的保留空间,通常将它们定位到RAM区。在目标文件中,这些段没有确切的内容;在程序运行时,可以利用这些存储空间存放变量。这两条命令句法如下:.bss符号,字数.usect“段名”,字数,符号对应于保留的存储空间第一个字的变量名称,
8、可让其它段引用,也可以定义为全局符号;字数表示在.bss段或标有名字的段中保留多少个存储单元;段名程序员为自定义未初始化段起的名字。已初始化段.text、.data和.sect命令生成已初始化段。已初始化段中包含有可执行代码或初始化数据。这些段中的内容都在目标文件中,当加载程序时再放到C54x的存储器中。每一个已初始化段都是可以重新定位的,并且可以引用其他段中所定义的符号。,3条初始化命令的句法如下:.text段起点.data段起点 sect“段名”,段起点 其中,段起点是任选项。如果选用,它就是为段计数器(SPC)定义的一个起始值。如果默认,则SPC从0开始。当汇编器遇到.text、.dat
9、a和.sect命令时,将停止对当前段的汇编,然后将紧接着的程序代码或数据汇编到指定段中,直到再遇到另一条.text、.data和.sect命令为止。,当汇编器遇到.bss或.usect命令时,并不结束当前段的汇编,只是暂时从当前段脱离出来,并开始对新的段进行汇编。段的构成要经过一个反复的过程。,命名段 命名段由用户指定,与默认的.text,.data和.bss段的使用相同,但它们被分开汇编。例如,重复使用.text段建成单个.text段,在链接时,这个.text段被作为单个单元定位。,假如不希望一部分可执行代码和.text段分配在一起,可将它们汇编进一个命名段,这样就可定位在与.text段不同
10、的地方,也可将初始化的数据汇编到与.data段不同的地方,或者将未初始化的变量保留在与.bss段不同的位置。此时,可用以下两个产生命名段的伪指令:.usect伪指令产生类似.bss段,为变量在RAM中保留存储空间。.sect伪指令产生类似.text和.data段,可以包含代码和数据。.sect伪指令产生地址可重新定位的命名段。,这两个伪指令的使用句法为:符号.usect“段名”,字数.sect“段名”可以产生多达32767不同的命名段。不同的伪指令不能使用相同的名字,也就是说,不能用.usect 创建命名段,然后用.sect 再创建一个相同名字的段。,子段 子段是较大段中的小段。链接器可以像处
11、理段一样处理子段。子段结构可用来对存储器间进行更紧凑的控制,可以使存储器图更加紧密。子段的命名的句法为:基段名:子段名 例如,若要在.text段内建立一个称之为_func的子段,可以用如下的命令:.sect“.text:_func”,段程序计数器(SPC)汇编器为每个段都安排了一个单独的程序计数器段程序计数器,简称SPC。SPC表示一个程序代码或数据段内当前的地址。开始时汇编器将每个SPC置0。当汇编器将程序代码或数据加到一个段内时,相应的SPC就增加。如果再继续对某个段汇编,则相应的SPC就在先前的数值上继续增加。链接器在链接时要对每个段重新定位。,下例列出的是一个汇编语言程序汇编后的.ls
12、t文件。.lst文件由4个部分组成,即 第一部分(Field1):源程序行号 第二部分(Field2):段程序计数器 第三部分(Field3):目标代码 第四部分(Field4):源程序,50000.data60000 0044 coeff.word044h,055h,066h0001 00550002 0066100000.bss buffer,8140003 0456 prt.word0456h180000.text190000100dadd:LD0Dh,A200001f010aloop:SUB#1,A00020001210003f842BCaloop,AGEQ25000400010004
13、.data000400ccivals.word0CCh,0DDh,0EEh000500dd000600ee,300000var2.usect“newvars”,2310001inbuf.usect“newvars”,8350005 text360005110a mpy:LD0Ah,B370006f166 mloop:MPY#0Ah,B0007000a380008f86800090006420000.sect“vectors”4300000044.word 044h,088h4400010088,在此例中,共建立了5个段:.text段内有10个字的程序代码.data段内有7个字的数据 vecto
14、rs是一个用.sect命令生成的自定义段,段内有2个字的已初始化数据.bss在存储器中为变量保留8个存储单元.newvars是一个用.usect命令建立的自定义段,它在存储器中为变量保留10个存储单元。,在此例中 建立的5个段如图。,4.3.3 链接器对段的处理,链接器是开发TMS320C54x器件必不可少的开发工具,它对段处理时有两个任务:其一是将一个或多个COFF目标文件中的各种段作为链接器的输入段,经链接后在一个执行的COFF输出模块中建立各个输出段;其二是为各个输出段选定存储器地址。,链接器有2条伪指令支持上述任务。MEMORY伪指令。用来定义目标系统的存储器分配空间,包括对存储器各部
15、分命名,及规定它们的起始地址和长度。SECTIONS伪指令。它告诉连接器如何将输入段组合成输出段,及将输出段放在存储器中的什么位置。,默认的存储器分配 书图说明了两个文件的链接过程。,4.3.3 两个文件的链接过程,图中,链接器对目标文件file1.obj和file2.obj进行链接。每个目标文件中,都有.text、.data和.bss段,此外还有自定义段。链接器将两个文件的.text段组合在一起,以形成一个.text段,然后再将两个文件的.data段和.bss段以及最后自定义段组合在一起。,段放入存储器空间 图说明了链接器结合段的默认方法,有时希望采用其他的结合方法。例如,可能不希望将所有的
16、.text段结合在一起形成单个的.text段,或者希望将命名段放在.data的前面。若希望将段放在指定类型的存储器中,此时可采用MEMORY和SECTIONS伪指令。,4.3.4 链接器对程序的重新定位,链接器重新定位 汇编器处理每个段都是从地址0开始,而所有需要重新定位的符号(标号)在段内都是相对于地址0的。事实上,所有段都不可能从存储器中地址0单元开始,因此链接器必须通过以下方法对各个段进行重新定位:,将各个段定位到存储器空间中,这样一来每个段都能从一个恰当的地址开始;将符号变量调整到相对于新的段地址的位置;将引用调整到重新定位后的符号,这些符号反映了调整后的新符号值。,汇编器在需要引用重
17、新定位的符号处都留了一个重定位入口。链接器在对符号重新定位时,利用这些入口修正对符号的引用值。下面举例说明:,1.refX;符号X、Y、Z需要重新定位2.refZ;X、Z是在另一个模块中定义的30000.text;Y是在这个模块的.text段定义的40000 F073BY;产生一个重新定位入口 0001 0006;Y的值为6,X和Z值为050002 F073BZ;产生一个重新定位入口 0003 0000!60004 F020LD#X,A;产生一个重新定位入口 0005 0000!70006 F7E0Y:RESET,假设链接时X重新定位地址7100H,.text段重新定位到从地址7200H开始,
18、那么Y的重新定位值为7204H。链接器利用重定位入口,对目标文件中的两次引用进行修正。f073 B Y 变成 f0730004 7204 f020 LD#X,A 变成 f020 0000 7100 运行时间重新定位 有时,希望将代码装入存储器的一个地方,而在另一个地方运行。,例如一些关键的执行代码必须装在系统的ROM中,但希望在较快的RAM中运行,链接器提供了一个处理该问题的简单方法,利用SECTIONS伪指令选项可让链接器定位两次,第一次使用装入关键字设置装入地址,再使用运行关键字设置它的运行地址。如果只为段提供一次定位,则该段将只定位一次,并且装入和运行地址相同。未初始化的段(例如.bss
19、)不能装入,所以它仅有的有意义的地址为运行地址,链接器只对没有初始化的段定位一次。,4.3.5 程序装入,链接器产生可执行的COFF目标文件。可执行的目标文件模块与链接器输入的目标文件具有相同的COFF格式,但在可执行的目标文件中,对段进行结合并在目标存储器中进行重新定位。为了运行程序,在可执行模块中的数据必须传输或装入目标系统存储器。,有两种方法可以用来装入程序,选哪种方法取决于执行环境。TMS320C54x调试工具。包括软件模拟器、XDS仿真器和集成系统CCS。它们都具有内部装入器,包含调用LOAD命令。装入器读取可执行文件,将程序复制到目标系统的存储器中。采用Hex转换工具。例如Hex5
20、00,将可执行COFF目标模块转换成几种其他目标格式文件,然后将转换后的文件写入EPROM。,4.3.6 COFF文件中的符号,COFF文件中有一个符号表,主要用来存储程序中有关符号的消息,链接时对符号进行重新定位要用到该表,调试程序也要用到它。,外部符号 外部符号,是在一个模块中定义、又可以在另一个模块中引用的符号。可以用伪指令.def、.ref或.global来定义某些符号为外部符号。.def指令在当前模块中定义,并可在别的模块中使用的符号.ref指令在当前模块中使用在别的模块中定义的符号.global指令可以是上面的任何一种情况,例:以下的代码段说明上面的定义 x:ADD#56h,A B
21、y.def x.ref y 汇编时,汇编器把x和y都放在目标文件的符号表中。当这个文件与其它目标文件链接时,遇到x,就定义了其它文件不能识别的x,同样遇到符号y时,链接器就检查其他文件对y的定义。总之链接器必须使所引用的符号与相应的定义相匹配。,符号表 每当遇到一个外部符号,汇编器都将符号表中产生一个条目。汇编器还产生一个指到每段的专门符号,链接器使用这些符号来对其他符号重新定位。,4.4 源程序的汇编,汇编器的作用是将汇编语言源程序转换成机器语言目标文件。这些目标文件都是公共目标文件格式(COFF)。汇编语言源程序文件包括汇编命令、汇编语言指令和宏指令。汇编命令用来控制汇编的过程,包括列表格
22、式、符号定义和将源代码放入块的方式等。,汇编器包括如下功能:将汇编语言源程序汇编成一个可重新定 位的目标文件;根据需要,可以生成一个列表文件,并 对该列表进行控制;将程序代码分成若干个段,每个段的目 标代码都有一个SPC管理;,定义和引用全局符号,如果需要可以在 列表文件后面附加一张交叉引用表;对条件程序块进行汇编;支持宏功能,允许定义宏命令;为每个目标代码块设置一个程序计数器 SPC。,4.4.1 汇编程序的运行,C54x的汇编程序名为asm500.exe。要运行汇编程序,可输入如下命令:asm500 input file object file listing file-optionsin
23、put file汇编源文件名,默认扩展名.asm。object file汇编程序生成的目标文件。.objlisting file 汇编程序生成的列表文件。.lst-options 汇编器使用的各种选项,表,4.4.2 汇编时的列表文件,汇编器对源程序汇编时,如果采用-l选项,汇编后将产生一个列表文件。列表文件中包括源程序语句和目标代码。下面是一个列表文件的例子,用来说明它的各部分的内容。,.global RESET,INT0,INT1,INT2.global TINT,RINT,XINT,USER.global ISR0,ISR1,ISR2.global time,rcv,xmt,proc I
24、nitmac.macro*initialize macro SSBX OVM LD#0,DP LD#7,ARP LD#037h,A RSBX INTM.endm*复位中断向量*000000.sect“reset”000000 F073 RESET:B init 000001 0008+,000002 F073 INT0:B ISR0 000003 0000!000004 F073 INT2:B ISR1 000005 0000!000006 F073 INT2:B ISR2 000007 0000!22 23*000000.sect“ints”000000 F073 TINT B time 0
25、00001 0000!000002 F073 XINT B rcv 000003 0000!000004 F073 XINT B xmt 000005 0000!000006 F073 USER B proc 000007 0000!29*30*初始化处理器31*,000008 init:initmac1*initialize macro1000008F7B9SSBXOVM1000009EA00LD#0,DP100000aF4A7LD#7,ARP100000bE837LD#37H,A100000cF6BBRSBXINTM,行号,SPC,目标代码,源程序语句,如例所示,列表文件可以分成4个部分。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序 开发 工具
链接地址:https://www.31ppt.com/p-6170998.html