1. 程式人生 > >ARM的7種工作模式、37個通用暫存器、CPSR程式狀態暫存器

ARM的7種工作模式、37個通用暫存器、CPSR程式狀態暫存器

一、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)。
(2)ARM共有37個暫存器,都是32位長度。
  • 30個為“通用”型;
  • 1個固定用作PC(Program control register,程式控制暫存器,PC指向哪裡,CPU就會執行哪條指令,因此只有一個);
  • 1個固定用作CPSR(程式狀態暫存器,用來記錄當前cpu的狀態,因此只有一個);
  • 5個固定用作5種異常模式下的SPSR(Saved Program Status Register,程式狀態儲存暫存器,用來儲存CPSR的,返回時將spsr賦給cpsr)。
(3)lr用來儲存返回地址。 (4)第二幅圖中帶顏色的,表示每種模式下特有的暫存器。 四、CPSR程式狀態暫存器  
(1)CPSR中各個bit位表明了CPU的某些狀態資訊,這些資訊非常重要,和後面學到的彙編指令息息相關(譬如BLE指令中的E就和CPSR中的Z標誌位有關)。 (2)CPSR中的I、F位和開中斷、關中斷有關。 (3)CPSR中的mode位(bit4~bit0共5位)決定了CPU的工作模式,在uboot程式碼中會使用匯編進行設定。