1. 程式人生 > >ARM體系架構之——處理器工作模式

ARM體系架構之——處理器工作模式

一、ARM 有7個基本工作模式:
User : 非特權模式,大部分任務執行在這種模式(一般都是在這種模式)
FIQ : 當一個高優先順序(fast) 中斷產生時將會進入這種模式
IRQ : 當一個低優先順序(normal) 中斷產生時將會進入這種模式
Supervisor :當復位或軟中斷指令執行時將會進入這種模式(SVC )
Abort : 當存取異常時將會進入這種模式(訪問地址異常)
Undef : 當執行未定義指令時會進入這種模式(讀取不識別的指令)
System : 使用和User模式相同暫存器集的特權模式
二、如何進行工作模式的切換
1、程式設計師通過寫CPSR暫存器
2、在某些情況下自動執行切換到模式
三、為什麼要搞這麼多工作模式?
大家可以想想普通的PC機,有使用者許可權和管理員許可權,就是為了考慮安全等級因素設計的。
四、ARM的通用暫存器
我們通常訪問特殊功能暫存器是具有特定地址的,對地址進行操作也就是將內容寫入到該暫存器中。通用暫存器是沒有地址的,是CPU設計時候的一些特定暫存器。例如r0-r12、CPSR、SPSR等。
在不同的模式下,暫存器有些是特有的,例如r13、r14。每種模式都有自己的r13 r14。我們稱像r13、r14這樣的暫存器為影子暫存器。下面列舉所有模式下的所有暫存器:
這裡寫圖片描述


特徵:
(1)每種模式下都有SP棧指標,用於本模式下的棧管理。例如函式內部的變數操作就是使用的是棧。
(2)每種模式都是lr(儲存的是程式的返回地址),教科書說的太官方了。這裡舉個例子:假設當前是從user模式切換到irq模式(其實就是傳送了普通中斷)那麼此時irq模式下的的lr暫存器會儲存user模式下的返回地址。這樣從irq模式返回到user模式,我們需要做的只是將irq模式下的lr暫存器中的內容給PC即可。
(3)為什麼設計cpsr和spsr呢?cpsr是user模式獨有的。當我們從user模式切換到irq模式時,將cpsr會自動儲存到irq模式下的spsr暫存器。這樣當從irq模式切換回user模式時候,只需要將irq模式下的spsr暫存器內容給cpsr暫存器即可。Mode是用於控制處理器模式。
這裡寫圖片描述

(4)PC:程式控制暫存器,也叫程式指標 指標指向哪裡,CPU就執行哪段程式程式碼。
在後面的中斷系統文章,會針對這個異常處理進行程式的設計和解讀。