在 ARM 汇编中,AREA 伪操作用于定义一个代码段或数据段。
基本格式,英文描述:
AREA section_name{,attr1}{,attr2}{,attr3}...
基本格式,中文描述:
AREA 段名, 属性1, 属性2, 属性3, ...
注:
- 段名
1.段名 属于可选项;
2.段名 可以用竖线|括起,也可以不用|。
主要属性
1. 段类型 属性
CODE- 代码段 默认为READONLYDATA- 数据段 默认为READWRITEREADONLY- 只读(通常用于代码段)READWRITE- 可读写(通常用于数据段)
简记:
一般看到 CODE 情况就是:CODE, READONLY一般看到 DATA 情况就是:
DATA, READWRITE
2. 对齐 属性
ALIGN=n- 按 2^n 字节对齐ALIGN=2表示 4 字节对齐(常用)ALIGN=3表示 8 字节对齐
在默认时,ELF(可执行连接文件)的代码段和数据段是按字对齐的,表达式的取值范围为0~31,相应的对齐方式为2 表达式次方。
3. 其它 属性
NOINIT- 不初始化(用于 BSS 段)INIT- 初始化COMMON- 公共段(通用段)
不包含任何的用户代码和数据。
各源文件中同名的COMMON段共享同一段存储单元。THUMB- Thumb 代码ARM- ARM 代码(32位)
功能:
一个汇编语言程序至少要包含一个段,当程序太长时,也可以将程序分为多个代码段和数据段。
常用示例
代码段定义
AREA |.text|, CODE, READONLY, ALIGN=2
; 代码内容
MOV R0, #0
BX LR
数据段定义
; 只读数据
AREA |.rodata|, DATA, READONLY
my_const DCD 0x12345678
; 可读写数据
AREA |.data|, DATA, READWRITE
my_var DCD 0
BSS 段(未初始化数据)
AREA |.bss|, DATA, READWRITE, NOINIT
buffer SPACE 256 ; 保留 256 字节
完整示例
; 代码段
AREA RESET, CODE, READONLY
ENTRY
START
LDR SP, =0x40001000
BL main
B .
; 子程序
AREA |.text|, CODE, READONLY, ALIGN=2
main
MOV R0, #0x42
BX LR
; 数据段
AREA |.data|, DATA, READWRITE
value DCD 0x1234
注意事项
- 段名通常用竖线
|括起,但不是必须的 //★ - 代码段一般设置为
READONLY - 多个
AREA可以定义多个段 - 程序入口点用
ENTRY标记 - 默认情况下,ARM 汇编器期望 4 字节对齐
这是 ARM 汇编(armasm)的标准格式,不同于 GNU 汇编器(gas)的语法。
