通用寄存器
通用寄存器可以分爲下面3類
- 未備份寄存器(The unbanked registers),包括R0~R7
- 備份寄存器(The banked registers),包括R8~R14。
- 程序計數器PC,即R15。
R0 - R7
- 未備份寄存器 可用做通用寄存器
R8 - R12
- 備份寄存器 可用做通用寄存器
- R13 R14也是備份寄存器
R13 (SP)
- 常用做棧指針 Stack Pointer, SP
R14 (LR)
- 連接寄存器 Link Register, LR
- 當通過BL或BLX指令調用子程序時,R14被設置成該子程序的返回地址。在子程序中,當把R14的值複製到程序計數器PC中時,子程序即返回。
R15 (PC)
- 程序計數器 Program Counter, PC
- ARM採用流水線機制,當正確讀取了PC的值時,該值爲當前指令地址值加8個字節。也就是說,對於ARM指令集來說,PC指向當前指令的下兩條指令的地址。
- ARM指令是字對齊的,PC值的第0位和第1位總爲0。當使用指令STR/STM保存R15時,保存的可能是當前指令地址值加8或12字節(取決於不同芯片)
程序狀態寄存器
CPSR
- 當前程序狀態寄存器
- 包含了條件標誌位、中斷禁止位、當前處理器模式標誌以及其他的一些控制和狀態位
SPSR
- 備份程序狀態寄存器
- 特定的異常中斷髮生時,這個寄存器用於存放當前程序狀態寄存器的內容。在異常中斷程序退出時,可以用SPSR中保存的值來恢復CPSR。
條件標誌位
- N(Negative) N=1 負數
- Z(Zero) Z=1 零
- C(Carry) C=1 進位
V(oVerflow) V=1 符號位溢出
以下指令會影響CPSR的條件標誌位
- 比較指令,如: CMP、CMN、TEQ、TST等。
- 當一些算術邏輯運算的目標寄存器不是PC時,這些指令會影響CPSR的條件標誌位。
- MSR與MRS指令可以對CPSR/SPSR進行操作。
- LDM指令可以將SPSR複製到CPSR中。
CPSR中的控制位
CPSR的低8位I、F、T及M[4:0]統稱爲控制位 當異常中斷髮生時這些位發生變化
中斷禁止位
當I=1時禁止IRQ中斷,當F=1時禁止FIQ中斷。T控制位
T=0表示執行ARM指令。T=1表示執行Thumb指令(armv4)。 T=1表示強制下一條執行的指令產生未定義指令中斷(armv5)。M控制位
控制位M[4:0]控制處理器模式。
ARM體系中的存儲空間
ARM體系使用單一的平板地址空間。
- 地址空間的大小爲2^32個8位字節。
- 這些字節單元的地址是一個無符號的32位數值,其取值範圍爲0到2^32-1。
- ARM的地址空間也可以看作是2^32個32位的字單元。
- 這些字單元的地址可以被4整除,也就是說該地址的低兩位爲0b00。
- 地址爲A的字數據包括地址爲A,A+1,A+2,A+3 4個字節單元的內容。
在ARM版本4及以上的版本中,ARM的地址空間也可以看作是2^31個16位的半字單元。
- 這些半字單元的地址可以被2整除,也就是說該地址的最低位爲0b0。
- 地址爲A的半字數據包括地址爲A,A+1兩個字節單元的內容。
ARM存儲器格式
- big-endian
- little-endian