ARM9——五级流水线结构,以及PC指针
ARM7是三级流水线,所以PC = 执行指令地址 + 8,这很好理解,但是在ARM9中,是五级流水线,
仍然是:PC = 执行指令地址 + 8,而不是 PC = 执行指令地址 + 16.
这个理解显然有些难度,首先看下ARM7和ARM9的流水线区别和联系:
相比ARM7,ARM9采用了更高效的五级流水线设计,在取指令、译码、执行之后,又增加了LS1和LS2阶段,LS1负责加载和存储指令中制定的数据,LS2则负责提取、符号扩展,通过字节或半字加载命令来加载数据,但是LS1和LS2仅对加载(LDR)和存储命令(STR)有效,其他的指令是不需要执行这两个阶段的。
ARM9五级流水线中,读寄存器的操作转移到译码阶段,将三级流水中的执行阶段进一步细化,减少每个始终周期内必须要完成的工作量,这样可以使流水线的各个阶段在功能上更加平衡,避免数据的访问和取指的总线冲突,每条指令的平均周期明显减少。
有一句话要牢记,那就是:
PC不是指向你正在运行的指令,而是-PC始终指向你要取得指令的地址。
【总结】
ARM7的三级流水线,PC=PC+8,
ARM9的五级流水线,也是PC=PC+8,
根本的原因是,两者的流水线设计中,指令的Execute执行阶段,都是处于流水线的第三级。