嵌入式ARM程序高级调试基础:2.举例说明中断处理时PC值和LR寄存器的具体关系?

在ARM架构的中断处理过程中,PC(程序计数器)和LR(链接寄存器)的关系与流水线执行机制及异常类型密切相关。以下通过具体案例说明不同中断场景下两者的关系:

案例1:IRQ中断(PC已更新)

场景:
ARM状态下执行指令序列时发生IRQ中断:

0x4000: ADD R1, R2, R3 ; 指令A(执行中)
0x4004: SUB R4, R5, R6 ; 指令B(译码阶段)
0x4008: MOV R7, #8 ; 指令C(取指阶段,PC指向此处)

中断发生时的硬件行为:

  1. 指令A执行完毕后检测到IRQ中断。

  2. PC已更新:硬件将PC指向下一条待取指指令的地址(0x400C)。

  3. LR保存值:硬件自动将 PC - 4 = 0x4008 存入 LR_irq(指向指令C的地址)。

  4. 返回地址修正:
    • 期望返回地址是 0x4004(指令B,未执行)。

    • 但 LR_irq = 0x4008,因此需通过 SUBS PC, LR, #4 修正为 0x4004。

关键关系:
• PC:中断时指向 0x400C(当前执行地址 0x4000 + 12)。

• LR:保存 PC - 4 = 0x4008,需软件修正偏移量(-4)。

案例2:SWI软中断(PC未更新)

场景:
执行软中断指令 SWI 0:

0x3000: SWI 0 ; 指令A(执行中,触发异常)
0x3004: MOV R0, #1 ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟空胆好小

您的鼓励已签收,我会继续快马加

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值