ARMv7 寄存器详解大全( 五 )

  1. S1

  2. S2

  3. S3

  4. S4

当执行S1指令的时候 , 触发了系统调用或者未定义指令(系统调用和未定义还没有执行完成 , 因此执行指令依然是S1没有更新) , 此时PC指向S3(PC始终指向正在取指的值) , LR的值为PC - 4(ARM模式) 。 因此 , 返回的时候 , 我们希望从S2开始运行 , 因此 , PC应该赋值为:mov pc lr

3、FIQ和IRQ异常返回

点击(此处)折叠或打开

  1. S1

  2. S2

  3. S3

  4. S4

当执行S1指令时 , 发生了中断(中断会等到S1指令执行结束后才响应 , 因此执行指令和PC都已经更新 , 为S2和S4) , 此时PC指向S4 , LR的值为PC-4即S3 。 因此 , 返回的时候 , 我们希望程序从S2开始运行 , 故 , PC应该赋值为: subs pc lr #4 。

推荐阅读