ARM PC的值问题

本文探讨了ARM处理器在不同异常情况下的返回机制:软中断返回执行SWI的下一条指令;IRQ/FIQ异常需回退4个字节执行;数据中止异常则回退8个字节;未定义指令异常使用LR;预取中止同样回退4个字节。复位中断不涉及LR的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值