1、Friday,December 02,2022DSP原理及应用1第4章 汇编语言程序开发工具4.1 TMS320C54x软件开发过程 C54x应用软件开发流程 C54x应用软件的开发可在TI公司提供的开发环境中进行,用户可以用C/C+语言或汇编语言编写源文件,经C编译器、汇编器生成COFF格式的目标文件,再用链接器进行链接,生成在C54x上可执行的目标代码,然后利用调试工具对可执行的目标代码进行仿真和调试。当调试完成后,通过Hex代码转换工具,将调试后的可执行目标代码转换成EPROM编程器能接受的代码,并将该代码固化到EPROM中或加载到用户的应用系统中,以便DSP目标系统脱离计算机单独运行。
2、Friday,December 02,2022DSP原理及应用2第4章 汇编语言程序开发工具C C源文件源文件C C编译器编译器汇编汇编源文件源文件汇编器汇编器汇编汇编源文件源文件COFFCOFF目标目标文件文件链接器链接器可执行的可执行的COFFCOFF文件文件宏宏源文件源文件存档存档器器宏库宏库存档器存档器目标目标文件库文件库建库工具建库工具运行时运行时支持库支持库EPROMEPROM编程器编程器交叉引用交叉引用列表器列表器调试工具调试工具TMS320C54xTMS320C54x绝对地址绝对地址列表器列表器HEXHEX代码代码转换工具转换工具Friday,December 02,2022D
3、SP原理及应用3第4章 汇编语言程序开发工具4.2 汇编语言程序的编辑、汇编和链接过程 示意图.asm源文件源文件.obj目标文件目标文件.out输出文件输出文件.cmd链接命链接命令文件令文件.lst列表文件列表文件.map存储器存储器映像文件映像文件-o-m-lFriday,December 02,2022DSP原理及应用4第4章 汇编语言程序开发工具4.3 COFF的一般概念 汇编器和链接器生成的目标文件,是一个可以由C54x器件执行的文件。这些目标文件的格式称之为公共目标文件格式(COFF)。在编写汇编语言程序时,COFF采用代码段和数据段的形式,以便于模块化的编程,使编程和管理变得更
4、加方便。这些代码段和数据段简称为段。汇编器和链接器提供一些伪指令来建立和管理各种各样的段。Friday,December 02,2022DSP原理及应用5第4章 汇编语言程序开发工具4.3.1 COFF文件的基本单元 1.段(sections)是COFF文件中最重要的概念。每个目标文件都分成若干段。段是存储器中占据相邻空间的代码或数据块。一个目标文件中的每个段都是分开的和各不相同的。COFF目标文件都包含以下3种形式的段:.text 段(文本段),通常包含可执行代码;.data 段(数据段),通常包含初始化数据;.bss 段(保留空间段),通常为未初始化变量保留存储空间。Friday,Dece
5、mber 02,2022DSP原理及应用6第4章 汇编语言程序开发工具4.3.1 COFF文件的基本单元 2.段的基本类型 COFF目标文件中的段有两种基本类型。初始化段 未初始化段(1)初始化段 初始化段中包含有数据或程序代码。主要有:.text段已初始化段;.data段已初始化段;.sect段已初始化段,由汇编器伪指令建立 的自定义段。Friday,December 02,2022DSP原理及应用7第4章 汇编语言程序开发工具4.3.1 COFF文件的基本单元 2.段的基本类型 COFF目标文件中的段有两种基本类型。(2)未初始化段 在存储空间中,为未初始化数据保留存储空间。它包括:.bs
6、s段未初始化段;.usect段未初始化段,由汇编命令建立的命 名段(自定义段)。Friday,December 02,2022DSP原理及应用8第4章 汇编语言程序开发工具4.3.1 COFF文件的基本单元 3.段与目标存储器的对应关系 汇编器的任务:在汇编过程中,根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文件。链接器的任务:就是分配存储单元,将目标文件中的段重新定位到目标系统的存储器中,这一过程称为定位或分配。Friday,December 02,2022DSP原理及应用9第4章 汇编语言程序开发工具4.3.2 汇编器对段的处理 汇编器对段的处理是通过段伪指令来区别各个段
7、的,并将段名相同的语句汇编在一起。汇编器有5条伪指令可识别汇编语言程序的各个部分:.bss .usect .text .data .sect定义未初始化段定义未初始化段定义已初始化段定义已初始化段定义已初始化段Friday,December 02,2022DSP原理及应用10第4章 汇编语言程序开发工具4.3.3 链接器对段的处理 链接器是开发C54x器件必不可少的开发工具之一,它对段处理时有2个主要任务:将一个或多个COFF目标文件中的各种段作为链接器的输入段,经链接后在一个执行的COFF输出模块中建立各个输出段;在程序装入时对其重新定位,为各个输出段选定存储器地址。Friday,Decem
8、ber 02,2022DSP原理及应用11第4章 汇编语言程序开发工具4.3.3 链接器对段的处理 链接器有2条伪指令支持上述任务:MEMORY伪指令用来定义目标系统的存储器配置空间,包括对存储器各部分命名,以及规定它们的起始地址和长度。SECTIONS伪指令用来指定链接器将输入段组合成输出段方式,以及输出段在存储器中的位置,也可用于指定子段。若未使用伪指令,则链接器将使用目标处理器默认的方法将段放入存储空间。Friday,December 02,2022DSP原理及应用12第4章 汇编语言程序开发工具4.3.5 程序装入 链接器产生可执行的COFF目标文件。可执行的目标文件模块与链接器输入的
9、目标文件具有相同的COFF格式。为了运行程序,在可执行模块中的数据必须传输或装入目标系统存储器中。可以采用以下方法装入程序:使用调试工具转入程序 C54x的调试工具包括软件模拟器,XDS仿真器和集成系统CCS。它们都具有内部的装入器,调用装入器的LOAD命令,装入器将程序复制到目标系统的存储器中。采用Hex转换工具转入程序 可以使用转换工具Hex500,将可执行COFF目标模块转换成几种其他目标格式文件,然后将转换后的文件通过编程器将程序装(烧)进EPROM。Friday,December 02,2022DSP原理及应用13第4章 汇编语言程序开发工具4.4 源程序的汇编 汇编器的作用是将汇编
10、语言源程序转换成机器语言目标文件。这些目标文件都是公共目标文件格式(COFF)。汇编语言源程序文件可以包含汇编命令、汇编语言指令和宏指令。汇编命令用来控制汇编的过程,包括列表格式、符号定义和将源代码放入块的方式等。Friday,December 02,2022DSP原理及应用14第4章 汇编语言程序开发工具4.4.3 汇编伪指令 汇编器伪指令是汇编语言程序的一个重要内容。用于为程序提供数据,并控制汇编程序如何汇编源程序。将代码和数据汇编进指定的段 为未初始化的变量在存储器中保留空间 控制清单文件是否产生 初始化存储器 汇编条件代码块 定义全局变量 为汇编器指定从中可以获得宏的库 考察符号调试信
11、息 汇编器伪指令可完成以下工作:Friday,December 02,2022DSP原理及应用15第4章 汇编语言程序开发工具4.4.3 汇编伪指令 C54x汇编器共有64条汇编伪指令,根据它们的功能,可以将其分成8类:对各种段进行定义的命令 如.bss、.data、.sect、.text、.usect等。对常数(数据和存储器)进行初始化的命令 如.bes、.byte、.field、.float、.int、.log、.space、.string、.pstring、.xfloat、.xlong、.word等。Friday,December 02,2022DSP原理及应用16第4章 汇编语言程序开
12、发工具4.4.3 汇编伪指令 调整SPC的指令 如.align等。对输出列表文件格式化的命令 如.drlist、.drnolist等。引用其他文件的命令 如copy、.def、.global、.include、.mlib、.ref等。Friday,December 02,2022DSP原理及应用17第4章 汇编语言程序开发工具4.4.3 汇编伪指令 控制条件汇编的命令 如.break、.else、.elseif、.endif、.endloop、.if、.loop等。在汇编时定义符号的命令 如.asg、.endstruct、.equ、.eval、.label、.set、.sruct等。执行其他功
13、能的命令 如.algebraic、.emsg、.end、.mmregs、.mmsg、.newblock、.sblock、.version、.vmsg等。Friday,December 02,2022DSP原理及应用18第4章 汇编语言程序开发工具4.4.4 宏定义和宏调用 C54x汇编器支持宏指令语言。如果程序中有一段程序需要执行多次,就可以把这一段程序定义(宏定义)为一条宏指令,然后在需要重复执行这段程序的地方调用这条宏指令(宏调用)。利用宏指令,可以使源程序变得简短。宏的使用分以下3个步骤:定义宏 在调用宏时,必须首先定义宏;调用宏 在定义宏之后,可在源程序中调用宏;扩展宏 在源程序调用宏
14、指令时,汇编器将对 宏指令进行扩展。Friday,December 02,2022DSP原理及应用19第4章 汇编语言程序开发工具4.4.4 宏定义和宏调用 1.宏定义 在调用宏时,必须首先定义宏。有两种方法定义宏:可在源文件的开始定义宏;在宏库中定义。宏库是由存档器以存档格式产生的文件集。Friday,December 02,2022DSP原理及应用20第4章 汇编语言程序开发工具宏定义的格式:macname .macro parameter 1,parameter n 宏程序语句或宏伪指令 .mexit .endm macname:宏程序名称。.macro:用来说明该语句为宏定义的第一行伪
15、指令。parameters:为任选的替代参数,作为宏指令的操作数。宏程序语句:每次宏调用时要执行的指令或汇编命令。宏伪指令:用于控制宏指令展开的命令。.mexit:相当于一条跳到.endm语句。.endm:结束宏定义。1.宏定义Friday,December 02,2022DSP原理及应用21第4章 汇编语言程序开发工具4.4.4 宏定义和宏调用 2.宏调用 在定义宏之后,可在源程序中使用宏名进行宏调用。宏调用的格式:label:macname parameter 1,parameter n 标号任选项宏指令名位于操作码区任选的替代参数数目应与宏指令定义的相等Friday,December 0
16、2,2022DSP原理及应用22第4章 汇编语言程序开发工具4.4.4 宏定义和宏调用 3.宏扩展 若源程序中调用宏指令,则汇编时就将对宏指令进行扩展。扩展时汇编器先将变量传递给宏参数,按宏定义取代调用宏语句,然后再对源代码进行汇编。Friday,December 02,2022DSP原理及应用23第4章 汇编语言程序开发工具4.4.4 宏定义和宏调用 宏指令与子程序一样,都是重复执行某一段程序,但两者是有区别的,主要区别:宏指令和子程序都可以被多次调用,但是把子程序汇编成目标代码的过程只进行一次,而在用到宏指令的每个地方都要对宏指令中的语句逐条地进行汇编。在调用前,由于子程序不使用参数,故子
17、程序所需要的寄存器等都必须事先设置好;而对于宏指令来说,由于可以使用参数,调用时只要直接代入参数就行了。Friday,December 02,2022DSP原理及应用24第4章 汇编语言程序开发工具【例4.4.7】宏定义、宏调用和宏展开举例 1 *2 *add3 4 *5 *ADDRP=P1+P2+P3 6 7 add3 .macro P1,P2,P3,ADDRP 8 9 LD P1,A 10 ADD P2,A 11 ADD P3,A 12 STL A,ADDRP 13 .endm 14 第714行 定义宏:add3 4个参数:P1 P2 P3 ADDRPFriday,December 02,
18、2022DSP原理及应用25第4章 汇编语言程序开发工具【例4.4.7】宏定义、宏调用和宏展开举例 15 16 .global abc,def,ghi,adr 17 18 000000 add3 abc,def,ghi,adr 1 1 000000 1000!LD abc,A1 000001 0000!ADD def,A1 000002 0000!ADD ghi,A1 000003 8000!STL A,adr 第18行 调用宏:add3 所用变量:abc def ghi adr 共4行 扩展宏 将变量传递给参数 abc P1 def P2 ghi P3 adr ADDRPFriday,Dec
19、ember 02,2022DSP原理及应用26第4章 汇编语言程序开发工具4.5 链接器的使用 链接器的主要任务是根据链接命令文件(.cmd),将一个或多个COFF目标文件链接起来,生成存储器映像文件(.map)和可执行的输出文件(.out)。在链接过程中,链接器将各个目标文件合并,并完成以下工作:将各个段配置到目标系统的存储器。对各个符号和段进行重新定位,并给它们指 定一个最终的地址。解决输入文件之间未定义的外部引用。Friday,December 02,2022DSP原理及应用27第4章 汇编语言程序开发工具4.5.1 链接器的运行 2.链接命令选项 在链接时,连接器通过链接命令选项控制链
20、接操作。链接命令选项可以放在命令行或命令文件中,所有选项前面必须加一短划线“-”。除-l和-i选项外,其他选项的先后顺序并不重要。选项之间可以用空格分开。最常用选项为-m和-o,分别表示输出的地址分配表映像文件名和输出可执行文件名。Friday,December 02,2022DSP原理及应用28第4章 汇编语言程序开发工具4.5.2 链接器命令文件的编写与使用 在链接命令文件中,可使用MEMORY和SECTIONS伪指令,为实际应用指定存储器结构和地址的映射。MEMORY用来指定目标存储器结构。SECTIONS用来控制段的构成与地址分配。Friday,December 02,2022DSP原
21、理及应用29第4章 汇编语言程序开发工具 链接命令文件的内容如下:a.obj /*第一个输入文件名*/b.obj /*第二个输入文件名*/-m prog.map /*指定map文件的选项*/-o prog.out /*指定输出文件的选项*/Friday,December 02,2022DSP原理及应用30第4章 汇编语言程序开发工具4.5.4 MEMORY指令 MEMORY指令用来规定目标存储器的结构。在实际的应用中,目标系统所配置的存储器是各不相同的,通过MEMORY指令,可以进行各种各样的存储器配置。MEMORY指令的句法:MEMORY PAGE0:name 1(attr):origin=
22、constant,length=constant;PAGEn:name n(attr):origin=constant,length=constant;指令字存储区间说明语句书写方式:以大写MEMORY指令字开始;由大括号括起来的存储器区间说明。存储区间:存储页面区间名称 区间属性 起始地址区间长度Friday,December 02,2022DSP原理及应用31第4章 汇编语言程序开发工具4.5.4 MEMORY指令 存储区间说明语句:PAGE:指定存储器空间页面。每一个PAGE代表一个完全独立的地址空间。通常,PAGE 0用于程序存储器;PAGE 1用于数据存储器。若没有规定PAGE,则链
23、接器默认为PAGE 0。Friday,December 02,2022DSP原理及应用32第4章 汇编语言程序开发工具4.5.4 MEMORY指令 存储区间说明语句:name:存储器区间名称。attr:为任选项,用来为命名的存储器区间规 定14个属性。属性选项共有4项:R 规定可以对存储器执行读操作。W 规定可以对存储器执行写操作。X 规定存储器可以装入可执行的程序代码。I 规定可以对存储器进行初始化。Friday,December 02,2022DSP原理及应用33第4章 汇编语言程序开发工具4.5.4 MEMORY指令 存储区间说明语句:origin:用来指定存储区间的起始地址,可简 写为
24、org或o。Length:用来指定存储器空间的长度,可简写 为len或l。fill:为任选项。用来为没有定位输出段的存储 器空单元充填一个数,键入fill或f均可。Friday,December 02,2022DSP原理及应用34第4章 汇编语言程序开发工具4.5.5 SECTIONS指令 用来控制段的构成与地址分配。指令功能:说明如何将输入段组合成输出段;在可执行程序中定义输出段;规定输出段在存储器中的存放位置;允许重新命名输出段。1.SECTIONS指令语法 Friday,December 02,2022DSP原理及应用35第4章 汇编语言程序开发工具SECTIONS指令的句法:SECTI
25、ONS name:property,property,property,name:property,property,property,name:property,property,property,指令字输出段说明语句 段名:定义输出段的名称。属性:定义该段的内容和存储器的分配。段名1.SECTIONS指令语法属性属性属性Friday,December 02,2022DSP原理及应用36第4章 汇编语言程序开发工具1.SECTIONS指令语法 链接器为段在目标存储器中分配两个地址:加载的地址由装入存储器分配完成 执行程序的地址由运行存储器分配完成 通常,这两个地址是相同的。若要想把程序的加载
26、区分开,先将程序加载到ROM,然后在RAM中运行,则用SECTIONS命令让链接器对这个段定位两次即可。例如:.fir:load=ROM,run=RAM Friday,December 02,2022DSP原理及应用37第4章 汇编语言程序开发工具4.5.5 SECTIONS指令 3.MEMORY和SECTIONS命令的默认使用 如果没有利用MEMORY和SECTIONS命令,链接器就按默认算法来定位输出段。将所有的.text输入段链接成一个.text输出段,并配置到PAGE 0上的存储器;将所有的.data输入段组合成.data输出段,定位到PAGE 0上的存储器;Friday,December 02,2022DSP原理及应用38第4章 汇编语言程序开发工具3.MEMORY和SECTIONS命令的默认使用 所有的.bss输入段则组合成一个.bss输出段,并由链接器定位到配置为PAGE 1上的存储器。如果输入文件中包含有已初始化的命名段,则链接器将它们定位到程序存储器,紧随.data段之后。如果输入文件中包括有未初始化的命名段,则链接器将它们定位到数据存储器,并紧随.bss段之后。n作业:n4.1简述C54x汇编语言程序开发流程n4.2,4.3,4.7,4.8n4.9简述汇编伪指令的作用及分类。