ARM Cortex-A8 的學習筆記(2)——ARM暫存器
上一篇介紹了關於學習ARM的開發環境以及工程檔案編譯過程,今天,學習了關於ARM的CPU工作模式以及ARM暫存器部分,現整理一下筆記。
一、ARM指令集與Thumb指令集
ARM指令集的指令是32位的,但為了相容16位資料匯流排的應用系統和解決程式碼密度問題而提出了16位的Thumb指令集。程式碼密度就是單位儲存空間中包含的指令的個數。就例如1k的儲存空間能裝32條ARM指令,但能裝64條Thumb指令。所以,Thumb指令集可以大大節省了系統的儲存空間。
但Thumb不是一個完整的體系結構,它不能實現ARM指令的全部功能,它必須要藉助於ARM指令集。因此,執行程式時,需要ARM工作狀態與Thumb 工作狀態之間進行切換。後來,推出了Thumb-2指令集
二、ARM CPU處理器模式
ARM架構有9種處理器模式,其中有8種特權模式與1種非特權模式的使用者模式。(見下圖)
(1)使用者模式下只能執行一般的指令,不能訪問受作業系統保護的資源。例如不能訪問硬體,不能訪問受保護的記憶體,不能訪問受保護的資料等等。而特權模式下,可以訪問所有系統資源而且可以進行直接模式切換。所有應用程式都只能在使用者模式進行,而且不能直接進行模式切換
(2) 處理器模式可以通過軟體控制切換,外部中斷或異常處理過程切換。
(3)下面簡單介紹一下幾個常見的模式:
FIQ模式:快速中斷模式,當一個高優先順序中斷產生時進入該模式,一般用於高速資料傳輸以及通道處理。
IRQ模式:外部中斷模式,當一個低優先順序中斷產生時進入該模式,一般用於通常中斷處理。
Svc模式:特權模式,當處理器復位引腳有效時,進入該模式,程式跳轉到復位異常中斷處理程式處執行。復位異常中斷通常 用於系統上電和系統復位兩種情況。還有軟中斷指令執行時,也進入該模式。軟中斷是通過一條具體指令SWI,引發中斷操作,實現從使用者模式切換到特權模式並執行特權程式。
SYS模式:系統模式,該模式不是異常處理進入,並且與使用者模式具有完全一樣的暫存器,用於執行作業系統的特權任務,這樣可以保證在異常發生時,維持作業系統的執行的特權任務能夠正常執行。
ABT模式:資料訪問終止模式,當資料訪問的目標地址不存在或不允許時, 儲存器就發出資料中止訊號,處理器接收到訊號進入該模式。
Undef模式:未定義指令中止模式:未定義異常就是記憶體中的程式指令處理器識別不了,這時進入該模式。未定義指令異常可用於在沒有物理協處理器的系統上,對協處理器進行軟體模擬,或通過軟體模擬實現指令集擴充套件。為了更好的理解這個模式,先簡單引入協處理器的這個概念。協處理器是一種晶片,用於減輕系統微處理器的特定處理任務。最常使用的協處理器是用於控制片上功能的系統協處理器,例如快取記憶體儲存器管理單元等。舉個例子,在有浮點運算系統中,程式要進行浮點運算,ARM向協處理器發出指令,浮點協處理器收到指令會返回一個應答訊號,ARM收到應答訊號,繼續執行程式。如果在沒有浮點運算系統中,ARM沒有收到應答訊號,那就認為沒有相應的物理協處理器,就產生未定義指令異常,可通過軟體模擬硬體操作,可用浮點運算軟體模擬包來支援浮點運算。
三、各個cpu模式的暫存器
ARM 處理器共有37個暫存器,其中包括31個通用暫存器,6個狀態暫存器。(都是32位暫存器)
每一種異常模式都有一組專用暫存器。當應用程式發生異常中斷時,可以保證在進入異常模式時使用者模式的暫存器不被破壞。
1.R0~R12 是通用暫存器,放通用資料,各個模式的R0~R12是與USR模式共享(除了FIQ,R8-R12)。注意:Thumb指令集下只能訪問R0~R7低暫存器。
2.R13(SP):堆疊指標暫存器,每一種異常模式都有其自己獨立的r13,指向各模式所對應的專用堆疊,這表明ARM處理器允許使用者程式有6個堆疊空間。
3.R14(LP):連線暫存器,儲存子程式返回地址,跳轉指令會自動把返回地址放入R14,子程式把R14複製到PC實現返回。將r14入棧可以處理巢狀中斷。
4.R15(PC):程式計數器,指令分為三個階段執行(取指,譯碼,執行)。PC計數器總是指向取指的指令,不是譯碼不是執行的指令。ARM每條指令4個位元組(32位),所以PC的值=當前程式執行位置+8位元組。
5.APSR/CPSR:應用程式狀態暫存器(使用者模式下)/當前程式狀態暫存器(特權模式下),該暫存器就是用來儲存一些關於運算的資訊,包括,條件標誌位、中斷禁止位、當前處理器模式標誌和控制狀態位等。
N - ALU負數 Z - ALU零位 C - ALU進位操作 V - ALU操作溢位 Q - 指示增強的DSP運算指令是否發生了溢位
J - 是否Jazelle狀態 GE[3:0] - SIMD指令使用 IT[7:2] - Thumb-2指令的if...then...條件執行
E - 操作儲存的位元組順序(大端模式、小端模式) A - 是否禁止非同步abort I - 是否禁止IRQ
F - 是否禁止FRQ T - 是否使用Thumb指令集 M[4:0] - 當前cpu模式編碼
6.SPSR:已儲存程式狀態暫存器。這個暫存器用於存放當前程式狀態暫存器的內容。在異常中斷退出時,可以用SPSR來恢復CPSR。由於使用者模式和系統模式不是異常中斷模式,所以USR沒有SPSR。
以上是我學習後整理的一些筆記,如果有任何錯誤,請各位大神指教。