第3章 Cortex-A8处理器编程
3.6 指令系统
ARM伪指令不属于ARM指令集中的指令,是为了编程方便而定义的。伪指令可以像其它ARM指令一样使用,但在编译时这些指令将被等效的ARM指令代替。ARM伪指令有四条,分别为ADR伪指令、ADRL伪指令、LDR伪指令、NOP伪指令。
ARM伪指令——小范围的地址读取
ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。
地址表达式expr的取指范围:
当地址值不是字对齐时,其取值范围为-255~255;
当地址值是字对齐时,其取值范围为-1020~1020;
当地址值是16字节对齐时,其取值范围将更大。
应用示例(源程序):
...
ADR R0,Delay
...
Delay
MOV R0,r14
...
使用伪指令将程序标号Delay的地址存入R0
ARM伪指令——中等范围的地址读取
ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址 。在汇编编译器编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。
地址表达式expr的取指范围:
当地址值不是字对齐时,其取址范围为-64K~64K;
当地址值是字对齐时,其取址范围为-256K~256K;
当地址值是16字节对齐时,其取址范围将更大。
应用示例(源程序):