ARM的2種工作狀態,7種工作模式和37個寄存器

2021-01-08 電子產品世界
一、ARM處理器的兩種工作狀態

1、ARM狀態:32位,ARM狀態執行字對齊的32位ARM指令。

本文引用地址:http://www.eepw.com.cn/article/201611/316617.htm

2、Thumb狀態,16位,執行半字對齊的16位

註:1、ARM和Thumb兩種狀態之間的切換不影響處理器的工作模式寄存器的內容。

2、ARM處理器在處理異常時,不過處理器處於什麼狀態,則都將切換到ARM狀態。

二、ARM處理器的7種模式:

CPSR(當前程序狀態寄存器)的低5位用於定義當前操作模式,如圖示:

1、用戶模式(User,usr)

說明:正常程序執行的模式

2、系統模式(System,sys)

說明:用戶模式與系統模式兩者使用相同的寄存器,都沒有SPSR(Saved Program Statement Register,已保存程序狀態寄存器),但系統模式比用戶模式有更高的權限。3、快中斷模式(Fast Interrupt Request,FIR)

4、一般中斷模式(IRQ,Interrupt ReQuest)

5、管理模式(Supervisor,SVC)

說明:系統復位或開機時則進入到SVC模式下

6、中止(abort)

說明:當遇到軟中斷(SWI,Software Interrupt)時,也將進入到SVC模式下

7、未定義(undefine)

說明:用於支持通過軟體方針硬體的協處理器

說明:1、用戶模式外,其它6種模式稱為特權模式。所謂特權模式,即具有如下權利:a.MRS(把狀態寄存器的內容放到通用寄存器);b.MSR(把通用寄存器的內容放到狀態寄存器中)。由於狀態寄存器中的內容不能夠改變,因此要先把內容複製到通用寄存器中,然後修改通用寄存器中的內容,再把通用寄存器中的內容複製給狀態寄存器中即可完成「修改狀態寄存器」的任務。

2、剩下的六種模式中除去系統模式外,統稱為異常模式。

三、ARM指令中有37個寄存器,有31個通用寄存器和6個狀態寄存器。

原因:ARM處理器共有37個寄存器,其中包括:31個通用寄存器,包括程序計數器(PC)在內,這些寄存器都是32位寄存器,以及6個32位狀態寄存器。但目前只使用了其中12位。ARM處理器共有7種不同的處理器模式,在每一種處理器模式中有一組相應的寄存器組。任意時刻(也就是任意的處理器模式下),可見的寄存器包括15個通用寄存器(R0~R14)、一個或兩個狀態寄存器及程序計數器(PC)。在所有的寄存器中,有些是各模式共用的同一個物理寄存器;有一些寄存器是各模式自己擁有的獨立的物理寄存器。 系統模式和用戶模式共享相同的寄存器。用戶、系統模式沒有「保存的程序狀態寄存器(SPSR)」,而其他5種模式分別有一個對應的「保存的狀態寄存器(SPSR)」,即共五個SPSR,七個模式共用一個「當時程序狀態寄存器(CPSR)」,即共六個狀態寄存器,還有31個通用寄存器。

3.1 ARM工作狀態下的寄存器組織
通用寄存器:
通用寄存器包括R0~R15,可以分為三類:
─ 未分組寄存器R0~R7
─ 分組寄存器R8~R14
─ 程序計數器PC(R15)
未分組寄存器R0~R7:
在所有的運行模式下,未分組寄存器都指向同一個物理寄存器,他們未被系統用作特殊的用途,因此,在中斷或異常處理進行運行模式轉換時,由於不同的處理器運行模式均使用相同的物理寄存器,可能會造成寄存器中數據的破壞,這一點在進行程序設計時應引起注意。
分組寄存器R8~R14
對於分組寄存器,他們每一次所訪問的物理寄存器與處理器當前的運行模式有關。
對於R8~R12來說,每個寄存器對應兩個不同的物理寄存器,當使用fiq模式時,訪問寄存器R8_fiq~R12_fiq;當使用除fiq模式以外的其他模式時,訪問寄存器R8_usr~R12_usr。
對於R13、R14來說,每個寄存器對應6個不同的物理寄存器,其中的一個是用戶模式與系統模式共用,另外5個物理寄存器對應於其他5種不同的運行模式。
採用以下的記號來區分不同的物理寄存器:
R13_
R14_
其中,mode為以下幾種模式之一:usr、fiq、irq、svc、abt、und。
寄存器R13在ARM指令中常用作堆棧指針,但這只是一種習慣用法,用戶也可使用其他的寄存器作為堆棧指針。而在Thumb指令集中,某些指令強制性的要求使用R13作為堆棧指針。
由於處理器的每種運行模式均有自己獨立的物理寄存器R13,在用戶應用程式的初始化部分,一般都要初始化每種模式下的R13,使其指向該運行模式的棧空 間,這樣,當程序的運行進入異常模式時,可以將需要保護的寄存器放入R13所指向的堆棧,而當程序從異常模式返回時,則從對應的堆棧中恢復,採用這種方式 可以保證異常發生後程序的正常執行。
R14也稱作子程序連接寄存器(Subroutine Link Register)或連接寄存器LR。當執行BL子程序調用指令時,R14中得到R15(程序計數器PC)的備份。其他情況下,R14用作通用寄存器。與 之類似,當發生中斷或異常時,對應的分組寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用來保存R15的返回 值。
寄存器R14常用在如下的情況:
在每一種運行模式下,都可用R14保存子程序的返回地址,當用BL或BLX指令調用子程序時,將PC的當前值拷貝給R14,執行完子程序後,又將R14的值拷貝回PC,即可完成子程序的調用返回。以上的描述可用指令完成:
1、執行以下任意一條指令:
MOV PC,LR
BX LR
2、在子程序入口處使用以下指令將R14存入堆棧:
STMFD SP!,{,LR}
對應的,使用以下指令可以完成子程序返回:
LDMFD SP!,{,PC}
R14也可作為通用寄存器。
程序計數器PC(R15)
寄存器R15用作程序計數器(PC)。在ARM狀態下,位[1:0]為0,位[31:2]用於保存PC;在Thumb狀態下,位[0]為0,位 [31:1]用於保存PC;雖然可以用作通用寄存器,但是有一些指令在使用R15時有一些特殊限制,若不注意,執行的結果將是不可預料的。在ARM狀態 下,PC的0和1位是0,在Thumb狀態下,PC的0位是0。
R15雖然也可用作通用寄存器,但一般不這麼使用,因為對R15的使用有一些特殊的限制,當違反了這些限制時,程序的執行結果是未知的。
由於ARM體系結構採用了多級流水線技術,對於ARM指令集而言,PC總是指向當前指令的下兩條指令的地址,即PC的值為當前指令的地址值加8個字節。

在ARM狀態下,任一時刻可以訪問以上所討論的16個通用寄存器和一到兩個狀態寄存器。在非用戶模式(特權模式)下,則可訪問到特定模式分組寄存器,上圖說明在每一種運行模式下,哪一些寄存器是可以訪問的。
寄存器R16:
寄存器R16用作CPSR(Current Program Status Register,當前程序狀態寄存器),CPSR可在任何運行模式下被訪問,它包括條件標誌位、中斷禁止位、當前處理器模式標誌位,以及其他一些相關的控制和狀態位。
每一種運行模式下又都有一個專用的物理狀態寄存器,稱為SPSR(Saved Program Status Register,備份的程序狀態寄存器),當異常發生時,SPSR用於保存CPSR的當前值,從異常退出時則可由SPSR來恢復CPSR。
由於用戶模式和系統模式不屬於異常模式,他們沒有SPSR,當在這兩種模式下訪問SPSR,結果是未知的。
3.2 Thumb工作狀態下的寄存器組織
Thumb狀態下的寄存器集是ARM狀態下寄存器集的一個子集,程序可以直接訪問8個通用寄存器(R7~R0)、程序計數器(PC)、堆棧指針(SP)、 連接寄存器(LR)和CPSR。同時,在每一種特權模式下都有一組SP、LR和SPSR。圖2.4表明Thumb狀態下的寄存器組織。

Thumb狀態下的寄存器組織與ARM狀態下的寄存器組織的關係:
─ Thumb狀態下和ARM狀態下的R0~R7是相同的。
─ Thumb狀態下和ARM狀態下的CPSR和所有的SPSR是相同的。
─ Thumb狀態下的SP對應於ARM狀態下的R13。
─ Thumb狀態下的LR對應於ARM狀態下的R14。
─ Thumb狀態下的程序計數器對應於ARM狀態下R15
以上的對應關係如圖2.5所示:

訪問THUMB狀態下的高位寄存器(Hi-registers):
在Thumb狀態下,高位寄存器R8~R15並不是標準寄存器集的一部分,但可使用彙編語言程序受限制的訪問這些寄存器,將其用作快速的暫存器。使用帶特 殊變量的MOV指令,數據可以在低位寄存器和高位寄存器之間進行傳送;高位寄存器的值可以使用CMP和ADD指令進行比較或加上低位寄存器中的值。

程序狀態寄存器
ARM體系結構包含一個當前程序狀態寄存器(CPSR)和五個備份的程序狀態寄存器(SPSRs)。備份的程序狀態寄存器用來進行異常處理,其功能包括:
─ 保存ALU中的當前操作信息
─ 控制允許和禁止中斷
─ 設置處理器的運行模式
程序狀態寄存器的每一位的安排如下圖所示:

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

N Negative 如果結果是負數則置位Z Zero 如果結果是零則置位C Carry 如果發生進位則置位O Overflow 如果發生溢出則置位

相關焦點

  • 【乾貨分享】從0開始學ARM-ARM模式、寄存器、流水線
    ARM指令編譯後是4個字節(與字邊界對齊);Thumb指令編譯後是2個字節(與半字邊界對齊)。Cortex系列之前的ARM處理器工作模式一共有7種。1. 工作模式Cortex系列的ARM處理器工作模式有8種,多了1個monitor模式,如下圖所示:
  • GPIO內部結構、工作原理及相關寄存器詳解(以STM32為例)
    …GPIOG)  例如:PGIOA包含PA0,PA1,PA2…PA15,每組16個IO口  二,IO口的基本結構和工作方式  1.   四,八種工作方式講解  1,GPIO輸入工作模式1-輸入浮空模式
  • Arm pwn學習
    對於第三種有等號的情況,R0寄存器的值將為立即數的值LDM 和 STM是多數據傳送指令,用來裝載和存儲多個字的數據從/到內存。比如:STMFD SP!預先增加存儲 STMEA STMIA 過後增加存儲 STMFD STMDB 預先減少存儲 STMED STMDA 過後減少存儲寄存器命名:RegAPCS意義R0A1工作寄存器R1A2R2A3R3A4R4V1必須保護R5V2R6V3R7V4
  • ARM常用概念須知
    文章羅列了關於ARM的22個常用概念。包括一些使用注意事項,ARM啟動代碼設計,ARM處理器運行模式,ARM體系結構所支持的異常類型和一些基本操作方法等等。;SPSR:程序保護狀態寄存器;2.MAM 使用注意事項:答:當改變 MAM 定時值時,必須先通過向 MAMCR 寫入 0 來關閉 MAM,然後將新值寫入 MAMTIM.最後,將需要的操作模式的對應值寫入MAMCR,再次打開MAM.
  • 新手福利:ARM常用概念須知
    ;SPSR:程序保護狀態寄存器;2.MAM 使用注意事項:答:當改變 MAM 定時值時,必須先通過向 MAMCR 寫入 0 來關閉 MAM,然後將新值寫入 MAMTIM.最後,將需要的操作模式的對應值寫入MAMCR,再次打開MAM.
  • 移位寄存器的特點_移位寄存器工作原理
    移位寄存器的工作原理   把若干個觸發器串接起來,就可以構成一個移位寄存器。由4個邊沿D 觸發器構成的4位移位寄存器邏輯電路如圖8.8.1所示。數據從串行輸入端D1輸入。左邊觸發器的輸出作為右鄰觸發器的數據輸入。
  • 寄存器和移位寄存器
    寄存器1.定義2.電路舉例 3.邏輯功能分析7.4.2 移位寄存器一、單向移位寄存器㈠ 由4個維持阻塞D觸發器組成4位右移位寄存器。
  • ARM處理器寄存器和彙編指令系統
    ARM體系結構支持7種處理器模式,分別是:用戶、FIQ、IRQ、管理、中止(abort)、未定義和系統模式。除了用戶模式外,其餘都稱之為特權模式。除了用戶和系統模式外,其餘都稱之為異常模式。本文引用地址:在ARM狀態PC的位[1:0]為0,而在Thumb狀態,位[0]為0.
  • ARM彙編中^、!、cxsf符號和movs等指令使用
    ^的理解^是一個後綴標誌,不能在User模式和Sys系統模式下使用該標誌.該標誌有兩個存在目的:6.1.對於LDM操作,同時恢復的寄存器中含有pc(r15)寄存器,那麼指令執行的同時cpu自動將spsr拷貝到cpsr中如:在IRQ中斷返回代碼中[如下為ads環境下的代碼gliethttp]ldmfd {r4} //讀取sp中保存的的spsr值到r4中msr spsr_cxsf
  • ARM指令學習筆記
    arm7TDMI(-S)指令系統有兩套指令集,分別是32位的Arm指令集和16位的thumb指令集。簡單點說:arm支持arm內核的所有特點,具有高效、快速的特點;而thumb指令集靈活、小巧。Arm的寄存器是37個,包括31generalregisters(Rxx)6status registers(xPSR)對這37個寄存器的詳細描述我們可以從nocash.emubase.de這個網站上得到。學習arm指令,最先接觸的是尋址指令。Arm尋址指令可分為九類:Arm指令 80x86中有嗎?
  • ARM Linux異常處理之data abort
    這時因為irq等異常在跳轉表中都要經過vector_stub宏,而不管之前是哪種狀態,這個宏都會將CPU狀態改為svc模式。usr模式即Linux中的用戶態模式,svc即內核模式。下面看一下在不同模式下進入data abort時的處理過程。
  • 什麼是CPU的寄存器
    其中,CF,PF,AF,ZF,SF,OF為643個狀態標誌,用於反映最近一次影響標誌位的算術或邏輯運算中,運算過程、運算結果的8086/8088彙編語言程序設計些性質:TF,F,DF為3個控制標誌,用於控制CPU對某些特定事件的處理方式,以及控制CPU的工作模式。
  • 程序狀態字寄存器PSW介紹
    PSW各位定義:psw.7 psw.6psw.5 psw.4 psw.3psw.2 psw.1 psw.0本文引用地址:http://www.eepw.com.cn/article
  • ARM彙編和內嵌彙編
    一、ldr的確是個複雜的指令,現總結一下: 首先要判斷我們用的是ldr arm指令還是偽指令。 當我們用的是arm指令時,它的作用不是向寄存器裡加載立即數,而是將某個地址裡 的內容加載到寄存器。而偽指令ldr的作用就是向寄存器裡加載立即數。
  • MCS-51單片機的程序狀態寄存器PSW的作用是什麼?
    MCS-51單片機的程序狀態寄存器PSW的作用是什麼?常用標誌有哪些位?作用是什麼?答:PSW是一個8位寄存器,用於設定CPU的狀態和指示指令執行後的狀態。CY(PSW.7):進位標誌。在執行加減運算指令時,如果運算結果的最高位(D7)發生了進位或借位,則CY由硬體自動置1。
  • 單片機定時器工作模式TMOD設置
    單片機定時器工作模式TMOD設置TMOD:定時器/計數器模式控制寄存器(TIMER/COUNTER MODECONTROL REGISTER)定時器/計數器模式控制寄存器TMOD是一個逐位定義的8位寄存器,但只能使用字節尋址,其字節地址為89H。
  • 第1個ARM裸板程序及引申
    在硬體角度看,電晶體只有兩個狀態:on是1,off是0; 數據使用多個電晶體進行表示,用二進位描述,吻合硬體狀態。為何引入八進位?將二進位的三位作為一組,把這一組作為一位進行表示,就是八進位。為何引入十六進位?將二進位的四位作為一組,把這一組作為一位進行表示,就是十六進位。八進位和十六進位方便我們描述,簡化了長度。
  • 寄存器在CPU中是怎麼工作的,原理是什麼?
    CPU又稱為處理器,由運算器、控制器、寄存器、輸入設備和輸出設備組成,這些器件由處理數據總線相連。它們在處理器中,分工明確:運算器:進行數據的處理。寄存器:進行數據的存儲。控制器:控制各種器件工作。圖2-2-1通過圖2-2-1我們來簡單了解,處理器的底部和四周有大量的引腳,可以接受外界發來傳送的電信號。每個引腳都有自己的用處。
  • 移位寄存器74ls194應用電路圖大全(雙向移位寄存器/74HC93/環形...
    將兩片4位雙向移位寄存器的移位脈衝輸入端、清零端和工作狀態輸入端分別相連。這樣,就實現了用兩片4位雙向移位寄存器74LS19474LS194接成一個8位雙向移位寄存器。 IC2的2腳D端為寄存器的數據輸入端,它與寄存器IC3的9腳輸出端相連,形成一個閉環,使寄存器移出的信號又重新反饋到輸入端,因此寄存器在移位過程中不需要外加數據信號,但需要初始數據信號,利用D觸發器置位、復位端來設定。 右圖為移位寄存器工作波形圖。在n時刻,按下初始化開關SB2,寄存器初始化 為0111。在t2時刻,鬆開SB2,寄存器處於保持狀態。
  • 常用ARM彙編指令
    本文引用地址:http://www.eepw.com.cn/article/201611/322957.htmARM指令集可以分為六大類,分別為數據處理指令、Load/Store指令、跳轉指令、程序狀態寄存器處理指令、協處理器指令和異常產生指令。