




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022/8/12 10:501第4章 汇编语言程序开发工具 内容提要 可编程DSP芯片开发需要一套完整的软、硬件开发工具。通常可分成代码生成工具和代码调试工具两大类。 代码生成工具是指将高级语言或汇编语言编写的DSP程序转换成可执行的DSP芯片目标代码的工具程序,主要包括汇编器、链接器和C编译器以及一些辅助工具程序等。 代码调试工具包括C/汇编语言源码调试器、仿真器等。 本章主要介绍代码生成工具,包括C54x软件开发流程、汇编语言程序的编写、编辑、汇编和链接过程、COFF段的一般概念、汇编器和链接器处理段的方法以及程序的重定位等。 2022/8/12 10:502第4章 汇编语言程序开发工具
2、 4.1 TMS320C54x软件开发过程 4.2 汇编语言程序的编辑、汇编和链接过程 4.3 COFF的一般概念 4.4 源程序的汇编4.5 链接器的使用2022/8/12 10:503第4章 汇编语言程序开发工具4.1 TMS320C54x软件开发过程 C54x的应用软件开发主要完成以下工作:(1) 选择编程语言编写源程序 C54x提供2种编程语言,即汇编语言和C/C+语言。 对于完成一般功能的代码,这两种语言都可使用,但对于一些运算量很大的关键代码,最好采用汇编语言来完成,以提高程序的运算效率。(2) 选择开发工具和环境 C54x提供了两种开发环境。即非集成开发环境和集成开发环境CCS。
3、 2022/8/12 10:504第4章 汇编语言程序开发工具4.1 TMS320C54x软件开发过程 1. C54x应用软件开发流程 C54x应用软件的开发可在TI公司提供的开发环境中进行,用户可以用C/C+语言或汇编语言编写源文件,经C编译器、汇编器生成COFF格式的目标文件,再用链接器进行链接,生成在C54x上可执行的目标代码,然后利用调试工具对可执行的目标代码进行仿真和调试。 当调试完成后,通过Hex代码转换工具,将调试后的可执行目标代码转换成EPROM编程器能接受的代码,并将该代码固化到EPROM中或加载到用户的应用系统中,以便DSP目标系统脱离计算机单独运行。 2022/8/12
4、10:505第4章 汇编语言程序开发工具1. C54x应用软件开发流程 开发过程的目的是产生一个可以由C54x目标系统执行的模块。C源文件C编译器汇编源文件汇编器汇编源文件COFF目标文件链接器可执行的COFF文件宏源文件存档器宏库存档器目标文件库建库工具运行时支持库EPROM编程器交叉引用列表器调试工具TMS320C54x绝对地址列表器HEX代码转换工具2022/8/12 10:506第4章 汇编语言程序开发工具2. C54x的开发工具 TI公司提供的DSP开发环境和工具主要包括以下三个部分: 代码生成工具 代码调试工具 实时操作系统2022/8/12 10:507第4章 汇编语言程序开发工
5、具2. C54x的开发工具(1)代码生成工具: C编译器:用来将C/C+语言源程序自动编译为C54x的汇编语言源程序。 汇编器:用来将汇编语言源文件汇编成机器语言COFF目标文件。 链接器:将汇编生成的、可重新定位的COFF目标模块组合成一个可执行的COFF目标模块。 文档管理器:允许用户将一组文件(源文件或目标文件)集中为一个文档文件库。 2022/8/12 10:508第4章 汇编语言程序开发工具2. C54x的开发工具 助记符指令代数式指令翻译器:用来将包含助记符指令的汇编语言源文件转换成包含代数式指令的汇编语言源文件。 建库实用程序:用来建立用户自己使用的、并用C/C+语言编写的支持运
6、行的库函数。 十六进制转换程序:可以很方便地将COFF目标文件转换成TI、Intel、Motorola等公司的目标文件格式。 (1)代码生成工具:2022/8/12 10:509第4章 汇编语言程序开发工具2. C54x的开发工具(1)代码生成工具: 绝对制表程序:将链接后的目标文件作为输入,生成.abs输出文件。 交叉引用制表程序:利用目标文件生成一个交叉引用清单,列出链接的源文件中的符号以及它们的定义和引用情况。 2022/8/12 10:5010第4章 汇编语言程序开发工具2. C54x的开发工具(2)代码调试工具: C/汇编语言源码调试器:与软件仿真器、评价模块、软件开发系统、软件仿真
7、器等配合使用。 软件仿真器:是一种模拟DSP芯片各种功能并在非实时条件下进行软件调试的调试工具,它不需目标硬件支持,只需在计算机上运行。 初学者工具DSK:是TI公司提供给初学者进行DSP编程练习的一套廉价的实时软件调试工具。 2022/8/12 10:5011第4章 汇编语言程序开发工具2. C54x的开发工具(2)代码调试工具: 软件开发系统SWDS:是一块PC插卡,可提供低成本的评价和实时软件开发,还可用来进行软件调试,程序可在DSP芯片上实时运行。 可扩展的开发系统仿真器(XDS510):可用来进行系统级的集成调试,是进行DSP芯片软硬件开发的最佳工具。 评价模块EVM板:是一种低成本
8、的开发板,可进行DSP芯片评价、性能评估和有限的系统调试。 2022/8/12 10:5012第4章 汇编语言程序开发工具4.2 汇编语言程序的编辑、汇编和链接过程 汇编语言源程序可以在任何一种文本编辑器中进行。如笔记本、WORD、EDIT、TC等。 当汇编语言源程序编写完成后,还必须经过汇编和链接后才能运行。 2022/8/12 10:5013第4章 汇编语言程序开发工具4.2 汇编语言程序的编辑、汇编和链接过程 示意图汇编器调试程序链接器文本编辑器.asm源文件.obj目标文件.out输出文件. cmd链接命令文件. lst列表文件. map存储器映像文件十六进制转换程序HEX500- o
9、- m- l2022/8/12 10:5014第4章 汇编语言程序开发工具4.2 汇编语言程序的编辑、汇编和链接过程 1. 编辑 利用各种文本编辑器,如笔记本、WORD、EDIT和TC等,可编写汇编语言源程序。 2. 汇编 当汇编语言源程序编写好以后,可利用C54x的汇编器ASM500,对一个或多个源程序分别进行汇编,并生成列表文件(.lst)和目标文件(.obj)。 2022/8/12 10:5015第4章 汇编语言程序开发工具4.2 汇编语言程序的编辑、汇编和链接过程 2. 汇编 常用的汇编命令: asm500 %1 s 1 x 调用汇编器命令 源文件名 将程序所有定义的符号放在目标文件的
10、符号表中 生成一个列表文件.lst 生成一个交叉汇编表 2022/8/12 10:5016第4章 汇编语言程序开发工具4.2 汇编语言程序的编辑、汇编和链接过程 3. 链接 所谓链接,就是利用C54x的链接器LNK500,根据链接器命令文件(.cmd)对已汇编过的一个或多个目标文件(.obj)进行链接,生成输出文件(.out)和存储器映像文件(.map) 。 常用的汇编器命令: lnk500 %1.cmd lnk500: 调用链接器命令 %1.cmd: 链接命令文件名,该文件须指明目标文件、输入文件、输出文件、链接选项和存储器配置要求等。 2022/8/12 10:5017第4章 汇编语言程序
11、开发工具4.3 COFF的一般概念 汇编器和链接器生成的目标文件,是一个可以由C54x器件执行的文件。这些目标文件的格式称之为公共目标文件格式(COFF)。 在编写汇编语言程序时,COFF采用代码段和数据段的形式,以便于模块化的编程,使编程和管理变得更加方便。 这些代码段和数据段简称为段。汇编器和链接器提供一些伪指令来建立和管理各种各样的段。 2022/8/12 10:5018第4章 汇编语言程序开发工具4.3 COFF的一般概念 4.3.1 COFF文件的基本单元 COFF文件有3种类型:COFF0、COFF1、COFF2。 每种类型的COFF文件,其标题格式都有所不同,但数据部分是相同的。
12、 链接器能够读/写所有类型的COFF文件,默认时链接器生成的是COFF2文件,采用-vn链接选项可以选择不同类型的COFF文件。 C54x汇编器和C编译器产生的是COFF2文件。 2022/8/12 10:5019第4章 汇编语言程序开发工具4.3.1 COFF文件的基本单元 1. 段(sections) 是COFF文件中最重要的概念。每个目标文件都分成若干段。 段是存储器中占据相邻空间的代码或数据块。一个目标文件中的每个段都是分开的和各不相同的。 COFF目标文件都包含以下3种形式的段: .text 段(文本段),通常包含可执行代码; .data 段(数据段),通常包含初始化数据; .bss
13、 段(保留空间段),通常为未初始化变量保留存储空间。2022/8/12 10:5020第4章 汇编语言程序开发工具4.3.1 COFF文件的基本单元 2. 段的基本类型 COFF目标文件中的段有两种基本类型。 初始化段 未初始化段(1) 初始化段 初始化段中包含有数据或程序代码。主要有: .text段已初始化段; .data段已初始化段; .sect段已初始化段,由汇编器伪指令建立 的自定义段。 2022/8/12 10:5021第4章 汇编语言程序开发工具4.3.1 COFF文件的基本单元 2. 段的基本类型 COFF目标文件中的段有两种基本类型。(2) 未初始化段 在存储空间中,为未初始化
14、数据保留存储空间。它包括: .bss段未初始化段; .usect段未初始化段,由汇编命令建立的命 名段(自定义段)。2022/8/12 10:5022第4章 汇编语言程序开发工具4.3.1 COFF文件的基本单元 3. 段与目标存储器的对应关系 汇编器的任务:在汇编过程中,根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文件。 链接器的任务:就是分配存储单元,将目标文件中的段重新定位到目标系统的存储器中,这一过程称为定位或分配。 2022/8/12 10:5023第4章 汇编语言程序开发工具3. 段与目标存储器的对应关系目标文件中的段与目标存储器之间的关系 目标文件目标存储器.b
15、ss.data.textRAME2PROMROM2022/8/12 10:5024第4章 汇编语言程序开发工具4.3.2 汇编器对段的处理 汇编器对段的处理是通过段伪指令来区别各个段的,并将段名相同的语句汇编在一起。 汇编器有5条伪指令可识别汇编语言程序的各个部分: .bss .usect .text .data .sect定义未初始化段定义未初始化段定义已初始化段定义已初始化段定义已初始化段2022/8/12 10:5025第4章 汇编语言程序开发工具4.3.2 汇编器对段的处理 未初始化段就是在C54x存储器中保留空间,通常它们被定位在RAM区。在目标文件中,这些段中没有确切的内容。 由这
16、些段定义的空间仅作为临时存储空间,在程序运行时,可以利用这些存储空间存放变量。 未初始化段分为默认的和命名的两种,分别由汇编器伪指令.bss和.usect产生。 1. 未初始化段 2022/8/12 10:5026第4章 汇编语言程序开发工具(1) .bss伪指令1. 未初始化段 用于在bss段中保留若干个空间。 格式: .bss 符号, 字数符号对应于保留的存储空间第一个字的变量名称。 可以让其他段引用,也可以用.global命令定义为全 局符号。 字数表示在bss段或标有名字的段中保留若干个存储单元。 每调用一次.bss伪指令,汇编器在相应的段保留更多的空间。 2022/8/12 10:5
17、027第4章 汇编语言程序开发工具1. 未初始化段 (2) .usect伪指令 用于为指定的命名段保留若干个空间。 格式: 符号 .usect “段名”, 字数段名程序员为未初始化的命名段定义的名字。 每调用一次.usect伪指令,汇编器在指定的命名段保留更多的空间。 2022/8/12 10:5028第4章 汇编语言程序开发工具4.3.2 汇编器对段的处理 已初始化段中包含有可执行代码或初始化数据。 这些段中的内容都在目标文件中,当加载程序时再放到C54x的存储器中。每个已初始化段都是可以重新定位的,并且可以引用其他段中所定义的符号。链接器在链接时会自动地处理段间的相互引用。 已初始化段由.
18、text、.data和.sect三个伪指令建立。2. 已初始化段 2022/8/12 10:5029第4章 汇编语言程序开发工具 已初始化命令的句法: 2. 已初始化段 .text 段起点 .data 段起点 .sect “段名”,段起点段起点是任选项。 若选用,它为段程序计数器SPC定义一个起始值。 若默认,则SPC从0开始。 2022/8/12 10:5030第4章 汇编语言程序开发工具4.3.2 汇编器对段的处理 当汇编器遇到.text或.data或.sect命令时,将停止对当前段的汇编(相当于一条结束当前段汇编的命令),然后将紧接着的程序代码或数据汇编到指定的段中,直到再遇到另一条.t
19、ext、.data或.sect命令为止。 当汇编器遇到.bss或.usect命令时,并不结束当前段的汇编,只是暂时从当前段脱离出来,并开始对新的段进行汇编。 .bss和.usect命令可以出现在一个已初始化段的任何位置,而不会对它的内容发生影响。 2022/8/12 10:5031第4章 汇编语言程序开发工具4.3.2 汇编器对段的处理 命名段由用户指定,与默认的.text,.data和.bss段的使用相同,但它们被分开汇编。 假如一部分可执行代码(例如初始化程序)不希望和.text段分配在一起,可将它们汇编进一个命名段,这样就可定位在与.text不同的地方。也可将初始化的数据汇编到与.dat
20、a段不同的地方,或者将未初始化的变量保留在与.bss段不同的位置。 可用.usect和.sect两个伪指令产生命名段。3. 命名段(自定义段) 2022/8/12 10:5032第4章 汇编语言程序开发工具 .usect伪指令产生类似.bss的段,为变量在RAM中保留存储空间。 .sect伪指令产生类似.text和.data的段,可以包含代码或数据。.sect伪指令产生可重新定位地址的命名段。3. 命名段 产生命名段伪指令格式: 符号 .usect “段名”,字数 .sect “段名” 可以产生多达32767个不同的命名段。段名可长达200个字符。 2022/8/12 10:5033第4章 汇
21、编语言程序开发工具 对于.sect和.usect伪指令,段名可以作为子段的参考。 每次用一个新名字调用这些伪指令时,就产生一个新的命名段。 若用已有的段名调用这些伪指令,则汇编器就将代码或数据(或保留空间)汇编进相应名称的段中。 不同的伪指令不能使用相同的名字。即不能用.usect创建了命名段,然后又用.sect创建一个相同名字的段。 3. 命名段 2022/8/12 10:5034第4章 汇编语言程序开发工具4.3.2 汇编器对段的处理 子段是较大段中的小段。链接器可以像处理其他段一样处理子段。 子段结构可用来对存储器空间进行更紧凑的控制,可以使存储器空间分配更加紧密。 4. 子段 子段命名
22、格式: 基段名: 子段名 子段名前为基段名,随后为冒号,最后为子段名。 2022/8/12 10:5035第4章 汇编语言程序开发工具 对于子段,汇编器可以单独为其分配存储单元,或者在相同的基段名下与其他段组合在一起。 用.sect命令建立的段是已初始化的子段; 用.usect命令建立的段是未初始化的子段。 4. 子段 例如,若要在.text段内建立一个称之为_func的子段,其命令格式: .sect “.text:_func” 2022/8/12 10:5036第4章 汇编语言程序开发工具4.3.2 汇编器对段的处理 汇编器为每个段都安排了一个单独的程序计数器称之为段程序计数器SPC。 SP
23、C表示在程序代码或数据段内当前的地址。开始时汇编器将每个SPC置0。当汇编器将程序代码或数据加到段内时,增加相应的SPC值。若再继续对某个段汇编,则相应的SPC就在先前的数值上继续增加。 链接器在链接时要对每个段进行重新定位。 5. 段程序计数器SPC 2022/8/12 10:5037第4章 汇编语言程序开发工具【例4.3.1】段命令应用举例。 汇编语言源程序: .datacoeff .word 044h,055h,066h .bss buffer,8 prt .word 0456h .textadd: LD 0Dh,A aloop:SUB #1,A BC aloop,AGEQ .datai
24、vals .word 0CCh,0DDh,0EEh ;初始化数据段 ;3组数据放入.data段 ;在.bss段保留8个单元 ;0456h放入.data段 ;初始化文本段 ;1字指令 ;2字指令 ;2字指令共计5个字 ;初始化数据段 ;3组数据放入.data段2022/8/12 10:5038第4章 汇编语言程序开发工具汇编语言源程序:var2 .usect “newvars”,2 inbuf .usect “newvars”,8 .text mpy: LD 0Ah,B mloop: MPY #0Ah,B BC mloop,BNOV .sect “vectors” .word 044h,088h
25、 ;建立newvars命名段,保留2个单元 ;在newvars段保留8个单元 ;初始化文本段 ;1字指令 ;2字指令 ;2字指令共计5个字 ;建立vectors命名段 ;2组数据放入vectors命名段2022/8/12 10:5039第4章 汇编语言程序开发工具经汇编后,得列表文件(部分): 2 *3 * 汇编一个初始化表到.data段 *4 *5 0000 .data6 0000 0044 coeff .word 044h,055h,066h 0001 0055 0002 00667 *8 * 在.bss段中为变量保留空间 *9 *10 0000 .bss buffer,811 *12 *
26、 仍然在.data 段中 *13 *14 0003 0456 prt .word 0456h2022/8/12 10:5040第4章 汇编语言程序开发工具15 *16 * 汇编代码到.text段 *17 *18 0000 .text19 0000 100d add: LD 0Dh,A20 0001 f010 aloop: SUB #1, A 0002 0001 21 0003 f842 BC aloop,AGEQ 0004 0001 22 *23 * 汇编另一个初始化表到.data 段 * 24 *25 0004 .data 26 0004 00cc ivals .word 0CCh,0DDh
27、,0EEh 0005 00dd 0006 00ee27 *28 * 为更多的变量定义另一个段 *29 *30 0000 var2 .usect “newvars”,2 31 0001 inbuf .usect “newvars”,8 2022/8/12 10:5041第4章 汇编语言程序开发工具32 *33 * 汇编更多代码到.text段 *34 *35 0005 .text 36 0005 110a mpy: LD 0Ah,B 37 0006 f166 mloop MPY #0Ah,B 0007 000a 38 0008 f868 BC mloop,BNOV 0009 0006 39 *40
28、 * 为中断向量.vectors定义一个自定义段 * 41 *42 0000 .sect “vectors” 43 0000 0044 .word 044h,088h 0001 0088 源程序的行号 段程序计数器目标代码汇编语言源程序2022/8/12 10:5042第4章 汇编语言程序开发工具 汇编语言源程序经过汇编后,共建立了5个段: .text段文本段,段内有10个字可执行 的程序代码。 .data段已初始化的数据段,段内有7 个字的数据。 vectors段用.sect命令生成的命名段, 段内有2个字的初始化数据。 .bss段未初始化的数据段,在存储器中 为变量保留8个存储单元。 ne
29、wvars段用.usect命令建立的命名段, 为变量保留10个存储单元。 2022/8/12 10:5043第4章 汇编语言程序开发工具经汇编后,得列表文件(部分): 2 *3 * 汇编一个初始化表到.data段 *4 *5 0000 .data6 0000 0044 coeff .word 044h,055h,066h 0001 0055 0002 00667 *8 * 在.bss段中为变量保留空间 *9 *10 0000 .bss buffer,811 *12 * 仍然在.data 段中 *13 *14 0003 0456 prt .word 0456h5 0000 .data6 0000
30、 0044 coeff .word 044h,055h,066h10 0000 .bss buffer,814 0003 0456 prt .word 0456h.data 6 00446 00556 006610 .bss 没有数据保留8个字14 04562022/8/12 10:5044第4章 汇编语言程序开发工具15 *16 * 汇编代码到.text段 *17 *18 0000 .text19 0000 100d add: LD 0Dh,A20 0001 f010 aloop: SUB #1, A 0002 0001 21 0003 f842 BC aloop,AGEQ 0004 000
31、1 22 *23 * 汇编另一个初始化表到.data 段 * 24 *25 0004 .data 26 0004 00cc ivals .word 0CCh,0DDh,0EEh 0005 00dd 0006 00ee27 *28 * 为更多的变量定义另一个段 *29 *30 0000 var2 .usect “newvars”,2 31 0001 inbuf .usect “newvars”,8 .text 18 0000 .text19 0000 100d add: LD 0Dh,A19 100d20 0001 f010 aloop: SUB #1, A20 f01020 000121 00
32、03 f842 BC aloop,AGEQ21 f84221 000125 0004 .data26 0004 00cc ivals .word 0CCh,0DDh,0EEh.data 26 00cc26 00dd26 00ee30 0000 var2 .usect “newvars”,2newvars 30 保留2个字31 0001 inbuf .usect “newvars”,831 保留8个字2022/8/12 10:5045第4章 汇编语言程序开发工具32 *33 * 汇编更多代码到.text段 *34 *35 0005 .text 36 0005 110a mpy: LD 0Ah,B
33、 37 0006 f166 mloop MPY #0Ah,B 0007 000a 38 0008 f868 BC mloop,BNOV 0009 0006 39 *40 * 为中断向量.vectors定义一个自定义段 * 41 *42 0000 .sect “vectors” 43 0000 0044 .word 044h,088h 0001 0088 35 0005 .text.text 36 0005 110a mpy: LD 0Ah,B 36 110a37 0006 f166 mloop MPY #0Ah,B37 f16837 000a38 0008 f868 BC mloop,BNOV
34、38 f86838 000642 0000 .sect “vectors”vectors 43 0000 0044 .word 044h,088h43 004443 00882022/8/12 10:5046第4章 汇编语言程序开发工具4.3.3 链接器对段的处理 链接器是开发C54x器件必不可少的开发工具之一,它对段处理时有2个主要任务: 将一个或多个COFF目标文件中的各种段作为链接器的输入段,经链接后在一个执行的COFF输出模块中建立各个输出段; 在程序装入时对其重新定位,为各个输出段选定存储器地址。 2022/8/12 10:5047第4章 汇编语言程序开发工具4.3.3 链接器对段的
35、处理 链接器有2条伪指令支持上述任务: MEMORY伪指令用来定义目标系统的存储器配置空间,包括对存储器各部分命名,以及规定它们的起始地址和长度。 SECTIONS伪指令用来指定链接器将输入段组合成输出段方式,以及输出段在存储器中的位置,也可用于指定子段。 若未使用伪指令,则链接器将使用目标处理器默认的方法将段放入存储空间。 2022/8/12 10:5048第4章 汇编语言程序开发工具4.3.3 链接器对段的处理 1. 默认的存储器分配 链接器可对多个目标文件进行链接。若链接文件中不使用MEMORY和SECTIONS命令,则为默认方式。 每个目标文件都有.text,.data、.bss段和命
36、名段。若采用默认链接,链接器将对多个目标文件中的各个段进行组合,形成各自的对应段,并将各个段配置到所指定的存储器中,形成可执行的目标模块。 在默认的方式下,链接器将从存储器的0080h开始,对组合后的各段进行存储器配置。2022/8/12 10:5049第4章 汇编语言程序开发工具 默认的存储器分配: 将所有.text段组合在一起,形成一个.text段,并分配到程序存储器中; 将多个目标文件中的.data段组合在一起,分配到紧接着.text段的程序存储空间中; 将.bss段组合,配置到数据存储器中; 组合命名段。初始化的命名段按顺序分配到紧随.data段的程序存储器,而未初始化命名段将被配置到
37、紧随.bss段的数据存储器中。 1. 默认的存储器分配 2022/8/12 10:5050第4章 汇编语言程序开发工具 默认的存储器分配过程:.text.text1.text2.data.data1.data2 .bss.bss1.bss2tabletable_1table_2u_vars1u_vars1u_vars2FFTFFT没有使用没有配置没有配置没有使用2022/8/12 10:5051第4章 汇编语言程序开发工具4.3.3 链接器对段的处理 2. 段放入存储器空间 若不希望链接器将所有的.text段结合在一起形成单个的.text段,就不能采用默认的方式。 由于DSP硬件系统中可能配置
38、多种类型的存储器,若要把某一段分配到特定类型的存储器中,或将命名段配置特定的地址,则需采用MEMORY和SECTIONS伪指令来配置。 若不采用默认的方式,通常需要建立一个链接命令文件,在命令文件中用MEMORY和SECTIONS伪指令定义存储器和配置段地址。 2022/8/12 10:5052第4章 汇编语言程序开发工具4.3.4 链接器对程序的重新定位 1. 链接器重新定位 汇编器对每个段汇编时都是从0地址开始,而所有需要重新定位的符号(标号)在段内都是相对于0地址的。事实上,所有段都不可能从存储器中0地址单元开始,因此链接器必须对各个段进行重新定位。 重新定位的方法: 将各个段配置到存储
39、器中,使每个段都有一个 合适的起始地址; 将符号变量调整到相对于新的段地址的位置; 将引用调整到重新定位后的符号,这些符号 反映了调整后的新符号值。 2022/8/12 10:5053第4章 汇编语言程序开发工具1. 链接器重新定位 汇编器在需要引用重新定位的符号处都留了一个重定位入口。链接器在对符号重新定位时,利用这些入口修正对符号的引用值。 【例4.3.2】一段采用助记符指令编写的程序,经汇编后得列表文件如下: 1 . ref X2 . ref Z3 0000 . text4 0000 F073 B Y ;产生一个重定位入口 0001 00065 0002 F073 B Z ;产生一个重定
40、位入口 0003 0000!6 0004 F020 LD #X,A ;产生一个重定位入口 0005 0000!7 0006 F7E0 Y: RESET 2022/8/12 10:5054第4章 汇编语言程序开发工具1. 链接器重新定位 程序中有三个符号: X、Z是在另一个模块中定义的; Y在.text段中定义的。 当程序汇编时,X、Z的值为0未定义的外部符号 Y的值为6相对于.text段地址0定义 汇编器形成了两个重定位入口: X和Z:在.text段中为一次外部引用,用符号!表示; Y:是一次内部引用,用符号表示。 链接时,X重新定位在地址7100h .text段起始地址重新定位在7200h
41、Y的重新定位值为7204h。 2022/8/12 10:5055第4章 汇编语言程序开发工具1. 链接器重新定位 链接器利用两个重定位入口,对目标文件中的两次引用进行修正:变成 f073 7204变成 f020 7100 f073 B Y 0004 f020 LD #X,A 0000! 2022/8/12 10:5056第4章 汇编语言程序开发工具4.3.4 链接器对程序的重新定位 2. 运行时间重新定位 在实际运行中,有时需要将代码装入存储器的一个地方,而在另一个地方运行。 如:一些关键的执行代码必须装在系统的ROM中,但运行时希望在较快的RAM中进行。 利用SECTIONS伪指令选项可让链
42、接器对其定位2次,其方法: 使用装入关键字设置装入地址; 使用运行关键字设置它的运行地址。2022/8/12 10:5057第4章 汇编语言程序开发工具4.3.4 链接器对程序的重新定位 2. 运行时间重新定位 装入地址确定段的原始数据或代码装入的位置,而任何对段的使用(例如其中的标号),则参考它的运行地址。在应用中必须将该段从装入地址复制到运行地址。 如果只为段提供了一次定位(装入或运行),则该段将只定位一次,并且装入和运行地址相同。如果提供了2个地址,则段将被自动定位。 2022/8/12 10:5058第4章 汇编语言程序开发工具4.3.5 程序装入 链接器产生可执行的COFF目标文件。
43、可执行的目标文件模块与链接器输入的目标文件具有相同的COFF格式。为了运行程序,在可执行模块中的数据必须传输或装入目标系统存储器中。 可以采用以下方法装入程序: 使用调试工具转入程序 C54x的调试工具包括软件模拟器,XDS仿真器和集成系统CCS。它们都具有内部的装入器,调用装入器的LOAD命令,装入器将程序复制到目标系统的存储器中。 采用Hex转换工具转入程序 可以使用转换工具Hex500,将可执行COFF目标模块转换成几种其他目标格式文件,然后将转换后的文件通过编程器将程序装(烧)进EPROM。 2022/8/12 10:5059第4章 汇编语言程序开发工具4.3.6 COFF文件中的符号
44、 COFF文件中有一个符号表,主要用来存储程序中有关符号的信息。链接器在执行程序定位时,要使用符号表提供的信息,而调试工具也要使用该表来提供符号调试。 1. 外部符号 是指在一个模块中定义、而在另一个模块中引用的符号。它可以用伪指令.def、.ref或.global来定义。 .def在当前模块中定义,并可在别的模块中使用的符号; .ref 在当前模块中使用,但在别的模块中定义的符号; .global可以是上面的任何一种情况。 2022/8/12 10:5060第4章 汇编语言程序开发工具1. 外部符号【例4.3.3】说明代码段中外部符号的定义。 x: ADD #56h,A B y .def x
45、 .ref y ;定义x ;引用y ;x在此模块中定义,可为别 的模块引用 ;y在这里引用,它在别的模 块中定义 2022/8/12 10:5061第4章 汇编语言程序开发工具4.3.6 COFF文件中的符号 2. 符号表 每当遇到一个外部符号,无论是定义的还是引用的,汇编器都将在符号表中产生一个条目。 汇编器还产生一个指到每段的专门符号,链接器使用这些符号将其他引用符号重新定位。 2022/8/12 10:5062第4章 汇编语言程序开发工具4.4 源程序的汇编 汇编器的作用是将汇编语言源程序转换成机器语言目标文件。这些目标文件都是公共目标文件格式(COFF)。 汇编语言源程序文件可以包含汇
46、编命令、汇编语言指令和宏指令。 汇编命令用来控制汇编的过程,包括列表格式、符号定义和将源代码放入块的方式等。 2022/8/12 10:5063第4章 汇编语言程序开发工具4.4 源程序的汇编 汇编器包括如下功能: 将汇编语言源程序汇编成一个可重新定位的目标文件(.obj文件)。 根据需要,可以生成一个列表文件(.lst文件),并对该列表进行控制。 将程序代码分成若干个段,每个段的目标代码都有一个SPC(段程序计数器)管理。 2022/8/12 10:5064第4章 汇编语言程序开发工具4.4 源程序的汇编 汇编器包括如下功能: 定义和引用全局符号,如果需要可以在列表文件后面附加一张交叉引用表
47、。 对条件程序块进行汇编。 支持宏功能,允许定义宏命令。 为每个目标代码块设置一个程序计数器SPC。 2022/8/12 10:5065第4章 汇编语言程序开发工具4.4 源程序的汇编 4.4.1 汇编程序的运行 C54x的汇编程序名为asm500.exe。要运行汇编程序,可键入如下命令: asm500 input file object file listing file -options Asm500 : 运行汇编程序asm 500.exe的命令。 input file : 汇编源文件名,默认扩展名为.asm。 object file : 汇编程序生成的C54x目标文件,扩展名为.obj。
48、 若不提供目标文件名,则汇编程序就用输入文件 或目标文件名。listing file : 汇编器产生的列表文件名,默认扩展名为.lst。 -options : 汇编器的选项,为汇编器的使用提供各种选择。 2022/8/12 10:5066第4章 汇编语言程序开发工具4.4.2 汇编时的列表文件 汇编器对源程序汇编时,如果采用-l选项,汇编后将生成一个列表文件。列表文件中包括源程序语句和目标代码。 每个列表文件的顶部有两行汇编程序的标题、一行空行以及页号行。.title命令提供的文件名打印在页号行左侧;页号打印在此行的右侧。 源文件的每一行都会在列表文件中生成一行。其内容包括行号、段程序计数器S
49、PC的数值、汇编后的目标代码,以及源程序语句。一条指令可以生成1或2个字的目标代码。汇编器为第2字单独列一行,并列出了SPC的数值和目标代码。 2022/8/12 10:5067第4章 汇编语言程序开发工具4.5 链接器的使用 链接器的主要任务是根据链接命令文件(.cmd),将一个或多个COFF目标文件链接起来,生成存储器映像文件(.map)和可执行的输出文件(.out)。 在链接过程中,链接器将各个目标文件合并,并完成以下工作: 将各个段配置到目标系统的存储器。 对各个符号和段进行重新定位,并给它们指 定一个最终的地址。 解决输入文件之间未定义的外部引用。 2022/8/12 10:5068
50、第4章 汇编语言程序开发工具4.5.1 链接器的运行 1. 运行链接程序 C54x链接器的运行命令: lnk500 -options 1 n lnk500: 运行链接器命令。-options: 链接命令选项。可以出现在命令行或链接命令文 件的任何位置。: 文件名。可以是目标文件、链接命令文件或文 件库。所有文件扩展名的默认值为.obj。2022/8/12 10:5069第4章 汇编语言程序开发工具1. 运行链接程序 C54x链接器的运行,有三种方法: (1) 键入命令: lnk500 链接器会提示如下信息: Command files:Object files .obj: Output Fil
51、es a.out: Options: (要求键入一个或多个命令文件) (要求键入一个或多个需要链接的目标文件) (要求键入一个链接器所生成的输出文件名)(要求附加一个链接选项 )2022/8/12 10:5070第4章 汇编语言程序开发工具1. 运行链接程序 (2) 键入命令: lnk500 -o link.out 在命令行中指定选项和文件名。 目标文件: 、 命令选项: -o 输出文件: link.out 将两个目标文件进行链接,生成一个可执行的输出文件link.out。2022/8/12 10:5071第4章 汇编语言程序开发工具1. 运行链接程序 (3) 键入命令: lnk500 lin
52、ker.cmd linker.cmd: 链接命令文件。 在执行上述命令之前,需将链接的目标文件、链接命令选项以及存储器配置要求等编写到链接命令文件linker.cmd中。 例如:希望完成第二种命令的链接,在链接命令文件中,应包含如下内容: -o link.out 2022/8/12 10:5072第4章 汇编语言程序开发工具4.5.1 链接器的运行 2. 链接命令选项 在链接时,连接器通过链接命令选项控制链接操作。 链接命令选项可以放在命令行或命令文件中,所有选项前面必须加一短划线“-”。除-l和-i选项外,其他选项的先后顺序并不重要。 选项之间可以用空格分开。最常用选项为-m和-o,分别表示
53、输出的地址分配表映像文件名和输出可执行文件名。 2022/8/12 10:5073第4章 汇编语言程序开发工具2. 链接命令选项 链接命令选项选 项含 义 -a 生成一个绝对地址的、可执行的输出模块。所建立的绝 对地址输出文件中不包含重新定位信息。如果既不用-a 选项,也不用-r选项,链接器就像规定-a选项那样处理。 -ar 生成一个可重新定位、可执行的目标模块。这里采用了 -a和-r两个选项(可以分开写成-a -r,也可以连在一起 写作-ar),与-a选项相比,-ar选项还在输出文件中保留 有重新定位信息。 -e global_symbol 定义一个全局符号,这个符号所对应的程序存储器地址,
54、 就是使用开发工具调试这个链接后的可执行文件时程序 开始执行时的地址(称为入口地址)。当加载器将一个程 序加载到目标存储器时,程序计数器(PC)被初始化到入 口地址,然后从这个地址开始执行程序。 2022/8/12 10:5074第4章 汇编语言程序开发工具2. 链接命令选项 链接命令选项选 项含 义 -f fill_vale 对输出模块各段之间的空单元设置一个16位数值 (fill_value),如果不用-f选项,则这些空单元都置0。 -i dir 更改搜索文档库算法,先到dir(目录)中搜索。此选项 必须出现在-l选项之前。 -l 命名一个文档库文件作为链接器的输入文件; 为文档库的某个文
55、件名。此选项必须出现在-i选项之后。 -m 生成一个.map映像文件,是映像文件的文件名。 .map文件中说明存储器配置、输入、输出段布局以及外 部符号重定位之后的地址等。 -o 对可执行输出模块命名。如果默认,则此文件名为a.out。 -r 生成一个可重新定位的输出模块。当利用-r选项且不用 -a选项时,链接器生成一个不可执行的文件。 2022/8/12 10:5075第4章 汇编语言程序开发工具4.5.2 链接器命令文件的编写与使用 链接命令文件用来为链接器提供链接信息,可将链接操作所需的信息放在一个文件中,这在多次使用同样的链接信息时,可以方便地调用。 在链接命令文件中,可使用MEMOR
56、Y和SECTIONS伪指令,为实际应用指定存储器结构和地址的映射。 MEMORY用来指定目标存储器结构。 SECTIONS用来控制段的构成与地址分配。 2022/8/12 10:5076第4章 汇编语言程序开发工具4.5.2 链接器命令文件的编写与使用 链接命令文件为ASC文件,可包含以下内容: (1) 输入文件名,用来指定目标文件、存档库或其他命令文件。 (2) 链接器选项,它们在命令文件中的使用方法与在命令行中相同。 (3) MEMORY和SECTIONS链接伪指令,用来指定目标存储器结构和地址分配。 (4) 赋值说明,用于给全局符号定义和赋值。2022/8/12 10:5077第4章 汇
57、编语言程序开发工具 例如:可根据给出链接命令,编写完成该命令操作的链接器命令文件link.cmd。 lnk500 a.obj b.obj -m prog.map -o prog.out 该命令是将两个目标文件a.obj和b.obj进行链接,生成一个映像文件prog.map和一个可执行的输出文件prog.out。 链接命令文件的内容如下: a.obj /*第一个输入文件名*/ b.obj /*第二个输入文件名*/ -m prog.map /*指定map文件的选项*/ -o prog.out /*指定输出文件的选项*/2022/8/12 10:5078第4章 汇编语言程序开发工具 【例4.5.1】
58、 链接器命令文件举例。 a.obj b.obj /* 输入文件名 */ -o prog.out /*指定输出文件的选项*/ -m prog.map /*指定map文件的选项*/ MEMORY /*MEMORY 伪指令*/ PAGE 0: ROM:origin=1000h, length=0100h PAGE 1: RAM:origin=0100h, length=0100h SECTIONS /*SECTIONS伪指令*/ .text : ROM .data : ROM .bss : RAM 2022/8/12 10:5079第4章 汇编语言程序开发工具注意:在命令文件中,不能采用下列符号作为
59、段名或符号名: align DSECT len o run ALIGN f length org RUN attr fill LENGTH origin SECTIONS ATTR FILL load ORIGIN spare block group LOAD page type BLOCK GROUP MEMORY PAGE TYPE COPY l(小写L) NOLOAD range UNION2022/8/12 10:5080第4章 汇编语言程序开发工具4.5.4 MEMORY指令 MEMORY指令用来规定目标存储器的结构。 在实际的应用中,目标系统所配置的存储器是各不相同的,通过MEMO
60、RY指令,可以进行各种各样的存储器配置。 MEMORY指令的句法: MEMORY PAGE0:name 1(attr):origin=constant, length=constant; PAGEn:name n(attr):origin=constant, length=constant; 指令字存储区间说明语句书写方式: 已大写MEMORY指令字开始; 由大括号括起来的存储器区间说明。存储区间:存储页面区间名称区间属性起始地址区间长度2022/8/12 10:5081第4章 汇编语言程序开发工具4.5.4 MEMORY指令 存储区间说明语句: PAGE: 指定存储器空间页面,最多为255页
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【安全员-B证】模拟试题及答案
- 2024计算机二级考试现场实操题试题及答案
- 现代物流服务体系的构建试题及答案
- 黑龙江省双鸭山市2024-2025学年三年级数学第二学期期末调研试题含解析
- 黑龙江省哈尔滨市重点中学2025届高三3月高考适应性调研考试生物试题试卷含解析
- 黑龙江省大兴安岭漠河县高中2024-2025学年高三校内模拟考试历史试题试卷含解析
- 黑龙江省绥化市重点中学2025届高三适应性考试(二)数学试题含解析
- 电子商务定价策略与竞争分析试题及答案
- 黔东南南苗族侗族自治州凯里市2024-2025学年数学五下期末学业水平测试试题含答案
- 黔南民族医学高等专科学校《社会艺术培训管理》2023-2024学年第一学期期末试卷
- 2023年江苏省中学生生物学竞赛(奥赛)初赛试题和答案
- 2020年(汽车行业)汽车行业英文缩写
- 舞蹈素质测试表
- DB15T 1417-2018 胶粉改性沥青及混合料设计与施工规范
- 基于核心素养导向的初中数学试题命制策略与实例课件
- 城市环境卫生工作物资消耗定额
- 学校卫生监督课件
- 物理人教版(2019)必修第二册5.2运动的合成与分解(共19张ppt)
- 中国航信离港系统讲义
- 6000m3内浮顶油罐设计
- 食堂管理考核评分表
评论
0/150
提交评论