ARM的37個寄存器詳解

這裏寫圖片描述
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的

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代碼中會使用匯編進行設置

發佈了70 篇原創文章 · 獲贊 21 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章