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