2013-04-02 62 views

回答

3

有四種方法,其中三種記錄在Sourceware's Gnu Assembler manual。我猜的標籤是一樣的東西,

target: 
    .long 0xfeadbeef 
  1. adr r0,target
  2. adrl r0,target
  3. ldr r0,=target
  4. ​​

前兩者非常相似,並且產生sub r0,pc,#offset。 3 RD經由ldr r0,[pc,#offset2]把一個長在文字池和負載這或者如果彙編程序找到它可以它可能使用一個mov(通常是對齊的標籤,在像等於0x8000 )。最後一個版本是手動計算它。

adradrl之間的差異來自立即操作數。它們是以2的倍數旋轉的8位。因此,如果地址很遠,則可能需要執行兩條指令,這通常比通過數據高速緩存內存獲得完整32位的變體更快。

另請參閱:Relocation in assembler