基於ARM9處理器的工作模式&工作狀態&暫存器&異常型別總結筆記
ARM9處理器工作模式
改變工作模式的方法:①軟體改變,改變CPSR(當前程式狀態暫存器)的低5位即可;②外部中斷或異常處理改變;
使用者模式:大部分情況下,程式是執行在使用者模式下,此時某些被保護的暫存器是不能訪問;
非使用者模式:除了使用者模式之外的模式;也被稱作特權模式。特權模式下,可以訪問暫存器和一下片內資源。
異常模式:處理使用者模式和系統模式外其餘的5中模式,常用於處理中斷或異常以及訪問需要被保護的系統資源等情況;
系統模式僅存在於ARM體系結構版本V4以上,系統模式和使用者模式擁有完全相同的暫存器;
ARM9的兩種工作狀態
處理器的兩種操作狀態:
-
ARM狀態:32位,這種狀態下執行的是字方式的ARM指令(地址[1:0]為0)。
-
Thumb狀態:16位,這種狀態下執行半字方式的Thumb指令(地址[0]為0);
Thumb指令集的特點:
Thumb指令集是ARM指令集的功能子集,但是與ARM程式碼相比,可以節省30%~40%以上的儲存空間,同時兼備32位程式碼的所有優點;
ARM內部暫存器組織
ARM儲存系統:(1)複雜:暫存器,Cache,主儲存器,輔助儲存器;(2)簡單:直接分為儲存器和暫存器即可;
暫存器特點:
數量少,讀寫速度快;每個暫存器內都有一個名字,但是沒有像儲存器一樣的儲存地址;不同的儲存器有不同的暫存器配置方案;
暫存器功能:暫存指令,資料和地址;
暫存器分組
分組的依據:處理器的工作狀態和工作模式的不同。
分組的特點:相同名字的暫存器在不同組中是兩個完全不同的物理暫存器;程式程式碼執行時的設計的工作暫存器組是由ARM9微處理器的工作模式確定的;
暫存器類別:通用暫存器,程式狀態暫存器,程式計數器;
(1) 通用暫存器
R0~R7:未分組暫存器;對於任何工作模式,這些暫存器都對應相同的32位暫存器地址;
R8~R14:為分組暫存器;對應的實體地址取決於當前處理器的工作模式;
R8~R12:有兩個分組的物理暫存器;一組用於FIQ模式;一組用於非FIQ模式;
R0~R13:完全通用暫存器;儲存資料和地址的通用暫存器;不會被體制結構作為特殊用途,並且可用於任何使用通用暫存器的指令;
R13,R14:分別有6個分組的暫存器。一個用於使用者模式和系統模式,另外5組暫存器分別對應5中工作模式;
異常處理:異常處理程式負責初始化自己的R13,使其指向該異常模式專用的棧地址。在異常處理程式入口處,將其他暫存器的內容儲存到堆疊,返回時,重新將這些值載入到暫存器;從而保護現場的目的;
R13:堆疊指標SP;在ARM指令集集中,沒有以特殊方式使用R13的指令或其他功能,只是習慣上都這樣使用。但是Thumb指令集中存在使用R13的指令;
R14:連結暫存器LR;在結構上有兩個功能:
① 在每種工作模式下,模式本身的R14用於儲存子程式返回的地址。例如,當ARM9處理器執行帶連結的分支指令(如BL)時,R14儲存R15(PC)的值;
② 發生異常時,相應的暫存器分組R14_svc,R14_abt,R14_und,R14_ird和R14_fiq用來儲存R15的返回值;
R15:程式計數器(PC)。在ARM狀態下,R15[1:0]=0x00;PC的值為R15[31:2];
(2) 狀態暫存器CPSR
R16:通用暫存器;看下錶:
1)條件程式碼標誌位NZCV:
N:運算結果的最高位顯示在該標誌位上。對於有符號二進位制補碼,當結果為負數N=1,結果為正數或零為0;
Z:當指令結果為0時Z=1(通常表示比較結果“相等”)否則為0;
C:加法指令最高位進位C=1,否則C=0;減法指令最高位未借位C=1,借位則C=0;結合移位操作時C等於從最高位最後溢位的值;其他指令C不變;
V:加/減法運算併發生溢位時V=1,否則V=0;其他指令V不變;
(2)控制位IFTM4M3M2M1M0
當發生異常時這些位被硬體改變;當處理器處於特權模式時,可用軟體操作這些位;
① 中斷處理位:中斷使用的前提是中斷沒有被禁止;
I=1時IRQ中斷被禁止
F=1時FIQ中斷被禁止
② 處理器標誌位:T位反映了處理的的工作狀態
T=1時,處理器處於Thumb狀態下
T=0時,處理器處於ARM狀態下;
③ 處理器模式位:決定處理器的工作模式,看下錶格
(3)保留位
CPSR中的保留位被保留為將來使用。為了提高程式的可移植性,當改變CPSR標誌位和控制位,不要改變這些保留位。另外要確保程式的執行不受保留位的值的影響。因為將來處理器開能會將這些位設定為1或0;
ARM9的異常處理
什麼是異常:當正常的程式被暫時停止時就是發生了異常;異常是由一個內部或外部產生一個引起處理器處理的額外事件;
什麼是異常向量(exception vectors):
異常出現後,處理器強項從正常程式地址跳轉到異常程式所對應的固定儲存器地址開始執行程式,這些程式儲存器地址稱為異常向量;
ARM9體系支援其中異常處理
-
處理器一旦有復位訊號輸入,ARM處理器就立即執行當前。復位後,ARM處理器在禁止中斷的管理模式下從地址0x00000000或0Xffff0000處開始執行;
-
未定義指令異常
當ARM處理器執行協處理器指令時,需等任一外部協處理器應答後,才能真正執行這條指令。若協處理器沒有迴應,就會出現未定義指令異常。另外,試圖執行未定義的指令也會出現未定義指令異常; -
軟體中斷異常
軟體中斷異常指令SWI使處理器進入管理模式,以請求特定的管理函式; -
預取中止異常
儲存器系統發出儲存器中止訊號(Abort)時,響應取置啟用的中止標記所取的指令無效,茹處理器試圖執行無效指令,則產生預約中止異常;茹指令未執行,則不發生預約中止; -
資料中止異常
儲存器發出儲存器中止訊號,響應資料中止標記的資料無效。 -
IRQ(外部中斷請求)異常
通過處理器上的IRQ輸入引腳,由外部產生IRQ異常。IRQ異常的優先順序比FIQ異常的優先順序低,當進入FIQ處理時,會遮蔽IRQ異常; -
FIQ(快速中斷請求)異常
通過FIQ上的輸入引腳,由外部產生FIQ異常;
異常優先順序