重要基础知识:R15 (PC)总是指向“正在取指”的指令,而
不是指向“正在碑文”的指令或正在“译码”的指令。一般来说,
人们习惯性约定将“正在碑文的指令作为参考点”,称之为当
前第一条指令,因而PC 总是指向第三条指令。当ARM 状
态时,每条指令为4 字节长,所以PC 一直指向该指令地址
加8 字节的地址,即:PC 值=当时程序碑文方位+8;
而ADS 中的pc,是为了调试看着便利而修改正的,它指向
的是正在碑文的指令,即“真实pc-8”!!!!!
这部分内容能够参看ARM 体系结构与编程清华大学出版社 杜春雷第九章反常间断处理
1.SWI和和未定义指令反常间断的回来:
指令地址
A PC-8 当时指令为SWI 或未定义指令此刻产生间断.PC 的值还没有更新.
A+4 PC-4 间断时处理器将PC-4 保存到LR ;lr!
A+8 PC
回来时,从产生间断的指令A(PC-8)的下一条指令A+4(PC-4)处开端碑文,所以直接
把LR 的值赋给PC 就行了,详细指令为MOV PC,LR (PC=A+4=LR)
文言解说:关于SWI 和未定义指令反常:
产生反常时pc 没有更新,依据ARM 的三级流水线原理,pc 没有更新,依然等于(A+8);
lr = pc –4(这时处理器决议的,无法更改!)即A+4
我们这类反常回来后应碑文下一条指令(A+4),所以回来时,pc = lr 即可
2.IRQ 和FIQ 反常间断处理的回来:
指令地址 对应于PC
A PC-8 碑文此指令完成后(!)查询IRQ 及FIQ,如果有间断请求则产生间断.
A+4 PC-4
A+8 PC ;lr!
(此刻PC 的值现已更新,指向A+12.将当时PC-4(即A+8)
保存到LR.回来时,要接着碑文A+4(LR-4)处的指令,所以回来指令为
SUBS PC, LR,#4(PC=A+4=LR-4)
———————– Page 2———————–
文言解说:关于普间断和快间断反常:
间断有必要在一条指令碑文完今后被检测到,如正在碑文指令甲时产生了间断,不等指令甲碑文完是不
会处理该间断的,产生反常时pc 现已更新(A+12);
lr = pc –4(这时处理器决议的,无法更改!)即A+8
回来后,应碑文被间断而没有碑文的指令(上面的A+4),所以回来时,pc = lr-4
3,指令预取间断反常间断处理的回来:
指令地址
A PC-8 碑文本指令时产生间断,
A+4 PC-4 处理器将A+4(PC-4)保存到LR. ;lr!
A+8 PC
回来时,产生指令预取间断的指令A(PC-8)处从头碑文,所以回来指令为
SUBS PC, LR,#4(PC=A=LR-4)
文言解说:关于预取指令间断反常:
产生预取指令反常时,是在碑文时产生的反常,pc 未更新,即pc = A+8
lr = pc –4(这时处理器决议的,无法更改!)即A+4
我们这类反常回来后应从头碑文反常的那个指令(A),所以回来时,pc = lr-4
4,数据拜访间断反常间断处理的回来:
指令地址
A PC-8 本指令拜访有问题的数据,产生间断时,PC 的值现已更新
A+4 PC-4 间断产生时PC=A+12,处理器将A+8(PC-4)保存到LR.
A+8 PC ;lr!
回来时,要回来到A 处持续碑文,所以指令为SUBS PC, LR,#8.(PC=A=LR-8)
文言解说:关于数据拜访间断反常:
产生数据拜访间断反常时,是在碑文时拜访数据过错导致的反常,pc 现已更新,即pc = A+12
lr = pc –4(这时处理器决议的,无法更改!)即A+8
我们这类反常回来后应从头碑文反常的那个指令(A),所以回来时,pc = lr-8
末节:
引起PC 更新的原因一种是数据间断,还有便是间断了.
间断有必要是在一条指令碑文结束后才干被检测到,所以它间断的仅仅还未碑文的那条指令(pc – 8),
所以pc = lr –4;
与间断相同,SWI 和未定义指令反常也是回来到下一条指令(pc – 4),仅仅他们在碑文时,PC 的值并没
有更新,所以pc = lr;
预取指令间断反常,也没有产生pc 更新,但它还得从头碑文产生反常的那条指令,所以pc = lr –4;
数据拜访间断反常,产生了pc 更新,而且它也需求从头碑文产生反常的那条指令,所以pc = lr –8;
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/xitong/264558.html