3.5.4 段定义伪指令1、ASEG和ASEGN
该伪指令的格式为:
ASEG [起始地址[(对齐)]]
ASEGN 段名[:存储器类型],地址
ASEG伪指令用于定义一个绝对段,并设置段的起始地址。不指定地址值时第一个段默认起始地址为0,后续段地址依次递增。ASEGN伪指令用于设置指定段的绝对起始地址,并允许规定段类型。存储器类型可以为CODE(代码段)、DATA(数据段)、STACK(堆栈段)。
如:
ASEG 0 ;定义一个绝对段,起始地址0
ASEGN CODE:CODE,0;定义一个名为CODE的代码段,起始地址0
2、RSEG
该伪指令的格式为:
RSEG 段名[:存储器类型][NO)ROOT|(NO)REORDER|SORT][(对齐)]
RSEG伪指令用于定义一个可重定位段,段的起始地址由汇编器临时分配。单个模块中最多可定义65536个可重定位段。
如:
RSEG CODE:CODE:ROOT(2);定义一个名为CODE的可重定位代码段,用户权限为ROOT(可读写),段内存储器对齐方式为4字节对齐
3、DATA
该伪指令的格式为:
DATA 段名[:存储器类型][(对齐)]
DATA伪指令可以在代码段内定义一个数据区。
如:
RSEG CODE:CODE:ROOT(2)
DATA
f1: DC32 subrtn
4、STACK
该伪指令的格式为:
COMMON 段名[:存储器类型][(对齐)]
STACK伪指令用于定义一个堆栈段,用作堆栈的存储器地址从高向低变化,而用作可重定位段的存储器地址是从低向高变化。
5、COMMON
该伪指令的格式为:
COMMON 段名[:存储器类型][(对齐)]
COMMON伪指令用于定义公共段,各源文件中同名的COMMON段共享同一段内存。它的典型应用是多个不同子程序共享一段数据存储区。中断向量表也可安排在COMMON段,以便允许从多个服务子程序访问。
6、CODE16和CODE32
CODE16伪指令用于告诉汇编器,其后的指令序列为16位的Thumb指令;CODE32伪指令用于告诉汇编器,其后的指令序列为32位的ARM指令。因此,在使用ARM指令和Thumb指令混合编程的代码中,可用这两条伪指令进行切换。但需要注意的是,它们只通知汇编器其后指令的类型,并不能对处理器进行状态切换。
7、ORG
该伪指令的格式为:
ORG 地址表达式
ORG伪指令用于设置段的起始地址。地址表达式的计算结果应与当前段的类型保持一致,如在RSEG(可重定位段)中,不要使用“ORG 10”,因为10是一个绝对地址,而应当使用“ORG.+10”,表示当前段偏移量为10的地址。另外,地址表达式中不能包括任何前向和外部引用。
8、ALIGNRAM和ALIGNROM
该伪指令的格式为:
ALIGNRAM 对齐
ALIGNROM 对齐[,填充值]
用于设置存储器地址边界的对齐方式,“对齐”是一个值为2~30的常数,并按22~30设定对齐地址。ALIGNRAM以数据增量方式对齐,ALIGNROM以填充0字节方式对齐。
9、EVEN和ODD
该伪指令的格式为:
EVEN [填充值]
ODD [填充值]
EVEN伪指令用于将程序计数器PC以偶数地址对齐(等价于ALIGNROM 1),ODD伪指令用于将程序计数器PC以奇数地址对齐。 |