关于AREA和ENTRY的理解

来源:互联网 发布:网络进度计划图 编辑:程序博客网 时间:2024/05/27 00:41
1、AREA    

AREA指令指示汇编程序汇编新的代码节或数据节。节是不可分的已命名独立代码或数据块,它们由链接器处理。有关详细信息,请参阅ELF节和AREA指令。

语法

    AREA sectionname{,ATtr}{,ATtr}...

其中:

    sectionname
是将要指定的节名。

可以为节选择任何名称。但是,以数字开始的名称必须包含在竖杠内,否则会产生一个缺失节名错误。 例如,|1_DATaArea|。有些名称是习惯性的名称。 例如,|.text| 用于表示由 C 编译器生成的代码节,或以某种方式与 C 库关联的代码节。

    ATtr
是一个或多个用逗号分隔的节属性。有效的属性有:

    ALIGN=expression_r
缺省情况下,ELF节在四字节边界上对齐。expression_r可以取值0到31之间的任何整数。节在2^expression_r字节边界上对齐。例如,如果expression_r是10,则节在 1KB 边界上对齐。这与 ALIGN 指令所指定的方式不同。请参阅ALIGN。

    注意:

不要对ARM代码节使用ALIGN=0或ALIGN=1。

不要对Thumb代码节使用ALIGN=0。

    ASSOC=section
    section 指定一个关联的ELF节。sectionname 必须包含在含有section 的任何链接中

    CODE
包含机器指令。READONLY 是缺省值。

CODEALIGN
当在节内的 ARM 或 Thumb 指令后使用 ALIGN 指令时,该属性导致汇编程序插入 NOP 指令,除非 ALIGN 指令指定了其他填充方式。

COMDEF
是一个公共节定义。 此 ELF 节可以包含代码或数据。 它必须等同于其他源文件中拥有相同名称的任何其他节。

名称相同的同一 ELF 节在内存的同一节中被链接器覆盖。 如果有任何不同,则链接器会产生一个警告,并且不覆盖这些节。 请参阅 《RealView 编译工具链接器和实用程序指南》中的第 3 章 使用基本链接器功能。

    COMGROUP=symbol_name
是一个公共组节。公共组中的所有节都是公共的。当对象被链接后,其他目标文件可能具有带有symbol_name 签名的一个 GROUP。最终映像中只包含一个组。

    COMMON
是一个公共数据节。 不能在其中定义任何代码或数据。 它由链接器初始化为零。 名称相同的所有公共节在内存的同一节中被链接器覆盖。 它们并不都必须具有相同大小。 链接器按每个名称的最大公共节的需要分配空间。

    DATA
包含数据,不包含指令。READWRITE 是缺省值。

    GROUP=symbol_name
是组的签名,它必须由源文件或源文件中包含的文件定义。 具有相同 symbol_name 签名的所有 AREAS 都被置于同一组中。 组内的各节同时保存或显现。

NOALLOC
指示在目标系统上没有为此区域分配内存。

    NOINIT
指示数据节未初始化,或初始化为零。 它只包含空间保留指令 SPACE 或初始化值为零的 DCB、DCD、DCDU、DCQ、DCQU、DCW 或 DCWU。 您可以在链接时决定某区域是未初始化还是初始化为零(请参阅 《RealView 编译工具链接器和实用程序指南》中的第 3 章 使用基本链接器功能)。

    READONLY
指示不应向此节写入。 这是代码区域的缺省值。

    READWRITE
指示可以读写此节。 这是数据区域的缺省值。

    用法
    使用AREA指令可将源文件细分为ELF节。 可以在多个 AREA 指令中使用相同的名称。 名称相同的所有区域都放在相同的 ELF 节中。 只有特定名称的第一个 AREA 指令的属性才会被应用。通常应对代码和数据使用不同的 ELF 节。 大型程序通常可方便地划分为多个代码节。 大量独立的数据集通常也最好放在不同的节中。局部标签的作用域是由 AREA 指令定义的,并可选择用 ROUT 指令细分(请参阅局部标签和ROUT)。

    一组汇编代码必须至少有一个 AREA 指令。

    示例
    下列示例定义名为 Example 的只读代码节。

    AREA    Example,CODE,READONLY   ; An example code section.

            ; code

 
2、ENTRY    
    语法格式:    
    ENTRY    
    ENTRY伪指令用于指定汇编程序的入口点。在一个完整的汇编程序中至少要有一个ENTRY(也可以有多个,当有多个ENTRY时,程序的真正入口点由链接器指定),但在一个源文件里最多只能有一个ENTRY(可以没有)。    
    使用示例:    
    AREA Init ,CODE ,READONLY    
    ENTRY ; 指定应用程序的入口点
原创粉丝点击