ARM的PC,LR在中断的使用

来源:互联网 发布:武汉市广电网络分公司 编辑:程序博客网 时间:2024/06/13 21:14

ARM是流水线结构的,ARM7是三级流水线,ARM9是五级流水线。

拿简单的ARM7来说,所谓的三级流水线,就是说取指,译码,执行三步同时进行,执行完一条指令时,同时取出一条指令。这种结构下,PC寄存器保存的不再是当前执行指令的地址,而是取指指令的地址。

即   PC - 8    :   当前指令

       PC  - 4    :   当前指令的下一条,正在译码的指令

       PC          :    当前指令的下两条,正在取指的指令

这些内容,在系统发生中断时,进行汇编处理要用到。


中断:

1.SWI和和未定义指令异常中断的返回: 

指令地址 
A       PC-8     当前指令为SWI或未定义指令 此时发生中断.PC的值还没有更新.(不需要执行完此指 令,就跳到中断了;PC的值为A+8的地址)

A+4  PC-4    中断时处理器将PC-4保存到LR (LR = A +4的地址)

A+8  PC       

返回时,从发生中断的指令A(PC-8)的下一条指令A+4(PC-4)处开始执行,所以直接 把LR的值赋给PC就行了,具体指令为MOV PC,LR  (PC=A+4=LR)

对于MOV PC,LR 中的PC,指的是当前需要执行的地址,而不是流水线结构中的PC的值(PC = A+8的地址)

如果执行MV PC,PC,则实现的功能是跳从当前指令开始的第三条指令处执行。

2,IRQ和FIQ异常中断处理的返回: 

指令地址  对应于PC 
A         PC-8            执行此指令完成后(!)查询IRQ及FIQ,如果有中断请求 
                                  则产生中断. .(需要执行完此指 令,再跳到中断)  
A+4       PC-4 

A+8       PC 
( 此时PC的值已经更新,指向A+12.将当前PC-4(即A+8) 
保存到LR.返回时,要接着执行A+4(LR-4)处的指令,所以返回指令为 SUBS PC, LR,#4(PC=A+4=LR-4) 

3,指令预取中止异常中断处理的返回: 

指令地址 
A     PC-8           执行本指令时发生中断,   

A+4   PC-4       处理器将A+4(PC-4)保存到LR.  

A+8   PC 
返回时,发生指令预取中止的指令A(PC-8)处重新执行(A处的指令要重新执行),所以返回指令为 
SUBS PC, LR,#4(PC=A=LR-4) 

4,数据访问中止异常中断处理的返回: 

指令地址 
A          PC-8   本指令访问有问题的数据,产生中断时,PC的值已经更新    
A+4        PC-4   中断发生时PC=A+12,处理器将A+8(PC-4)保存到LR.

 A+8        PC 
返回时,要返回到A处继续执行,所以指令为SUBS PC,  LR,#8.(PC=A=LR-8) (A处的指令要重新执行),



0 0