在程序跳转时,常常会看到相对跳转、绝对跳转、位置无关码、位置有关码,概念经常混淆,我们首先明确:
BL main // 相对跳转指令,与位置无关代码,相当于 PCnew = PC + 偏移
LDR PC,=main // 绝对跳转指令,与位置有关代码
一、ldr pc,=main
(1)ldr pc, =main 这条指令为伪指令,编译的时候将 main 的链接地址存入一个中间地址。
(2)将 ldr pc, =main 转化为 ldr pc,[ pc, offset ],因此经过计算得到的是这个中间地址的值。
这里计算存入 main 链接地址的中间地址值:pc = pc + 8 + offset,涉及到 ARM 的 3 级流水线结构。
(3)这里将 main