4.13.1. ADRL 伪指令

将相对于程序或相对于寄存器的地址载入寄存器中。 与 ADR 指令相似。ADRL 生成两个数据处理指令,因此它比 ADR 加载的地址范围要宽。

Note

在为 Thumb-2 之前的处理器汇编 Thumb 指令时,不能使用 ADRL

语法

ADRL{cond} Rd,label

其中:

cond

是一个可选的条件代码(请参阅条件执行)。

Rd

是要加载的寄存器。

label

是相对于程序或寄存器的表达式。 有关详细信息,请参阅相对寄存器和程序相对的表达式

用法

ADRL 始终汇编为两个 32 位指令。 即使使用单个指令就可完成地址访问,也会生成多余的第二个地址。

如果汇编器无法将地址构建为两个指令,则它将生成一条错误消息,汇编将失败。 有关加载更宽范围地址的信息,请参阅LDR 伪指令(另请参阅将常数加载到寄存器)。

ADRL 可生成与位置无关的代码,因为地址相对于程序或寄存器。

如果 label 相对于程序,则它必须计算为与 ADRL 伪指令处于同一汇编器区域内的地址,请参阅AREA

如果使用 ADRL 来为 BXBLX 指令生成目标,则当目标中包含 Thumb 指令时,您就要自己设置地址的 Thumb 位(位 0)。

体系结构和范围

可用范围取决于所用的指令集:

ARM

±64KB,字节或半字对齐的地址。

±256KB 字节,字对齐地址。

32 位 Thumb

±1MB 字节,字节、半字或字对齐地址。

16 位 Thumb

ADRL 不可用。

上面给出的范围是相对于位于当前指令地址后的、距离当前指令四个字节(在 Thumb 代码中)或两个字(在 ARM 代码中)远的点而言的。 如果对齐为 16 字节,或与此点的相关性更高,则远程地址的范围可更大。

Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IC
Non-Confidential