4.5 链接器的使用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第4章 汇编语言程序开发工具
1. 运行链接程序
(3) 键入命令:
lnk500 linker.cmd
linker.cmd: 链接命令文件。
例如:希望完成第二种命令的链接,在链接命令 在执行上述命令之前,需将链接的目标文件、链 文件中,应包含如下内容: 接命令选项以及存储器配置要求等编写到链接命令文 件linker.cmd中。 file1.obj file2.obj -o link.out
Options: (要求附加一个链接选项 )
第4章 汇编语言程序开发工具
1. 运行链接程序
(2) 键入命令:
lnk500 file1.obj file2.obj -o link.out
在命令行中指定选项和文件名。 目标文件: file1.obj、file2.obj
命令选项: -o
输出文件: link.out 将两个目标文件进行链接,生成一个可执行的输 出文件link.out。
-ar
定义一个全局符号,这个符号所对应的程序存储器地址, 就是使用开发工具调试这个链接后的可执行文件时程序 -e global_symbol 开始执行时的地址(称为入口地址)。当加载器将一个程 序加载到目标存储器时,程序计数器(PC)被初始化到入 口地址,然后从这个地址开始执行程序。
第4章 汇编语言程序开发工具
第4章 汇编语言程序开发工具 注意:在命令文件中,不能采用下列符号作为段名或符号名: align ALIGN attr ATTR block DSECT f fill FILL group len length LENGTH load LOAD o org origin ORIGIN page run RUN SECTIONS spare type
第4章 汇编语言程序开发工具
4.5.4 MEMORY指令
存储区间说明语句:
fill: 为任选项。用来为没有定位输出段的存储
器空单元充填一个数,键入fill或f均可。
该值是2个字节的整型常数,可以是十进制
数、八进制数或十六制数。
第4章 汇编语言程序开发工具 【例4.5.2】用MEMORY伪指令编写连接命令文件。要求: 程序存储器:4K字ROM,起始地址为C00h,取名为ROM。 数据存储器:32字RAM,起始地址为60h,取名为SCR。 512字RAM,起始地址为80h,取名为CHIP。 file1.obj fiel2.obj 两个输入文件 -o Prog.out 链接命令选项 指令字 MEMORY { PAGE 0: ROM: origin=C00h, length=1000h PAGE 1: SCR: origin=60h, length=20h CHIP: origin=80h, length=200h } 起始地址
第4章 汇编语言程序开发工具
4.5.2 链接器命令文件的编写与使用
链接命令文件为ASCⅡ文件,可包含以下内容:
(1) 输入文件名,用来指定目标文件、存档库或件中的使用方法 与在命令行中相同。 (3) MEMORY和SECTIONS链接伪指令,用来指定目 标存储器结构和地址分配。
4.5.4 MEMORY指令
存储区间说明语句: attr: 为任选项,用来为命名的存储器区间规 定1~4个属性。 当对输出段定位时,可利用属性限制输出段分配 到一定的存储区间。 属性选项共有4项: R 规定可以对存储器执行读操作。 若未选属性,可将输出段不受限制地定位到任何 W 规定可以对存储器执行写操作。 一个存储器的位置。 X 规定存储器可以装入可执行的程序代码。 任何一个没有规定属性的存储器(包括所有默认 I 规定可以对存储器进行初始化。 方式的存储器)都有全部4项属性。
第4章 汇编语言程序开发工具
4.5.4 MEMORY指令
存储区间说明语句:
origin: 用来指定存储区间的起始地址,可简 写为org或o。其值以字为单位,可以 用十进制、八进制或十六进制数表示。 Length: 用来指定存储器空间的长度,可简写
为len或l,其值以字为单位,可以用
十进制、八进制或十六进制数表示。
MEMORY指令用来规定目标存储器的结构。
存储区间说明语句
书写方式:① 已大写MEMORY指令字开始; ② 由大括号括起来的存储器区间说明。 存储区间: 存储页面 区间名称 区间属性 起始地址 区间长度
第4章 汇编语言程序开发工具
4.5.4 MEMORY指令
存储区间说明语句:
PAGE: 指定存储器空间页面,最多为255页, 取决于目标存储器的配置。 每一个PAGE代表一个完全独立的地址空间。 通常,PAGE 0用于程序存储器; PAGE 1用于数据存储器。 若没有规定PAGE,则链接器默认为PAGE 0。
数据存储器 程序存储器
00000h 00000h 00060h
len=1000h len=20h len=200h
20h 200h
0007Fh 00080h
0027Fh 00C00h
SCR CHIP
1000h 01C00h
ROM
0FFFFh 0FFFFh
第4章 汇编语言程序开发工具
4.5.5 SECTIONS指令 1. SECTIONS指令语法 用来控制段的构成与地址分配。
第4章 汇编语言程序开发工具
4.5.1 链接器的运行
2. 链接命令选项 在链接时,连接器通过链接命令选项控制链接 操作。 链接命令选项可以放在命令行或命令文件中, 所有选项前面必须加一短划线“-”。除-l和-i选项 外,其他选项的先后顺序并不重要。
选项之间可以用空格分开。最常用选项为-m 和-o,分别表示输出的地址分配表映像文件名和输 出可执行文件名。
页面名称 区间名称 区间长度
第4章 汇编语言程序开发工具 【例4.5.2】用MEMORY伪指令编写连接命令文件。 file1.obj fiel2.obj -o Prog.out MEMORY { PAGE 0: ROM: org=C00h, PAGE 1: SCR: org=60h, CHIP:org=80h, }
(4) 赋值说明,用于给全局符号定义和赋值。
第4章 汇编语言程序开发工具
例如:可根据给出链接命令,编写完成该命令操 作的链接器命令文件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 /*指定输出文件的选项*/
BLOCK
COPY
GROUP
l(小写L)
MEMORY
NOLOAD
PAGE
range
TYPE
UNION
第4章 汇编语言程序开发工具
4.5.4 MEMORY指令
MEMORY指令的句法: 在实际的应用中,目标系统所配置的存储器是 MEMORY 指令字
{ 各不相同的,通过MEMORY指令,可以进行各种各 PAGE0:name 1[(attr)]:origin=constant, length=constant; 样的存储器配置。 PAGEn:name n[(attr)]:origin=constant, length=constant; }
第4章 汇编语言程序开发工具
4.5.2 链接器命令文件的编写与使用
链接命令文件用来为链接器提供链接信息,可将
链接操作所需的信息放在一个文件中,这在多次使用 同样的链接信息时,可以方便地调用。 在链接命令文件中,可使用MEMORY和SECTIONS伪 指令,为实际应用指定存储器结构和地址的映射。 MEMORY——用来指定目标存储器结构。 SECTIONS——用来控制段的构成与地址分配。
2. 链接命令选项
链接命令选项 选 项 含 义
对输出模块各段之间的空单元设置一个16位数值 (fill_value),如果不用-f选项,则这些空单元都置0。
-f fill_vale -i dir -l filename -m filename -o filename -r
更改搜索文档库算法,先到dir(目录)中搜索。此选项 必须出现在-l选项之前。
指令功能:
① 说明如何将输入段组合成输出段;
② 在可执行程序中定义输出段;
③ 规定输出段在存储器中的存放位置;
④ 允许重新命名输出段。
第4章 汇编语言程序开发工具
1. SECTIONS指令语法
SECTIONS指令的句法:
SECTIONS {
指令字
输出段 说明语句
name:[property, property, property, …]
第4章 汇编语言程序开发工具
4.5 链接器的使用
链接器的主要任务是根据链接命令文件(.cmd), 将一个或多个COFF目标文件链接起来,生成存储器映 像文件(.map)和可执行的输出文件(.out)。
在链接过程中,链接器将各个目标文件合并,并 完成以下工作: ● 将各个段配置到目标系统的存储器。 ● 对各个符号和段进行重新定位,并给它们指 定一个最终的地址。 ● 解决输入文件之间未定义的外部引用。
第4章 汇编语言程序开发工具
2. 链接命令选项
链接命令选项
选 -a 项 含 义 生成一个绝对地址的、可执行的输出模块。所建立的绝 对地址输出文件中不包含重新定位信息。如果既不用-a 选项,也不用-r选项,链接器就像规定-a选项那样处理。 生成一个可重新定位、可执行的目标模块。这里采用了 -a和-r两个选项(可以分开写成-a -r,也可以连在一起 写作-ar),与-a选项相比,-ar选项还在输出文件中保留 有重新定位信息。
第4章 汇编语言程序开发工具
1. 运行链接程序
’C54x链接器的运行,有三种方法:
(1) 键入命令:
lnk500 链接器会提示如下信息:
Command files: (要求键入一个或多个命令文件)
Object files [.obj]: (要求键入一个或多个需要链接的目标文件
Output Files [a.out]:) (要求键入一个链接器所生成的输出文件名)
命名一个文档库文件作为链接器的输入文件;filename 为文档库的某个文件名。此选项必须出现在-i选项之后。 生成一个.map映像文件,filename是映像文件的文件名。 .map文件中说明存储器配置、输入、输出段布局以及外 部符号重定位之后的地址等。 对可执行输出模块命名。如果默认,则此文件名为a.out。 生成一个可重新定位的输出模块。当利用-r选项且不用 -a选项时,链接器生成一个不可执行的文件。
第4章 汇编语言程序开发工具
4.5.1 链接器的运行
1. 运行链接程序
’C54x链接器的运行命令:
lnk500 [-options] filename 1 … filename n
lnk500: 运行链接器命令。 -options: 链接命令选项。可以出现在命令行或链接命令文 件的任何位置。 filenames: 文件名。可以是目标文件、链接命令文件或文 件库。所有文件扩展名的默认值为.obj。
第4章 汇编语言程序开发工具
4.5.4 MEMORY指令
存储区间说明语句:
name: 存储器区间名称。可由用字母、$、.、_ 等组成。 存储器区间为内部记号,因此不需要保留在输出 文件或者符号表中。 不同PAGE上的存储器区间可以取相同的名字, 但在同一PAGE内的名字不能相同,且不许重叠配置。
第4章 汇编语言程序开发工具
第4章 汇编语言程序开发工具
【例4.5.1】 链接器命令文件举例。
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 }
相关文档
最新文档