1.  .ltorg
2. DECLARE_GLOBAL_DATA_PTR


 


1.  .ltorg


LTORGLTORG 指令指示彙編器立即彙編當前文字池。
(in gcc is .ltorg  the literal pools origin)
 
 
語法LTORG
用法彙編器在每個代碼節末尾彙編當前文字池。代碼節的結束位置由後續節開始處的 AREA 指令確定,或由彙編代碼的結束位置確定。
這些缺省文字池有時會超出某些 LDR、VLDR 和 WLDR 偽指令的範圍。使用 LTORG 可確保在指定範圍內彙編文字池。有關偽指令的詳細信息,請參閱:
LDR偽指令
VLDR偽指令
無線MMX加載和存儲指令
大型程序可能需要多個文字池。將 LTORG 指令放在無條件跳轉或子例程返回指令之後,以使處理器不會試圖將常數作為指令來執行。
彙編器對文字池中的數據進行字對齊。
示例        AREA Example, CODE, READONLY
 start BL func1
 func1 ; function body
         ; code
         LDR r1,=0x55555555 ; => LDR R1, [pc, #offset to Literal Pool 1]
         ; code
         MOV pc,lr ; end function
         LTORG ; Literal Pool 1 contains literal &55555555.
 data SPACE 4200 ; Clears 4200 bytes of memory,
                                 ; starting at current location.
         END ; Default literal pool is empty.


2. DECLARE_GLOBAL_DATA_PTR


DECLARE_GLOBAL_DATA_PTR 只是一个定义的宏,这个宏定义了一个gd_t全局数据结构的指针,这个指针存放在指定的寄存器中(386体系结构没有放到指定寄存器中)。

例如mips体系结构中,DECLARE_GLOBAL_DATA_PTR定义如下:
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("k0")

例如ppc体系结构中,DECLARE_GLOBAL_DATA_PTR定义如下:
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r29")

例如ARM体系结构中,DECLARE_GLOBAL_DATA_PTR定义如下:
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r9")

例如386体系结构中,DECLARE_GLOBAL_DATA_PTR定义如下:
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd = global_data

例如M68K体系结构中,DECLARE_GLOBAL_DATA_PTR定义如下:
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("d7")

例如nios结构中,DECLARE_GLOBAL_DATA_PTR定义如下:
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("%g7")


 

arrow
arrow
    全站熱搜

    立你斯 發表在 痞客邦 留言(0) 人氣()