获取ARM上的寄存器的标签地址?

时间:2013-04-02 21:18:54

标签: arm

如何编写将标签所引用的地址放入寄存器的指令?

1 个答案:

答案 0 :(得分:5)

有四种方式,其中三种方式记录在Sourceware's Gnu Assembler manual。我想这个标签是这样的,

 target:
     .long 0xfeadbeef
  1. adr r0,target
  2. adrl r0,target
  3. ldr r0,=target
  4. sub r0,pc,#(.+8-target)
  5. 前两个非常相似并生成sub r0,pc,#offset。 3 rd 文字池中放置一个long并通过ldr r0,[pc,#offset2]加载它,或者如果汇编器发现它可以使用mov(通常是对齐的标签,例如 0x8000 )。最后一个版本是手动计算它。

    adradrl之间的差异来自即时操作数。它们 8bits 旋转了两倍的倍数。因此,如果地址很远,您可能需要执行两条指令,这通常比通过数据获得完整32位的3 rd ldr变体更快。缓存内存

    另请参阅:Relocation in assembler