DSP系统实验04New-COFF文件格式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
asect已初始化段每个已初始化段可以独立地进行重定位且可以访问在其它段中定义的符号链接器自动解决段之间的符号访问问题当汇编器遇到上述伪指令之一时停止汇编当前段然后把后面的代码或数据汇编至伪指令指定的段中直到遇见另一个
COFF文件格式
COFF——Common Object File Format ELF——Executable and Linkable Format
COFF文件格式 链接器对段的处理
4 链接器对段的处理
功能
链接器用可重定位COFF目标文件中的段作 为输入段,当链接多于一个文件时,它组合 输入段,从而在可执行COFF目标文件中创 建输出段 链接器为输出段选择存储器地址,定位到目 标系统的存储器中
2014-8-12
15:43:48
-12-
包含7个字的目标 代码
.data
包含5个字的数据
.bss
在存储器中保留11 个字
newvars
用.usect伪指令定 义的段,在存储器 中保留8个字
2014-8-12 15:43:48 -10-
COFF文件格式 C编译器建立的段
3 C编译器建立的段
例:TMS320C2x/C2xx/C5x的C编译器建立的段
COFF文件格式 链接器对段的处理
链接器伪指令
MEMORY:定义目标系统的存储器,可以为 存储器命名,并指定其起始地址和长度 SECTIONS:告诉链接器如何将输入段组合 到输出段,以及将这些输出段存放在存储器 的什么地方
链接器的默认分配算法
如果不给链接器提供MEMORY和SECTIONS 命令,则链接器就采用缺省的分配算法
段名称 已初始化段 .text .cinit .const .switch 未初始化段 .bss .stack 段内容 可执行代码和浮点常数 已初始化的全局变量和静态变量的列表 已被初始化的字符串、全局常量和静态常量 用于多开关语句的跳转列表 全局和静态变量 软件堆栈
.system 动态存储空间
2014-8-12 15:43:48 -11-
2014-8-12
15:43:48
-5-
COFF文件格式 汇编器对段的处理
段的标识——汇编伪指令
COFF目标文件的3个默认段 .text 通常包含可执行代码 .data 通常包含一初始化的数据 .bss 符号,字数 通常为未初始化变量保留空间 自定义段 .sect 符号 .usect .asect
2014-8-12 15:43:48 -13-
COFF文件格式 链接器对段的处理

2014-8-12
15:43:48
-14-
COFF文件格式 链接器对段的处理

2014-8-12
15:43:48
-15-
COFF文件格式 COFF文件结构
5 COFF文件结构
2014-8-12
15:43:48
-16-
源文件
.data
EEPROM
.bss
2014-8-12 15:43:48 -4-
RAM
COFF文件格式 汇编器对段的处理
2 汇编器对段的处理
汇编器对段的处理主要是确定汇编语言程序的各 部分属于哪个特定的段
如果程序中没有用到任何伪指令来标识段,则汇 编器默认将所有的代码段和数据段统一汇编到 .tex段中
2014-8-12 15:43:4已初始化段
汇编伪指令
.text .data .sect .asect
作用
已初始化段包含可执行代码或已初始化数据 已初始化段的内容存储在COFF目标文件中,程序加载时放入存 储器中 每个已初始化段可以独立地进行重定位,且可以访问在其它段 中定义的符号,链接器自动解决段之间的符号访问问题
源文件 int a=10; int b=20; int sum; void main( ) { sum=a+b; }
代码段 void main( ) { sum=a+b; } 已初始化数据段 int a=10; int b=20;
未初始化数据段 int sum;
2014-8-12
15:43:48
-2-
• • • • •
1 段(Section) 2 汇编器对段的处理 3 C编译器建立的段 4 链接器对段的处理 5 COFF文件结构
2014-8-12
15:43:48
-1-
COFF文件格式 段(Section)
1 段(Section)
目标文件中的最小 单位 段是代码或数据块 的组合,它最终将 在存储器中占据一 个连续的空间 目标文件的每一个 段都是各自独立的
2014-8-12 15:43:48 -8-
COFF文件格式 汇编器对段的处理

Field1:
源代码行计数器
Field2:
段程序计数器
Field3:
目标代码
Field4:
源代码语句
2014-8-12
15:43:48
-9-
COFF文件格式 汇编器对段的处理
例(续)
.text
作用
未初始化段主要用来在存储器中保留空间,它们通常被分配到 RAM中 未初始化段在COFF目标文件中没有实际内容,只是保留空间 程序在运行时利用这些空间来创建和存储变量
汇编器的处理
当汇编器遇到.bss或.usect伪指令时,并不终止对当前段的汇编 而开始一个新段,它们只是暂时从当前段转移开 .bss和.usect伪指令可以在一个已初始化段的任何位置出现而不 影响它的内容
COFF文件格式 段(Section)
2014-8-12
15:43:48
-3-
COFF文件格式 段(Section)
COFF目标文件的3个默认段
.text .data .bss 符号,字数 通常包含可执行代码 通常包含已初始化的数据 通常为未初始化变量保留空间
目标文件 .text 目标存储器 ROM
汇编器的处理
当汇编器遇到上述伪指令之一时,停止汇编当前段,然后把后 面的代码或数据汇编至伪指令指定的段中,直到遇见另一个 .text、.data、.sect或.asect为止
2014-8-12 15:43:48 -7-
COFF文件格式 汇编器对段的处理
未初始化段
汇编伪指令
.bss .usect
“段名” 自定义已初始化段 “段名”,字数 自定义未初始化段 “段名”,地址 自定义绝对地址段
段名:程序员自己定义的段的名称 符号:指向由.bss或.usect伪指令保留的第一个字,对应于为变量保 留空间的变量名,可以在其它段中被访问,也可以用.global伪指令定 义为全局符号 字数:保留空间的大小
相关文档
最新文档