您的位置:首页 > 其它

ARM PC的值问题

2014-04-30 18:23 239 查看
PC=当前指令地址+8
主要原因是流水线。
流水线主要由三个部分组成:
1、取指 2、译码 3、执行
多级的流水线也是这三个部分的细分。
当当前指令在执行时,下一条指令正在译码,再下一条指令正在读取,PC的值为正在读取的指令的地址。
每条指令在ARM指令集下为4字节,当前指令地址与正在读取指令地址相差的8个字节。
所以PC=当前指令地址+8。

在中断时,会有一个保存LR的动作,但该值为当时PC的值,然后处理器会对LR进行一次自动调整,使LR=LR-0x04,所以最终在LR中的值是中断发生时正在执行语句(该语句)的下一条指令的地址。

1、软中断异常,即中断发生时的指令为SWI的话,从SWI中断,即软中断中返回后应该执行SWI语句的下一条,这条语句正好是LR中的地址。

2、IRQ或FIQ异常中断时,需要重新执行中断发生时的语句,所以应该用LR-4。

3、data
abort数据中止异常中止,因为导致数据异常的原因应该是中断发生时语句的上一条语句,所以应该用LR-8

4、Undefined未定义指令返回时LR。

5、预取指令中止LR-4。

注意:复位中断不用定义LR
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: