ARM异常返回PC地址分析
不是指向“正在执行”的指令或正在“译码”的指令。一般来说,
人们习惯性约定将“正在执行的指令作为参考点”,称之为当
前第一条指令,因此PC 总是指向第三条指令。当ARM 状
态时,每条指令为4 字节长,所以PC 始终指向该指令地址
加8 字节的地址,即:PC 值=当前程序执行位置+8;
而ADS 中的pc,是为了调试看着方便而修改过的,它指向
的是正在执行的指令,即“真正pc-8”!!!!!
这部分内容可以参看ARM 体系结构与编程清华大学出版社 杜春雷第九章异常中断处理
1.SWI和和未定义指令异常中断的返回:
指令地址
A
A+4
A+8
返回时,从发生中断的指令A(PC-8)的下一条指令A+4(PC-4)处开始执行,所以直接
把LR 的值赋给PC 就行了,具体指令为MOV PC,LR
白话解释:对于SWI 和未定义指令异常:
?
?
?
2.IRQ 和FIQ 异常中断处理的返回:
指令地址 对应于PC
A
A+4
A+8
保存到LR.返回时,要接着执行A+4(LR-4)处的指令,所以返回指令为
SUBS PC, LR,#4(PC=A+4=LR-4)
----------------------- Page 2-----------------------
白话解释:对于普中断和快中断异常:
?
?
?
3,指令预取中止异常中断处理的返回:
指令地址
A
A+4
A+8
返回时,发生指令预取中止的指令A(PC-8)处重新执行,所以返回指令为
SUBS PC, LR,#4(PC=A=LR-4)
白话解释:对于预取指令中止异常:
?
?
?
4,数据访问中止异常中断处理的返回:
指令地址
A
A+4
A+8
返回时,要返回到A 处继续执行,所以指令为SUBS PC,
白话解释:对于数据访问中止异常:
?
?
?
小节:
?
?
?
? 预取指令中止异常,也没有发生pc 更新,但它还得重新执行发生异常的那条指令,所以pc = lr –4;
?
ARM异常返回PC地址分 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)