1. 首先要谈流水线,在arm执行过程中一般分为取指,译码,执行阶段
也就是假设当前 第一条指令在执行阶段
第二条指令在译码阶段
第三条指令在取指阶段
当前正在执行的指令地址为pc-8,第二条就为pc-4,而pc现在真正指向已处于pc位置
2. 一般pc在发生中断时lr保存的是当前的pc值,这里pc值是多少呢??
当发生中断肯定保存的pc是第三条指令,而我们从中断返回肯定不是执行第三条指令,而是紧接着的第二条指令,所以应该保存的 lr = pc - 4,但是当执行到此位置时pc值已经改变,肯定不对,还好发生中断时 mov lr,pc 所以这里就可以直接使用 sub lr,lr,#4