521COFF文件的基本单元段 ●通用目标文件格式cOFF: ommon Object Fle Format ●段( section)是cOFF文件的基本单元。一个段是一个 占据存储器里连续地址的代码或者数据块,COFF目标 文件的每个段都是分开和不同的 COFF目标文件通常包括3个默认段,即 text段,通常包含可执行代码 data段,通常包含初始化数据 bss段,通常为未初始化变量保留存储空间 13
5.2.1 COFF文件的基本单元—段 ⚫通用目标文件格式COFF: Common Object File Format ⚫段(section)是COFF文件的基本单元。一个段是一个 占据存储器里连续地址的代码或者数据块, COFF目标 文件的每个段都是分开和不同的 ⚫COFF目标文件通常包括3个默认段,即 .text段,通常包含可执行代码 .data段,通常包含初始化数据 .bss段,通常为未初始化变量保留存储空间 13
些汇编伪指令可将代码和数据的各个部分与相 应的段相联系 目标文件 目标存储器 bss RAM data EPROM text ROM 图52目标文件中的段与目标存储器的关系 14
⚫ 一些汇编伪指令可将代码和数据的各个部分与相 应的段相联系 RAM EPROM ROM .data .text .bss 目标文件 目标存储器 图5-2目标文件中的段与目标存储器的关系 14
522汇编器对段的处理 ●汇编器通过段伪指令自动识别各个段,并 将段名相同的语句汇编在一起; ●汇编器有5条伪指令可以识别汇编语言程序 的各个不同段: ◆text、data、,sec创建初始化段 ◆bss和usec创建未初始化段 ◆sec与,usec创建自定义段和子段 15
5.2.2 汇编器对段的处理 ⚫ 汇编器通过段伪指令自动识别各个段,并 将段名相同的语句汇编在一起; ⚫ 汇编器有5条伪指令可以识别汇编语言程序 的各个不同段: ◆ .text、.data、.sect创建初始化段 ◆ .bss和.usect创建未初始化段 ◆ .sect与.usect创建自定义段和子段 15
1未初始化段 ●未初始化段占用处理器存储空间,常常分配到RAM ●未初始化段在目标文件里无实际内容,仅用于保留存储 空间,当程序在运行时用这些空间来创建和存储变量; ●汇编命令bss和 sect用来创建未初始化数据区域: bss, symbol size L[blocking fiag]Alignment iag]] symbol usect section name size L[blocking flag] Alignment fagl symbol:指向b者Usec指sze:为对应段开辟的存储空间 令创建的段的第一个字对应该大小,单位为字。 存储空间的变量名可被其他段 引用被声明为一个全局符号 sectionname:段名 blocking flag:可选。若是非零值汇编同 lignment flag:可选。 器会连续分配字节空间这些区域不会若是非零值该段会在 超出一页边界除非该段大于一页在这个长字边界开始。 种情况下目标文件会在页边界开始)
1.未初始化段 ⚫未初始化段占用处理器存储空间, 常常分配到RAM; ⚫未初始化段在目标文件里无实际内容, 仅用于保留存储 空间, 当程序在运行时用这些空间来创建和存储变量; ⚫汇编命令.bss和.usect用来创建未初始化数据区域: .bss symbol, size [,[blocking flag][,alignment flag]] symbol .usect ”section name”,size [,[blocking flag] [,alignment flag]] size: 为对应段开辟的存储空间 大小, 单位为字。 alignment flag: 可选。 若是非零值,该段会在一 个长字边界开始。 symbol: 指向.bss或者.usect指 令创建的段的第一个字, 对应该 存储空间的变量名; 可被其他段 引用,被声明为一个全局符号。 section name:段名 16 blocking flag: 可选。若是非零值, 汇编 器会连续分配字节空间, 这些区域不会 超出一页边界, 除非该段大于一页(在这 种情况下, 目标文件会在页边界开始)
1未初始化段 每次使用bs指令,汇编器就在对应的段开辟更 多的存储空间 每次使用 sects指令,汇编器就在指定的自定义 段开辟更多的存储空间 ●bss和usec指令不结束当前段的汇编去开始一 个新的段,它们仅仅让汇编器暂时退出当前段的 编辑 bss和,usec指令可以出现在一个初始化段的任 何地方而不会影响该段的内容
1.未初始化段 ⚫ 每次使用.bss指令,汇编器就在对应的段开辟更 多的存储空间 ⚫ 每次使用.usect指令,汇编器就在指定的自定义 段开辟更多的存储空间 ⚫ .bss和.usect指令不结束当前段的汇编去开始一 个新的段,它们仅仅让汇编器暂时退出当前段的 编辑 ⚫ .bss和.usect指令可以出现在一个初始化段的任 何地方而不会影响该段的内容 17