寄存器 R15 为程序计数器(PC),它指向 正在取指的地址
。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。
ARM9 正常操作时,从 R15 读取的值是处理器 正在取指的地址
,即:
R15(PC)= 当前正在执行指令的地址 + 8
注:
- 8 是指 8 个字节,是两条 ARM 指令的长度。
- ARM 是 3 级流水线:取指,译码,执行。
由于 ARM7 指令总是以字为单位,所以 R15 寄存器的最低两位总是为 0。
R15 值的改变将引起程序执行顺序的改变。
向 R15 内写入一个值,程序将跳转到以 R15 值为地址的程序执行
下面讲一下上面代码段中的公式怎么推出来的:
ARM7 架构采用了一个 3 段的流水线:
- 取指:将指令从内存中取出来。
- 译码:操作码和操作数被译码以决定执行什么功能。
- 执行:执行已译码的指令。
由上述三级指令流程我们可以很容易得出下面这幅流程图:
从第三列我们可以看出来 PC 指向的正在取指的指令是第三条指令,其地址是 ox00000008,而正在执行的指令是第一条指令,其地址是 0x00000000。很容易看出相差 8。