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