标题:
ARM指令集-段定义伪指令
[打印本页]
作者:
look_w
时间:
2017-9-24 15:45
标题:
ARM指令集-段定义伪指令
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
的常数,并按
2
2
~
30
设定对齐地址。
ALIGNRAM
以数据增量方式对齐,
ALIGNROM
以填充
0
字节方式对齐。
9、EVEN和ODD
该伪指令的格式为:
EVEN [填充值]
ODD [填充值]
EVEN
伪指令用于将程序计数器
PC
以偶数地址对齐(等价于
ALIGNROM 1
),
ODD
伪指令用于将程序计数器
PC
以奇数地址对齐。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0