ARM框架學習筆記 part1 寄存器、存儲空間

通用寄存器

通用寄存器可以分爲下面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的條件標誌位

    1. 比較指令,如: CMP、CMN、TEQ、TST等。
    2. 當一些算術邏輯運算的目標寄存器不是PC時,這些指令會影響CPSR的條件標誌位。
    3. MSR與MRS指令可以對CPSR/SPSR進行操作。
    4. 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章