5.2TMS320C55x目标文件格式 ■5.2.1C0FF文件的基本单元一段 ■5.2.2汇编器对段的处理 ■5.2.3链接器对段的处理 ■5.2.4链接器对程序的重新定位 ■5.2.5C0FF文件中的符号 19
5.2 TMS320C55x目标文件格式 ◼ 5.2.1 COFF文件的基本单元——段 ◼ 5.2.2 汇编器对段的处理 ◼ 5.2.3 链接器对段的处理 ◼ 5.2.4 链接器对程序的重新定位 ◼ 5.2.5 COFF文件中的符号 19
5.2.2汇编器对段的处理 汇编器通过段伪指令自动识别各个段,并将段名 相同的语句汇编在一起; 汇编器有5条伪指令可以识别汇编语言程序的各 个不同段: ◆.text、.data、.sect创建初始化段 ◆.bss和.usect创建未初始化段 ◆.sect与.usect创建自定义段和子段 本节内容:1.未初始化段;2.初始化段;3.自定义段 4.子段;5.段指钍;例5-1段伪指令的使用 20
5.2.2 汇编器对段的处理 ⚫ 汇编器通过段伪指令自动识别各个段,并将段名 相同的语句汇编在一起; ⚫ 汇编器有5条伪指令可以识别汇编语言程序的各 个不同段: ◆ .text、.data、.sect创建初始化段 ◆ .bss和.usect创建未初始化段 ◆ .sect与.usect创建自定义段和子段 20 本节内容: 1. 未初始化段;2. 初始化段;3. 自定义段; 4. 子段;5. 段指针;例5-1 段伪指令的使用
1.未初始化段 .bss buffer,10;在.bss段保留10个单元 ●未初始化段占用处理器存储空间,常常分配到RAM, 未初始化段在目标文件里无实际内容,仅用于保留存储 空间,当程序在运行时用这些空间来创建和存储变量, 汇编命令.bss和.usect用来创建未初始化数据区域: .bss_symbol,size [,[blocking flag][,alignment flag]] symbol .usect "section name"size [[blocking flag][alighment flag]] symbo:指向.bss或者.usect指 size:为对应段开辟的存储空间 令创建的段的第一个字,对应该 大小,单位为字。 存储空间的变量名;可被其他段 引用被声明为一个全局符号。 section name:段名,例var 51 ocking flag:可选。若是非零值,汇编器 alignment flag:可选.若 会连续分配siz字空间,这些区域块不会跨 是非零值(取2”,n=0~7), 越一页边界(size<128),除非该段大于一页 该段会按给出的字边界 (在这种情况下,目标文件会在页边界开始) 值开始存放段。 21
1.未初始化段 ⚫未初始化段占用处理器存储空间, 常常分配到RAM; ⚫未初始化段在目标文件里无实际内容, 仅用于保留存储 空间, 当程序在运行时用这些空间来创建和存储变量; ⚫汇编命令.bss和.usect用来创建未初始化数据区域: .bss symbol, size [,[blocking flag][,alignment flag]] symbol .usect ”section name”,size [,[blocking flag] [,alignment flag]] size: 为对应段开辟的存储空间 大小, 单位为字。 symbol: 指向.bss或者.usect指 令创建的段的第一个字, 对应该 存储空间的变量名; 可被其他段 引用,被声明为一个全局符号。 section name:段名, 例var 21 blocking flag: 可选。若是非零值, 汇编器 会连续分配size字空间, 这些区域块不会跨 越一页边界(size<128), 除非该段大于一页 (在这种情况下, 目标文件会在页边界开始) .bss buffer, 10 ;在.bss段保留10个单元 alignment flag: 可选. 若 是非零值(取2 n , n= 0~7), 该段会按给出的字边界 值开始存放段
1.未初始化段 .bss buffer,.10;在.bss段保留10个单元 .bss buff,20;在.bss段保留20个单元 每次使用.bss指令,汇编器就在对应的段开辟更 多的存储空间 每次使用.usect指令,汇编器就在指定的自定义 段开辟更多的存储空间 bss和.usect指令不结束当前段(例.data段)的 汇编去开始一个新的段,它们仅仅让汇编器暂时 退出当前段(例.data段)的编辑 bss和.usect指令可以出现在一个初始化段 (例.data段)的任何地方而不会影响该段的内容 22
1.未初始化段 ⚫ 每次使用.bss指令,汇编器就在对应的段开辟更 多的存储空间 ⚫ 每次使用.usect指令,汇编器就在指定的自定义 段开辟更多的存储空间 ⚫ .bss和.usect指令不结束当前段(例.data段)的 汇编去开始一个新的段,它们仅仅让汇编器暂时 退出当前段(例.data段)的编辑 ⚫ .bss和.usect指令可以出现在一个初始化段 (例 .data段)的任何地方而不会影响该段的内容 22 .bss buffer, 10 ;在.bss段保留10个单元 .bss buff, 20 ;在.bss段保留20个单元
2.初始化段 初始化段包含可执行代码或者初始化数据:当程序被 装载时,它们就被放到处理器存储空间里; ●每个初始化段独立分配空间,可以引用在其他段定义 的标识(symbol),链接器自动处理这些段间引用, 定义初始化段的指令: vaue表示段指针(SPC)的开 始值,只可以指定一次,必须 .text [valuel 在段第一次出现时指定。 .data [value] 默认SPC从O开始。 .sect "section name"[,value] 当汇编器遇到其中一个指令就停止当前段的汇编(就好像一个 当前段结束命令),而将后面的代码汇编到另外指定的段,直到 遇到另一个.text、.data或者.sect指令 3
2.初始化段 ⚫初始化段包含可执行代码或者初始化数据; 当程序被 装载时, 它们就被放到处理器存储空间里; ⚫每个初始化段独立分配空间, 可以引用在其他段定义 的标识(symbol), 链接器自动处理这些段间引用; ⚫定义初始化段的指令: .text [value] .data [value] .sect ”section name”[,value] value表示段指针(SPC)的开 始值, 只可以指定一次,必须 在段第一次出现时指定。 默认SPC从0开始。 当汇编器遇到其中一个指令就停止当前段的汇编(就好像一个 当前段结束命令), 而将后面的代码汇编到另外指定的段, 直到 遇到另一个.text、.data或者.sect指令。 23