一、ARM處理器運行的7中模式:

除了用戶模式之外的其他6種模式稱為特權模式,這些模式下,程序可以訪問所有的系統資源,也可以任意地進行處理器模式的切換,
其中除了系統模式外,其他5種模式稱為異常模式。

二、ARM寄存器介紹:
1、ARM處理器共有37個寄存器,其中包括31個通用寄存器(32位寄存器),6個狀態寄存器(32位寄存器,只使用了其中12位)
ARM處理器共有7中不同的處理器模式,在每一組模式中有一組相應的寄存器組,任意時刻可見的寄存器包括15個通用寄存器(R0-R14)
、一個或者兩個狀態寄存器即程序計數器(PC)。在所有的寄存器中,有些是各個模式共用同一個物理寄存器,有一些寄存器是各個模式
獨立擁有的寄存器。

1.1通用寄存器:
通用寄存器可以分為以下三類:
1、未備份寄存器(R0-R7),未備份處理器在所有的處理模式下指的都是同一個物理寄存器,在異常中斷造成的處理器模式切換時,由於不同的處理器模式
使用的都是相同的物理寄存器,可能造成寄存器中的數據被破壞,未備份處理器沒有用於特別的用途,任何可采用通用寄存器的場合都可以使用未備份處理器;
2、備份寄存器(R8-R14),

R13寄存器是ARM中常用作棧指針,在ARM指令集中,這是一種習慣的用法,並沒有任何強制性使用R13作為棧指針。
R14寄存器稱為連接寄存器(LR),在ARM體系中,具有如下兩種特殊的作用:
(1)每一種處理器模式自己的物理R14中存放着當前子程序的返回地址,當通過BL或BLX指令調用子程序時,R14被設置成該子程序的返回地址;
(2)當異常中斷發生時,該異常模式特定的物理R14被設置成改異常模式要返回的地址,對於有些異常模式,R14的值可能與將返回的地址有一個常數的偏移量。
3、程序計數器PC,R15;
由於ARM采用了流水線機制,當正確讀取了PC的值時,改值為當前指令地址值加8個字節,其實最終是加8個字節還是12個字節,取決於芯片的流水線級數。
CPU流水線機制如下所述,三級流水機制如下:

ARM9是五級流水線機制:

可見,ARM9和ARM7中都是PC=當前執行指令地址+8的根本的原因是,兩者的流水線設計中,指令的執行階段都是處於流水線的第三級。


4、狀態寄存器CPSR:
CPSR可以在任何處理器模式下被訪問,它包含了標志位,中斷禁止位,當前處理器模式標志以及其他的一些控制和狀態位,每一種處理器模式
下都有一個專用的物理狀態寄存器稱為SPSR(備份狀態寄存器)。當特定的異常中斷發生時,這個寄存器用於存放當前程序狀態寄存器的內容。在
異常中斷程序退出時,可以用SPSR中保存的值來恢復CPSR。


以下指令會影響CPSR中的條件標志位:

CPSR中的控制位:
1、中斷禁止位: I=1時禁止IRQ中斷,F=1是禁止FIQ中斷;
2、T控制位: T=0表示執行ARM指令;T=1表示執行Thumb指令;
3、M控制位:

三、ARM異常中斷的種類:

ARM處理器對應異常中斷的響應過程如下所述:
1、保存處理器當前狀態,中斷屏蔽位以及各條件標志位,這是通過CPSR的內容保存到SPSR寄存器中實現的,各異常中斷有自己
的物理SPSR寄存器;
2、設置當前程序狀態寄存器CPSR中相應的位,包括CPSR中的位,使處理器進入相應的執行模式,設置CPSR中的為,禁止IRQ中斷;
當進入FIQ模式時,禁止FIQ中斷;
3、將寄存器ir_mode設置返回地址;
4、將程序計數器PC設置成該異常中斷的中斷向量地址,從而跳轉到相應的異常中斷處理程序處執行;
ARM處理器從中斷處理程序中返回:
1、恢復被中斷的程序的處理器狀態,即將SPSR_mode寄存器內容恢復到CPSR中;
2、返回發生異常中斷的指令的下一條指令處執行,即把lr_mode寄存器內容復制到程序計數器PC中;
復位異常中斷處理程序開始整個用戶程序的執行,因而它不需要返回。
四、ARM存儲訪問:
在ARM中,通常希望字單元的地址是字對齊或者半字單元的地址是半字對齊的,在存儲訪問操作中,如果存儲單元的地址沒有遵守上述規則,則成為非對齊的存儲訪問操作;
1、非對齊的指令預取操作:
當處理器處於ARM狀態期間時,如果寫到寄存器PC中的值是非對齊的,要么指令執行的結果不可預期,要么地址值中最低兩位被忽略;

