关于ARM 汇编的一些疑问

关于ARM 汇编的一些疑问:ide

1、ARM 各类模式下都有独立的R13(R1三、R13_svc、R13_irq......) ,那么程序在发生异常时是如何操做堆栈的呢?例如从用户模式跳到IRQ。。spa

进入IRQ时是将寄存器压入到R13_irq指向的堆栈空间,从IRQ模式返回时从R13_irq指向的堆栈空间弹出寄存器的值。it

2、R14在程序发生转移的时候状态如何变化class

BL指令在转移到子程序执行以前,将其下一条指令的地址拷贝到R14寄存器中。软件

对于异常中断来讲因为各类异常中断响应的过程不一样,所以保存在LR中的地址是不一样的。大多数状况是LR=PC-8。因此各中断返回时的指令也不同,指令以下:硬件

异常类型      模式                中断向量           返回指令                       程序进入异常时LR值程序

未定义指令  未定义           0x00000004    MOVS    PC, R14_und           LR = PC-4数据

软件中断       SVC(管理)    0x000000008   MOVS   PC, R14_svc            LR= PC-4异常

取指停止       abt(停止)   0x00000000c    SUBS   PC, R14_abt, #4     LR = PC -8margin

数据停止       abt                0x000000010    SUBS   PC, R14_abt, #4    LR = PC - 8

IRQ中断        IRQ               0x000000018   SUBS    PC, R14_irq, #4     LR = PC - 8

FIQ中断         FIQ               0x00000001c    SUBS    PC, R14_fiq, #4    LR  = PC -8

 

3、CPSR在程序发生跳转,和中断的时候状态如何变化。

程序发生跳转的时候CPSR不会自动的被保存,而程序发生异常时例如从用户模式跳到IRQ模式时硬件自将CPSR的值拷贝到SPSR_irq中。中断返回时自动由硬件把SPSR_irq的值恢复到CPSR。

4、当前执行的指令与PC的关系 ARM7为三级流水线结构因此

ARM模式下 PC=当前执行的指令位置+8

THUMB模式: PC=当前执行的指令位置+4

 

5、异常发生时ARM作了哪些事情:

 

       未定义异常发生后处理器响应过程以下

一、把下一条指令的地址拷贝给LR(当前执行的指令为PC-8,因此LR=PC-4)

二、把程序状态寄存器CPSR拷贝给SPSR_und

三、强制进入未定义模式

四、强制进入ARM状态

五、跳转到PC=0x00000004处执行

六、禁止IRQ中断。

 

      软件中断异常发生后处理器响应过程以下

一、把下一条指令的地址拷贝给LR(当前执行的指令为PC-8,因此LR=PC-4)

二、把程序状态寄存器CPSR拷贝给SPSR_svc

三、强制进入管理模式

四、强制进入ARM状态

五、跳转到PC=0x00000008处执行

六、禁止IRQ中断。

 

 

       取指停止异常发生后处理器响应过程以下

一、把中断时PC的值拷贝给LR(LR=PC)

二、把程序状态寄存器CPSR拷贝给SPSR_abt

三、强制进入停止异常模式

四、强制进入ARM状态

五、跳转到PC=0x0000000C处执行

六、禁止IRQ中断。

 

     数据停止异常发生后处理器响应过程以下

一、把中断时PC的值拷贝给LR(LR=PC)

二、把程序状态寄存器CPSR拷贝给SPSR_abt

三、强制进入停止异常模式

四、强制进入ARM状态

五、跳转到PC=0x00000010处执行

六、禁止IRQ中断。

 

     IRQ异常发生后处理器响应过程以下

一、把中断时PC的值拷贝给LR(LR=PC)

二、把程序状态寄存器CPSR拷贝给SPSR_irq

三、强制进入IRQ模式

四、强制进入ARM状态

五、跳转到PC=0x00000018处执行

六、禁止IRQ中断。

 

     FIQ异常发生后处理器响应过程以下

一、把中断时PC的值拷贝给LR(LR=PC)

二、把程序状态寄存器CPSR拷贝给SPSR_fiq

三、强制进入FIQ模式

四、强制进入ARM状态

五、跳转到PC=0x00000018处执行

六、禁止IRQ中断。

七、禁止FIQ中断。

相关文章
相关标签/搜索