ARM的37個寄存器詳解


ARM寄存器
ARM共有37個32位物理寄存器,7種工作模式下可訪問的寄存器見下表,User和System使用完全相同的物理寄存器。

ARM寄存器介紹

ARM寄存器介紹


2.1 R0~R7
      所有工作模式下,R0-R7都分別指向同一個物理寄存器(共8個物理寄存器),它們未被系統用作特殊的用途。在中斷或異常處理進行工作模式轉換時,由於不同工作模式均使用相同的物理寄存器,可能造成寄存器中數據的破壞。
2.2 R8~R12

      在User&System、IRQ、Svc、Abt和Und模式下訪問的R8~R12都是同一個物理寄存器(共5個物理寄存器);在FIQ模式下,訪問的R8_fiq~R12_fiq是另外獨立的物理寄存器(共5個物理寄存器)。

2.3 R13和R14

       在User&System、IRQ、FIQ、Svc、Abt和Und訪問的R13_~R14都是各自模式下獨立的物理寄存器(共12個物理寄存器)。

       R13在ARM指令中常用作堆棧指針(SP),但這只是一種習慣用法,用戶也可使用其他的寄存器作為堆棧指針。而在Thumb指令集中,某些指令強制性的要求使用R13作為堆棧指針。

       由於處理器的每種工作模式均有自己獨立的物理寄存器R13,在用戶應用程序的初始化部分,一般都要初始化每種模式下的R13,使其指向該工作模式的棧空間。這樣,當程序進入異常模式時,可以將需要保護的寄存器放入R13所指向的堆棧,而當程序從異常模式返回時,則從對應的堆棧中恢復,采用這種方式可以保證異常發生后程序的正常執行。
     R14稱為鏈接寄存器(Link Register),當執行子程序調用指令(BL)時,R14可得到R15(程序計數器PC)的備份。在每一種工作模式下,都可用R14保存子程序的返回地址,當用BL或BLX指令調用子程序時,將PC的當前值復制給R14,執行完子程序后,又將R14的值復制回PC,即可完成子程序的調用返回。以上的描述可用指令完成。

執行以下任意一條指令:
MOV PC, LR
BX LR
在子程序入口處使用以下指令將R14存入堆棧:
STMFD SP!,{,LR}
對應的,使用以下指令可以完成子程序返回:
LDMFD SP!,{,PC}
R14也可作為通用寄存器。
2.4 程序計數器PC(R15)
      所有工作模式下訪問的R15都是同一個物理寄存器,由於ARM體系結構采用了多級流水線技術,對於ARM指令集而言,PC總是指向當前指令的下兩條指令的地址,即PC的值為當前指令的地址值加8個字節。

    在ARM狀態下,R15[1:0]為0,R15[31:2]用於保存PC;在Thumb狀態下,R15[0]為0,R15[31:1]用於保存PC。

2.5 CPSR和SPSR

      R16用作CPSR(Current Program Status Register,當前程序狀態寄存器),CPSR可在任何工作模式下被訪問,它包括條件標志位、中斷禁止位、當前處理器模式標志位,以及其他一些相關的控制和狀態位。

      每一種工作模式下又都有一個專用的物理狀態寄存器,稱為SPSR(Specified Program Status Register,備份的程序狀態寄存器),當異常發生時,SPSR用於保存CPSR的當前值,從異常退出時則可由SPSR來恢復CPSR。
     User模式和System模式不屬於異常模式,它們沒有SPSR,當在這兩種模式下訪問SPSR,結果是未知的。

2.6 CPSR各標志位含義

31 30 29 28 27 26 7 6 5 4 3 2 1 0
N Z C V Q DNM(RAZ) I F T M4 M3 M2 M1 M0

N(Negative)---設置成當前指令運算結果的bit[31]的值。當兩個有符號整數運算時,N=1運算結果為負數,N=0運算結果為正。

Z(Zero)---Z=1運算結果為零;Z=0表示運算的結果不為零。對於CMP指令,Z=1表示進行比較的兩個數大小相等。

C(Carried out)---分四種情況討論
1)在加法指令中(包括比較指令CMP),當結果產生進位,則C=1,表示無符號運算發生上溢出;其他情況C=0。
2)在減法指令中(包括減法指令CMP),當運算發生借位,則C=0,表示無符號運算發生下溢出;其他情況下C=1。
3)對於包含移位操作的非加減運算指令,C中包含最后一次溢出的位的數值
4)對於其他非加減運算指令,C位的值通常不受影響
V(oVerflow)---對於加減運算指令,當操作數和運算結果為二進制的補碼表示的帶符號數時,V=1符號為溢出;通常其他指令不影響V位。

Q---在ARM V5的E系列處理器中,CPSR的bit[27]稱為Q標識位,主要用於指示增強的DSP指令是否發生了溢出。同樣的spsr的bit[27]位也稱為Q標識位,用於在異常中斷發生時保存和恢復CPSR中的Q標識位。在ARM V5以前的版本及ARM V5的非E系列的處理器中,Q標識位沒有被定義。

I和F---當I=1時禁止IRQ中斷,當F=1時禁止FIQ中斷

T---對於ARM V4以更高版本的T系列ARM處理器,T=0表示執行ARM指令;T=1表示執行Thumb指令
對於ARM V5以及更高版本的非T系列處理器,T=0表示執行ARM指令;T=1表示強制下一條執行的指令產生未定指令中斷

M[4:0]---定義了的ARM工作模式,具體見1中表CSPR[4:0]定義的ARM工作模式

3 控制程序的執行流程的3種方式

1)在正常執行過程中,每執行一條ARM指令,程序計數器(PC)的值加4個字節;每執行一條Thumb指令,程序計數器寄存器(PC)加2個字節。整個過程是按順序執行。

2)跳轉指令,程序可以跳轉到特定的地址處執行,或者跳轉到特定的子程序處執行。其中,B指令用於執行跳轉操作;BL指令在執行跳轉操作同時,保存子程序的返回地址;BX指令在執行跳轉操作同時,根據目標地址為可以將程序切換到Thumb狀態;BLX指令執行3個操作,跳轉到目標地址處執行,保存子程序的返回地址,根據目標地址為可以將程序切換到Thumb狀態。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM