ADRL 伪指令
时间:2010-09-06 来源:hunaiquan
将相对于程序或相对于寄存器的地址载入寄存器中。 与 ADR 指令相似。ADRL 生成两个数据处理指令,因此它比 ADR 加载的地址范围要宽。
Note
在为 Thumb-2 之前的处理器汇编 Thumb 指令时,不能使用 ADRL。
语法
ADRL{cond} Rd,label
其中:
cond是一个可选的条件代码(请参阅条件执行)。
Rd是要加载的寄存器。
label是相对于程序或寄存器的表达式。 有关详细信息,请参阅相对寄存器和程序相对的表达式。
用法
ADRL 始终汇编为两个 32 位指令。 即使使用单个指令就可完成地址访问,也会生成多余的第二个地址。
如果汇编器无法将地址构建为两个指令,则它将生成一条错误消息,汇编将失败。 有关加载更宽范围地址的信息,请参阅LDR 伪指令(另请参阅将常数加载到寄存器)。
ADRL 可生成与位置无关的代码,因为地址相对于程序或寄存器。
如果 label 相对于程序,则它必须计算为与 ADRL 伪指令处于同一汇编器区域内的地址,请参阅AREA。
如果使用 ADRL 来为 BX 或 BLX 指令生成目标,则当目标中包含 Thumb 指令时,您就要自己设置地址的 Thumb 位(位 0)。
体系结构和范围
可用范围取决于所用的指令集:
ARM±64KB,字节或半字对齐的地址。
±256KB 字节,字对齐地址。
32 位 Thumb±1MB 字节,字节、半字或字对齐地址。
16 位 ThumbADRL 不可用。
上面给出的范围是相对于位于当前指令地址后的、距离当前指令四个字节(在 Thumb 代码中)或两个字(在 ARM 代码中)远的点而言的。如果对齐为 16 字节,或与此点的相关性更高,则远程地址的范围可更大。