2
如何編寫一個指令,該指令將標籤引用的地址放入寄存器中?在ARM上獲取標籤地址到寄存器?
如何編寫一個指令,該指令將標籤引用的地址放入寄存器中?在ARM上獲取標籤地址到寄存器?
有四種方法,其中三種記錄在Sourceware's Gnu Assembler manual。我猜的標籤是一樣的東西,
target:
.long 0xfeadbeef
adr r0,target
adrl r0,target
ldr r0,=target
前兩者非常相似,並且產生sub r0,pc,#offset
。 3 RD經由ldr r0,[pc,#offset2]
把一個長在文字池和負載這或者如果彙編程序找到它可以它可能使用一個mov
(通常是對齊的標籤,在像等於0x8000 )。最後一個版本是手動計算它。
adr
和adrl
之間的差異來自立即操作數。它們是以2的倍數旋轉的8位。因此,如果地址很遠,則可能需要執行兩條指令,這通常比通過數據高速緩存或內存獲得完整32位的變體更快。