ARM的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

 

原文鏈接:http://blog.sina.com.cn/s/blog_616619c80100eqkj.html

發佈了25 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章