Cortex M3暫存器組
暫存器組
宗旨:技術的學習是有限的,分享的精神是無限的。
1、通用目的暫存器R0~R7
R0-R7 也被稱為低組暫存器。所有指令都能訪問它們。它們的字長全是 32 位,復位後的初始值是不可預料的。
2、通用目的暫存器 R8-R12
R8-R12 也被稱為高組暫存器。這是因為只有很少的 16 位 Thumb 指令能訪問它們, 32 位的thumb-2 指令則不受限制。它們也是 32 位字長,且復位後的初始值是不可預料的。
3、特殊功能暫存器
程式狀態暫存器:APSR, IPSR, EPSR ---- MRS/MSR
APSR:
N:負條件碼標誌位,運算結果小於0,N=1, 大於等於0,N=0;
Z:零條件碼標誌位,運算結果為0,Z=1;
C:進位條件碼標誌位,運算指令產生進位(無符號加法溢位),C=1;
V:溢位條件碼標誌位,運算溢位(有符號加法溢位), V=1;
Q:飽和條件碼標誌位;
IPSR:處於執行緒模式時,該位域為0;在手柄模式下,該位域為當前異常的異常號。
EPSR:
T:Thumb狀態, T=1,ARM狀態,T=0;
PRIMASK, FAULTMASK 和 BASEPRI:控制異常的使能和除能
控制暫存器CONTROL:其一用於定義特權級別,其二用於選擇當前使用哪個堆疊指標。
4、堆疊指標R13
R13 是堆疊指標。在 CM3 處理器核心中共有兩個堆疊指標,於是也就支援兩個堆疊。當引用 R13(或寫作 SP)時,引用到的是當前正在使用的那一個,另一個必須用特殊的指令來訪問( MRS,MSR指令)。
主堆疊指標(MSP),或寫作 SP_main。這是預設的堆疊指標,它由 OS 核心、異常服務例程以及所有需要特權訪問的應用程式程式碼來使用。
程序堆疊指標(PSP),或寫作 SP_process。用於常規的應用程式程式碼(不處於異常服用例程中時)。
5、連線暫存器R14
R14 是連線暫存器( LR)。在一個彙編程式中,你可以把它寫作 both LR 和 R14。 LR 用於在呼叫子程式時儲存返回地址。例如,當你在使用 BL(分支並連線, Branch and Link)指令時,就自動填充 LR的值。
6、程式計數器R15
R15 是程式計數器,在彙編程式碼中一般我們都都叫它的外號“ PC”。因為 CM3 內部使用了指令流水線,讀 PC 時返回的值是當前指令的地址+4。