ARM的7種工作模式、37個通用暫存器、CPSR程式狀態暫存器
阿新 • • 發佈:2019-01-08
一、ARM 採用的是32位架構
1、ARM約定
Byte:8 bits
Halfword:16 bits (2 byte)
Word:32 bits (4 byte)
2、大部分ARM core 提供
ARM 指令集(32-bit) 每條指令都是4個位元組?
Thumb 指令集(16-bit )
Thumb2指令集(16 & 32bit)
二、ARM的7種基本工作模式
普通模式(Normal)
(1)User:非特權模式,大部分任務執行在這種模式
特權模式(Privilege)
(2)FIQ:當一個高優先順序(fast) 中斷產生時將會進入這種模式
(3)IRQ:當一個低優先順序(normal) 中斷產生時將會進入這種模式
(4)Supervisor:當復位或軟中斷指令執行時將會進入這種模式(SVC模式)
(5)Abort:當存取異常時將會進入這種模式
(6)Undef:當執行未定義指令時會進入這種模式
(7)System:使用和User模式相同暫存器集的特權模式。
- 各種模式的切換,可以是程式設計師通過程式碼主動切換(通過寫CPSR暫存器),也可以是CPU在某些情況下自動切換。
- 各種模式下許可權和可以訪問的暫存器不同。
- 同一時刻只處於其中一種模式。
- 作業系統有安全級別要求,因此CPU設計多種模式是為了方便作業系統的多種角色安全等級需要。
- 不同模式下,對資源的訪問許可權不一樣。
三、37個通用暫存器
1、暫存器分類和區別
(1)SoC中有2類暫存器:通用暫存器和SFR
- 通用暫存器(ARM中有37個)是CPU的組成部分,CPU的很多活動都需要通用暫存器的支援和參與。
- SFR(special function register,特殊功能暫存器)屬於外設硬體的組成部分,我們通過訪問外設的SFR來程式設計操控這個外設,這就是硬體程式設計控制的方法。
(2)通用暫存器沒有地址,通過暫存器名字來訪問;而特殊功能暫存器有地址。
(3)暫存器是外設硬體的軟體程式設計介面API。使用軟體程式設計控制某一硬體,其實就是程式設計讀寫該硬體的暫存器。
2、37個通用暫存器
(1)ARM總共有37個暫存器,但是每種模式下最多隻能看到18個暫存器,其他暫存器雖然名字相同但是在當前模式不可見。- 對r13這個名字來說,在ARM中共有6個名叫r13(又叫sp,棧指標)的暫存器,但是在每種特定處理器模式下,只有一個r13是當前可見的,其他的r13必須切換到他的對應模式下才能看到。這種設計叫影子暫存器(banked register)。
- 30個為“通用”型;
- 1個固定用作PC(Program control register,程式控制暫存器,PC指向哪裡,CPU就會執行哪條指令,因此只有一個);
- 1個固定用作CPSR(程式狀態暫存器,用來記錄當前cpu的狀態,因此只有一個);
- 5個固定用作5種異常模式下的SPSR(Saved Program Status Register,程式狀態儲存暫存器,用來儲存CPSR的,返回時將spsr賦給cpsr)。
(1)CPSR中各個bit位表明了CPU的某些狀態資訊,這些資訊非常重要,和後面學到的彙編指令息息相關(譬如BLE指令中的E就和CPSR中的Z標誌位有關)。 (2)CPSR中的I、F位和開中斷、關中斷有關。 (3)CPSR中的mode位(bit4~bit0共5位)決定了CPU的工作模式,在uboot程式碼中會使用匯編進行設定。