一些汇编伪指令可将代码和数据的各个部分与相应的段相联系,可以更有效地利用存储器,用户可以将任何段放到存储器的任何存储块上
2. 汇编器对段的处理
汇编器通过段伪指令自动识别各个段,并将段名相同的语句汇编在一起
汇编器有5条伪指令可以识别汇编语言程序的各个不同段 .text、.data、.sect创建初始化段
.bss和.usect创建未初始化段
.sect与.usect创建自定义段和子段
2.1 未初始化段
未初始化段占用处理器存储空间,常常分配到RAM
未初始化段在目标文件里没有实际内容,仅仅用于保留存储空间,当程序在运行时用这些空间来创建和存储变量
汇编命令.bss和.usect用来创建未初始化数据区域
.bss symbol, size [,[blocking flag][,alignment flag]]
symbol .usect “section name”, size [,[blocking flag][,alignment flag]]
symbol:指向.bss指令创建的段的第一个字,对应该存储空间的变量名。可被其他段引用,被声明为一个全局符号
size:为对应段开辟的存储空间大小,单位为字
blocking flag:可选参数。如果赋予一个非零值给该参数,汇编器会连续分配字节空间,这些区域不会超出一页边界,除非该段大于一页。
alignment flag: 可选参数。如果赋予一个非零值给该参数,该段会在一个长字边界开始
section name:段名
2.2 .初始化段
初始化段包含可执行代码或者初始化数据;当程序被装载时,它们就被放到处理器存储空间里
每个初始化段独立分配空间,可以引用在其他段定义的标识(symbol),链接器自动处理这些段间引用
定义初始化段的指令:
.text
.data
.sect ”section name”[,value] value表示段指针SPC的初值,默认为0
2.3 自定义段
usect 创建像.bss段那样的段,这些段为变量在RAM开辟存储空间。
.sect创建像.text和.data段那样包含代码和数据的段,可以创建可重分配地址的自定义段。
用户可以创建多达32767个自定义段,段名多至200个字符。
每次使用这两个指令可以用不同的section name来创建不同的段,如果用一个已经使用的section name,那么汇编器将代码和数据都汇编到同一个段。
2.4 子段
子段是更大的段中的较小的段,链接器可以像段一样操作它
子段让用户可以更好的控制存储器映射
可以使用.sect或者.usect指令