今天复习了一遍arm的体系结构与指令系统,发现有很多遗留的东西没搞明白:1.多级流水线 2.中断PC保存与恢复为什么要偏移4或8
了解了流水线的过程后,有点豁然开朗的感觉。
假设程序为:
0:
ldr r3, [r0], #4
str r3, [r1], #4
cmp r2, r0
bne 0b
ARM9的5级流水线过程:
1.取指----------->2译码----------->3执行----------->4存储----------->5写
bne cmp str ldr
当前执行的指令是str,而pc指向bne,是当前执行指令的第二条指令,arm的指令为4字节,所以pc值永远为当前指令的地址加8。
注意:
1)执行一条分支指令或直接修改 PC 而发生跳转时,会使 ARM 内核凊空流水线
2)即使产生了一个中断,一条处于“执行”阶段的指令也将会完成。流水线里其他指令将会放弃,而处理器将从向量表的适当入口开始填充流水线
理解了5级流水线的原理后,回过头去看中断的pc值设置就不会再困惑了。