ARM處理器的寄存器,ARM與Thumb狀態,7中運行模式

分類: 嵌入式html

 

ARM處理器工做模式一共有 7 種 :編程

USR  模式
    正經常使用戶模式,程序正常執行模式

FIQ模式(Fast Interrupt Request)
     處理快速中斷,支持高速數據傳送或通道處理

IRQ模式
     處理普通中斷

SVC模式(Supervisor)
     操做系統保護模式,處理軟件中斷swi  reset函數

 

ABT  停止(Abort mode){數據、指令}
    處理存儲器故障、實現虛擬存儲器和存儲器保護

UND 未定義(Undefined)
    處理未定義的指令陷阱,支持硬件協處理器的軟件仿真

SYS 系統模式(基本上=USR)(System)
    運行特權操做系統任務性能

 

用戶模式和特權模式ui

除了用戶模式以外的其餘6種處理器模式稱爲特權模式

 特權模式下,程序能夠訪問全部的系統資源,也能夠任意地進行處理器模式的切換

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

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

 用戶模式下,當須要進行處理器模式切換時,應用程序能夠產生異常處理,在異常處理中進行處理器模式的切換。
操作系統

 

ARM處理的工做狀態.net

 

在 ARM 處理器中,內核同時支持 32 位的 ARM 指令 和 16 位的 Thumb 指令。設計

對於 ARM 指令來講,全部的指令長度都是 32 位,而且執行週期大多爲單週期,指令都是有條件執行的。3d

而 THUMB 指令的特色以下:unix

        1,指令執行條件常常不回使用。

        2,源寄存器與目標寄存器常常是相同的。

        3,使用的寄存器數量比較少。

        4,常數的值比較小。

        5,內核中的桶式移動器(barrel shifter)常常是不使用的。

也就是說 16 位的 Thumb 指令通常能夠完成 和 32 位 ARM 指令相同的任務。

ARM指令和 THUMB指令的關係:

THUMB指令是ARM指令的子集
能夠相互調用,只要遵循必定的調用規則
Thumb指令與ARM指令的時間效率和空間效率關係爲:
        存儲空間約爲ARM代碼的60%~70%
        指令數比ARM代碼多約30%~40%
        存儲器爲32位時ARM代碼比Thumb代碼快約40%
        存儲器爲16位時Thumb比ARM代碼快約40~50%
        使用Thumb代碼,存儲器的功耗會下降約30%


ARM指令和 THUMB指令之間切換(Interworking)的基本概念和切換時的子函數調用

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

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

 系統模式並非經過異常進入的,它和用戶模式具備徹底同樣的寄存器。可是系統模式屬於特權模式,能夠訪問全部的系統資源,也能夠直接進行處理器模式切換。它主要供操做系統任務使用。一般操做系統的任務須要訪問全部的系統資源,同時該任務仍然使用用戶模式的寄存器組,而不是使用異常模式下相應的寄存器組,這樣能夠保證當異常中斷髮生時任務狀態不被破壞。

 

Thumb指令低密度及窄存儲器時性能高的特色使得其在大多數基於 C 代碼的系統匯中有很是普遍的應用,可是有些場合中系統只能使用 ARM 指令,好比:

    1,若是對於速度有比較高的要求,ARM指令在寬存儲器中會提供更高的性能。

    2,某些功能只能由 ARM 指令來實現,好比:

            訪問 CPSR 寄存器來 使能/禁止 中斷或改變處理器工做模式;

            訪問協處理器CP15;

            執行 C 代碼不支持的 DSP 算術指令;

            異常中斷(Exception)處理。在進入異常中斷後,內核自動切換到 ARM 狀態。即在異常中斷處理程序人口的一些指令是ARM指令,而後根據須要,程序能夠切換到 Thumb 工做狀態,在異常中斷處理程序返回前,程序在切換到 ARM 工做狀態。

注:當處理器處於Thumb狀態時發生異常(如IRQ、FIQ、Undef、Abort、SWI等),則異常處理返回時,自動切換到Thumb狀態。

            ARM 處理器老是 從 ARM 工做狀態開始執行的。所以,若是要在調試器重運行 Thumb 程序,必須爲 該 Thumb 程序添加一個 ARM程序頭,而後再切換到Thumb工做狀態,調用該 Thumb程序。

           

 

在實際系統中,內核狀態須要常常的切換(Interworkong)來知足系統性能要求。具體的切換是經過 Branch Exchange,即 BX 指令來實現的。指令格式爲:

        Thumb 工做狀態        BX                      Rn

        ARM     工做狀態        BX     Rn

        其中Rn能夠是寄存器 R0 ~ R15 中的任意一個。指令能夠經過將寄存器Rn的內容,拷貝到程序計數器 PC 來完成在 4GB地址空間中的絕對跳轉,若是操做數寄存器的狀態位 Bit0 = 0,則進入 ARM 工做狀態;若是 Bit0 = 1,則進入 Thumb 工做狀態。

 

ARM寄存器一共有 37 個寄存器

 

ARM處理器工做工做模式下的寄存器:

 

不分組寄存器R0~R7
          在全部的運行模式下,未分組寄存器都指向同一個物理寄存器,他們未被系統用做特殊的用途,所以,在中斷或異常處理進行運行模式轉換時,因爲不一樣的處理器運行模式均使用相同的物理寄存器,可能會形成寄存器中數據的破壞,這一點在進行程序設計時應引發注意。

 

分組寄存器R8~R12
每次所訪問的物理寄存器與處理器當前的運行模式有關
R8~R12:每一個寄存器對應兩個不一樣的物理寄存器
當使用fiq模式時,訪問寄存器R8_fiq~R12_fiq
當使用除fiq模式之外的其餘模式時,訪問寄存器R8_usr~R12_usr。

 

R1三、R14:每一個寄存器對應6個不一樣的物理寄存器
其中的一個是用戶模式與系統模式共用,另外5個物理寄存器對應於其餘5種不一樣的運行模式
採用如下的記號來區分不一樣的物理寄存器:
R13_
R14_
mode爲如下幾種之一:usr、fiq、irq、svc、abt、und。

 

堆棧指針—R13/sp

R13在ARM指令中經常使用做堆棧指針,但這只是一種習慣用法,用戶也可以使用其餘的寄存器做爲堆棧指針。
    sub    sp, sp, #4       ;reserved for PC
    stmfd    sp!, {r8-r9}

因爲處理器的每種運行模式均有本身獨立的物理寄存器R13,在初始化部分,都要初始化每種模式下的R13,這樣,當程序的運行進入異常模式時,能夠將須要保護的寄存器放入R13所指向的堆棧,而當程序從異常模式返回時,則從對應的堆棧中恢復。

子程序鏈接寄存器—R14/lr

R14也稱做子程序鏈接寄存器或鏈接寄存器LR。當執行BL子程序調用指令時,能夠從R14中獲得R15(程序計數器PC)的備份。其餘狀況下,R14用做通用寄存器。

在每一種運行模式下,均可用R14保存子程序的返回地址,當用BL或BLX指令調用子程序時,將PC的當前值拷貝給R14,執行完子程序後,又將R14的值拷貝回PC,便可完成子程序的調用返回。

                BL    SUB1
                ……
    SUB1:    
                ……
                MOV PC,LR        /*完成子程序返回等    同於BX LR    */

程序計數器—R15/PC

雖然 R15 也能夠用做通用寄存器,但要注意有一些特殊限制,若是違法了這些限制,指令執行的結果將是不可預料的。

 

程序狀態寄存器(CPSR/SPSR)
CPSR(當前程序狀態寄存器)
SPSR(備份的程序狀態寄存器)

全部處理器模式下均可訪問當前的程序狀態寄存器CPSR。

CPSR:程序狀態寄存器(current program status register) (當前程序狀態寄存器),在任何處理器模式下被訪問。它包含了條件標誌位、中斷禁止位、當前處理器模式標誌以及其餘的一些控制和狀態位。
CPSR在用戶級編程時用於存儲條件碼。

   SPSR:程序狀態保存寄存器(saved program status register),每一種處理器模式下都有一個狀態寄存器SPSR,SPSR用於保存CPSR的狀態,以便異常返回後恢復異常發生時的工做狀態。當特定 的異常中斷髮生時,這個寄存器用於存放當前程序狀態寄存器的內容。在異常中斷退出時,能夠用SPSR來恢復CPSR。因爲用戶模式和系統模式不是異常中斷 模式,因此他沒有SPSR。當用戶在用戶模式或系統模式訪問SPSR,將產生不可預知的後果。

CPSR格式以下所示。SPSR和CPSR格式相同


 

 

程序狀態寄存器的條件碼標誌

N、Z、C、V均爲條件碼標誌位。它們的內容可被算術或邏輯運算的結果所改變,而且能夠決定某條指令是否被執行
在ARM狀態下,絕大多數的指令都是有條件執行的。
在Thumb狀態下,僅有分支指令是有條件執行的。

狀態寄存器的低8位(I、F、T和M[4:0])稱爲控制位,發生異常時這些位能夠被改變。若是處理器運行特權模式,這些位也能夠由程序修改。

中斷禁止位I、F:
I=1   禁止IRQ中斷;
F=1   禁止FIQ中斷。

 T標誌位:該位反映處理器的運行狀態
ARM體系結構v5及以上的版本的T系列處理器,當該位爲1時,程序運行於Thumb狀態,不然運行於ARM狀態。
ARM體系結構v5及以上的版本的非T系列處理器,當該位爲1時,執行下一條指令以引發未定義的指令異常;當該位爲0時,表示運行於ARM狀態。
運行模式位M[4:0]是模式位,決定處理器的運行模式

 

 

THUMB狀態下的寄存器組織

 

Thumb與ARM狀態下的寄存器關係

相關文章
相關標籤/搜索