彙編中AREA指令的使用

AREA指令指示彙編程序彙編新的代碼節或數據節。節是不可分的已命名獨立代碼或數據塊,它們由鏈接器處理。有關詳細信息,請參閱ELF節和AREA指令。

語法

    AREAsectionname{,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   ; Anexample code section.

           ; code

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章