在ARM體系中,一般有如下3種方式控制程序的執行流程:spa
ARM中異常中斷的種類:ci
ARM體系中的異常中斷以下表所示。io
各類異常中斷都具備各自的備份的寄存器組,在本章前面已經有了比較詳細的介紹,這裏再也不重複。table
當多個異常中斷同時發生時,能夠根據異常中斷的優先級響應優先級最高的異常中斷。關於異常中斷的優先級將在之後介紹。軟件
ARM體系中的異常中斷exception
異常中斷名稱 | 含義 |
復位(reset) | 當處理器的復位引腳有效時,系統產生復位異常中斷,程序跳轉到復位異常中斷處理程序處執行,復位異常中斷一般用於下面幾種狀況:請求 系統加電時;系統復位時;跳轉到復位中斷向量處執行,稱爲軟復位;程序 |
未定義指令 | 當ARM處理器或者是系統中的協處理器認爲當前指令未定義時,產生未定義的指令異常中斷,能夠經過異常中斷機制仿真浮點向量運行; |
軟件中斷 | 這是一個用戶定義的中斷指令,可用於用戶模式下的程序調用特權操做指令。 |
指令預取停止 | 若是處理器預取的指令的地址不存在,或者該地址不容許當前指令訪問,當該被取的指令執行時,處理器產生指令預取停止異常中斷; |
數據訪問停止 | 若是數據訪問指令的目標地址不存在,或者該地址不容許當前指令訪問,處理器產生數據訪問停止異常中斷; |
外部中斷請求 | 當處理器的外部中斷請求引腳有效時,並且CPSR寄存器的I控制位被清除時,處理器產生外部中斷請求異常中斷,系統中各外設一般經過異常中斷請求處理器服務; |
快速中斷請求 | 當處理器的外部快速中斷請求引腳有效時,並且CPSR寄存器的F控制位被清除時,處理器產生外部中斷請求異常中斷; |
ARM處理器對異常中斷的響應過程:數據
ARM處理器對異常中斷的響應過程以下所述。異常
(1)保存處理器當前狀態、中斷屏蔽位以及各條件標誌位。這是經過將當前程序狀態寄存器CPSR的內容保存到將要執行的異常中斷對應的SPSR寄存器中實現的,各異常中斷有本身的物理SPSR寄存器。
(2)設置當前程序狀態寄存器CPSR中相應的位。包括設置CPSR中的位,使處理器進入相應的執行模式,設置CPSR中的位,禁止IRQ中斷,當進入FIQ模式時,禁止FIQ中斷。
(3)將寄存器lr_mode設置成返回地址;
(4)將程序計數器PC設置成該異常中斷的中斷向量地址,從而跳轉到相應的異常中斷處理程序處執行;
上述的處理器對異常中斷的響應過程能夠用以下的代碼來描述:
R14_<mode> = return link
SPSR_<mode> = CPSR
CPSR[4:0] = exception mode number
CPSR[5] = 0;
if(exception_mode > reset or FIQ) then
CPSR[6] = 1
CPSR[7] = 1
PC = exception vector address
從異常中斷處理程序中返回:
從異常中斷處理程序中返回包括如下兩個基本操做。
(1)恢復被中斷的程序的處理器狀態,即將SPSR_mode寄存器內容複製到CPSR中。
(2)返回到發生異常中斷的指令的下一條指令處執行,即把lr_mode寄存器的內容複製到程序計數器PC中。
在復位異常中斷處理程序開始整個用戶程序的執行,於是它不須要返回。
實際上,當異常中斷髮生時,程序計數器PC所指的位置對於各類不一樣的異常中斷是不一樣的,一樣的,返回地址對於各類不一樣的異常中斷也是不一樣的。