ARM的37個暫存器詳解

2021-08-13 17:08:42 字數 1224 閱讀 8063

arm共有37個暫存器,都是32位長度

37個暫存器中30個為「通用」型,1個固定用作pc,乙個固定用作cpsr,5個固定用作5種異常模式下的spsr。

注意:system模式使用user模式暫存器。當arm從使用者模式(user)切換到快速中斷模式(fiq),暫存器r0~r7,r15是不變的,fiq的暫存器r8~r14切換user模式下的同名暫存器。其它幾種模式之間切換同理。

arm總共有37個暫存器,但是每種模式下最多只能看到18個暫存器,其它暫存器雖然名字相同但是在當前模式不可見。

對r13這個名字來說,在arm中共有6個名叫r13(又叫sp)的暫存器,但是在每種特定處理器模式下,只有乙個r13是當前可見的,其它的r13必須切換到它的對應模式下才能看到。這種設計叫影子暫存器。

r13(sp)是堆疊(程式工作現場)指標,如果7種模式都是採用同乙個堆疊指標的話,在某乙個模式中,堆疊出現了問題,則會導致7種模式都奔潰,故7種模式的棧都是不同的。

r14(lr)是儲存返回位址的。在使用者模式跳到中斷模式,然後再調回使用者模式,就可以用該返回位址。中斷模式下的函式呼叫也可以用到該返回位址。

r15(pc)是程式控制計數器,記錄當前程式處理到**。所以cpu只有乙個程式指標,pc指向**,cpu就會執行哪條指令(所以程式跳轉時就是把目標位址**放到pc中)

cpsr是程式狀態暫存器,用來記錄cpu執行狀態,每個cpu都有乙個

spsr是用來儲存cpsr的

中斷禁止位:

i:普通中斷

f:快速中斷

條件位(自動運算):

n:alu運算結果負位

z:alu運算結果負位

c:進製標誌位

v:有溢位

cpsr中各個bit位表明了cpu的某些狀態資訊,這些資訊非常重要,和後面學到的彙編指令息息相關(譬如ble指令中的e就和cpsr中的z標誌位有關)

cpsr中的i,f位和開中斷、關中斷有關

cpsr中的mode位(bit4~bit0共5位)決定了cpu的工作模式,在uboot**中會使用彙編進行設定

ARM的37個暫存器以及異常處理方法

注意 除user 使用者模式 是normal 普通模式 外,其他6種都是privilege 特權模式 privilege中除sys模式外,其餘5種為異常模式。各種模式的切換,可以是程式設計師通過 主動切換 通過寫cpsr暫存器 也可以是cpu在某些情況下自動切換。各種模式下許可權和可以訪問的暫存器不...

ARM的37個暫存器以及異常處理方法

注意 除user 使用者模式 是normal 普通模式 外,其他6種都是privilege 特權模式 privilege中除sys模式外,其餘5種為異常模式。各種模式的切換,可以是程式設計師通過 主動切換 通過寫cpsr暫存器 也可以是cpu在某些情況下自動切換。各種模式下許可權和可以訪問的暫存器不...

ARM中斷暫存器詳解

s3c2440的中斷暫存器 1.中斷分兩大類 內部中斷和外部中斷。2.外部中斷。24個外部中斷占用gpf0 gpf7 eint0 eint7 gpg0 gpg15 eint8 eint23 用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體參考datesheet資料手冊。暫存器 extin...