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