|
1. AREA
AREA伪操作用于定义一个代码段或数据段。ARM汇编程序中一般采用分段式设计,一个ARM源程序至少有一个代码段。
语法格式
AREA sectionname{,attr}{,attr}…
其中:sectionname为所定义的代码段或数据段的名称。如果该名称及数字开头,则该名称必须用“|”括起来,如|1——datasec|。还有一些代码段具有约定的名称,如|.text|表示C语言编译器产生的代码段或者是与C语言库相关的代码段。
attr是该段的属性。在AREA伪操作中,各属性间用逗号隔开。下面列举所有可能的属性:
ALIGN=expression。默认的情况下,ELF(可执行连接文件,由链接器生成)的代码段和数据段是4字节对齐的。Expression可取0~31的数值,相应的对齐方式为(2的expression次幂)字节对齐。如expression=4时,为16字节对齐。
ASSOC=section。指定与本段相连的ELF段。任何时候连接section段也必须包括sectionname段。
CODE定义代码段。默认属性为READONLY。
COMDEF定义一个通用的段。该段可包含代码或数据。在其他源文件中,同名的COMDEF段必须相同。
COMMON定义一个公用的段。该段不包含任何用户代码和数据,链接器将其初始化为0.各源文件中同名的COMMON段共用同样的内存单元,链接器为其分配合适的尺寸。
DATA定义数据段。默认属性为READWRITE。
NOINIT指定本数据段仅保留了内存单元,而没有将各初值写入内存单元,或者将各内存单元值初始化为0.
READONLY指定本段为只读,代码段的默认属性为READONLY。
READWRITE指定本段为可读/写,数据段的默认属性为READWRITE。
使用说明
通常可用AREA伪操作将程序分为多个ELF格式的段。一个大的程序可包括多个代码段和数据段。一个汇编程序至少包含一个代码段。
示例34 AREA伪操作举例
AREA Example,CODE,READONLY
凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网