ARM狀態結構小記

在系統學習ARM寄存器結構和功能之前,有必要先了解一下ARM的工作模式和工作狀態。

一、 ARM的工作狀態

兩種狀態爲:

  • ARM狀態(32位)
  • Thumb狀態(16位)

用BX Rn指令來進行兩種狀態的切換:
其中BX是跳轉指令,Rn是寄存器,如果Rn的位0爲1(最低位),則進入Thumb狀態;如果Rn的位爲0,這進入ARM狀態。(ARM指令的後兩位始終爲0,沒有被使用;而Thumb指令的後一位始終爲0,沒有被使用,因此採用位0來表示ARM指令與Thumb指令的切換標誌位。)

例如下面兩個指令就可以實現從ARM狀態切換到Thumb狀態,第一條指令將r6寄存器最低位置爲1,接着 bx r6 就切換到了Thumb狀態。

   ……
   0x00008cfc <+12>:    add r6, pc, #1
   0x00008d00 <+16>:    bx  r6
   0x00008d04 <+20>:    ...
   0x00008d06 <+22>:    ...
   0x00008d08 <+24>:    ...
   ……

注:ARM和Thumb兩種狀態之間的切換不影響處理器的工作模式和寄存器的內容;ARM處理器在處理異常時,不過處理器處於什麼狀態,則都將切換到ARM狀態。


對於 ARM 指令來說,所有的指令長度都是 32 位,並且執行週期大多爲單週期,指令都是有條件執行的。
而 Thumb 指令的特點如下:

  • 指令執行條件經常不回使用。
  • 源寄存器與目標寄存器經常是相同的。
  • 使用的寄存器數量比較少。
  • 常數的值比較小。
  • 內核中的桶式移動器(barrel shifter)經常是不使用的。

也就是說 16 位的 Thumb 指令一般可以完成 和 32 位 ARM 指令相同的任務。Thumb指令是ARM指令的子集,只要遵循一定的調用規則就可以互相調用。
Thumb指令與ARM指令的時間效率和空間效率關係爲:

  • 存儲空間約爲ARM代碼的60%~70%
  • 指令數比ARM代碼多約30%~40%
  • 存儲器爲32位時ARM代碼比Thumb代碼快約40%
  • 存儲器爲16位時Thumb比ARM代碼快約40~50%
  • 使用Thumb代碼,存儲器的功耗會降低約30%

二、 ARM的工作模式

七種工作模式爲:

  • usr 用戶模式:正常用戶模式,程序正常執行模式
  • sys 系統模式:(基本上等同於usr)(System)運行特權操作系統任務
  • svc 特權模式:(Supervisor)也叫操作系統保護模式,處理軟件中斷swi reset
  • abt 中止模式:(Abort mode){數據、指令} 處理存儲器故障、實現虛擬存儲器和存儲器保護
  • und 未定義指令模式:(Undefined)處理未定義的指令陷阱,支持硬件協處理器的軟件仿真
  • irq 外部中斷模式:處理普通中斷
  • fiq 快速中斷模式:(Fast Interrupt Request)處理快速中斷,支持高速數據傳送或通道處理

上述七種工作模式中,除了用戶模式之外的其他6種處理器模式稱爲特權模式。

特權模式下,程序可以訪問所有的系統資源,也可以任意地進行處理器模式的切換。

特權模式中,除系統模式外,其他5種模式又稱爲異常模式。

大多數的用戶程序運行在用戶模式下,此時,應用程序不能夠訪問一些受操作系統保護的系統資源,應用程序也不能直接進行處理器模式的切換。

用戶模式下,當需要進行處理器模式切換時,應用程序可以產生異常處理,在異常處理中進行處理器模式的切換。

三、 關於狀態和模式的切換

處理器模式可以通過軟件進行切換,也可以通過外部中斷或者異常處理過程進行切換。

當應用程序發生異常中斷時,處理器進入相應的異常模式。在每一種異常模式下都有一組寄存器,供相應的異常處理程序使用,這樣就可以保證在進入異常模式時,用戶模式下的寄存器不被破壞。

系統模式並不是通過異常進入的,它和用戶模式具有完全一樣的寄存器。但是系統模式屬於特權模式,可以訪問所有的系統資源,也可以直接進行處理器模式切換。它主要供操作系統任務使用。通常操作系統的任務需要訪問所有的系統資源,同時該任務仍然使用用戶模式的寄存器組,而不是使用異常模式下相應的寄存器組,這樣可以保證當異常中斷髮生時任務狀態不被破壞。

Thumb指令低密度及窄存儲器時性能高的特點使得其在大多數基於 C 代碼的系統匯中有非常廣泛的應用,但是有些場合中系統只能使用 ARM 指令,比如:

  1. 如果對於速度有比較高的要求,ARM指令在寬存儲器中會提供更高的性能。
  2. 某些功能只能由 ARM 指令來實現,例如訪問 CPSR 寄存器來使能/禁止 中斷或改變處理器工作模式;訪問協處理器CP15;執行 C 代碼不支持的 DSP 算術指令;異常中斷(Exception)處理。

另外,在進入異常中斷後,內核會自動切換到 ARM 狀態。即在異常中斷處理程序人口的一些指令是ARM指令,然後根據需要,程序可以切換到 Thumb 工作狀態,在異常中斷處理程序返回前,程序在切換到 ARM 工作狀態。

注:當處理器處於Thumb狀態時發生異常(如irq、fiq、und、abt、svc等),則異常處理返回時,自動切換到Thumb狀態。需要了解的是,ARM 處理器總是 從 ARM 工作狀態開始執行的。因此,如果要在調試器重新運行 Thumb 程序,必須爲 該 Thumb 程序添加一個 ARM程序頭,然後再切換到Thumb工作狀態調用該 Thumb程序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章