關於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中斷。

相關文章
相關標籤/搜索