ARM的37個寄存器(二)

ARM的37個寄存器(二)

參考網址:https://blog.csdn.net/weixin_42445727/article/details/81037804

 

一、ARM微處理器共有37個32位寄存器,其中30個爲通用寄存器,1個固定用作PC,6個位狀態寄存器(1個固定用作CPSR,5個固固定用作5種模式下的SPSR)。但是這些寄存器不能被同時訪問,具體哪些寄存器是可以訪問的,取決ARM處理器的工作狀態及具體的運行模式。37個寄存器具體分佈如下圖:

需要注意的是:System模式與User模式共用寄存器集。

二、對於R13,R14來說,每個寄存器對應6個不同的物理寄存器,其中一個是用戶模式與系統模式共用,另外5個物理寄存器對應其他5種不同的運行模式。其中mode可爲:usr,fiq,irq,svc,abt,und.

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

由於處理器的每種運行模式均有自己獨立的物理寄存器R13,在用戶應用程序的初始化部分,一般都要初始化每種模式下的R13,使其指向該運行模式的棧空間。這樣,當程序的運行進入異常模式時,可以將需要保護的寄存器放入R13所指向的堆棧,而當程序從異常模式返回時,則從對應的堆棧中恢復,採用這種方式可以保證異常發生後程序的正常執行。

四、R14稱爲子程序鏈接寄存器LR(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也可作爲通用寄存器。

五、程序計數器PC(R15)
寄存器R15用作程序計數器(PC),在ARM狀態下,位[1:0]爲0,位[31:2]用於保存PC,在Thumb狀態下,位[0]爲0,位[31:1]用於保存PC.

由於ARM體系結構採用了多級流水線技術,對於ARM指令集而言,PC總是指向當前指令的下兩條指令的地址,即PC的值爲當前指令的地址值加8個字節程序狀態寄存器

PC爲程序指針,PC指向哪裏,CPU就會執行那條指令。整個CPU只有一個PC(CPOSR也只有一個,但SPSR有5個)

六、寄存器R16

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

每一種運行模式下又都有一個專用的物理狀態寄存器,稱爲SPSR(Saved Program Status Register,備份的程序狀態寄存器),當異常發生時,SPSR用於保存CPSR的當前值,從異常退出時則可由SPSR來恢復CPSR。

 

由於用戶模式和系統模式不屬於異常模式,它們沒有SPSR,當在這兩種模式下訪問SPSR,結果是未知的

 

七、CPSR+SPSR詳解

1.  CPSR格式

     SPSR和CPSR格式相同。 CPSR格式如下圖所示:

 

2. 條件碼標誌

    N、Z、C、V均爲條件碼標誌位。它們的內容可被算術或邏輯運算的結果所改變,並且可以決定某條指令是否被執行。條件碼標誌各位的具體含義如下表所示:

標誌位

含義

N

當兩個有符號整數運算時:

N=1:表示運算的結果爲負數;

N=0:表示運算的結果爲正數或零。

Z

Z=1表示運算的結果爲零,Z=0表示運算的結果非零。

對於CMP指令,Z=1表進行比較的兩個數相等

C

可以有4種方法設置C的值:

     在加法指令中(包括比較指令CMP),當結果產生了進位,則C=1,表示無符號運算髮生上溢出;其他情況C=0。

    在減法指令中(包括減法指令CMP),當運算中發生借位,則C=0,表示無符號運算數發生下溢出;其他情況下C=1。

    對於包含移位操作的非加鹼運算指令,C中包含最後一次溢出的的位的數值

    對於其他非加減運算指令,C位的值通常不受影響

V

對於加減運算指令,當操作數和運算結果爲二進制的補碼錶示的帶符號數時,V=1表示符號爲溢出;通常其他指令不影響V位。

3. 控制位

    CPSR的低八位I、F、T、M[4:0]統稱爲控制位。當異常中斷髮生時這些位發生變化。在特權級的處理器模式下,軟件可以修改這些控制位。

    1) I:  IRQ中斷禁止位:當I=1時禁止IRQ中斷,

    2) F: FIQ中斷禁止位:當F=1時禁止FIQ中斷

    3) T: T控制位該位反映處理器的運行狀態。當該位爲1時,程序運行於THUMB狀態,否則運行於ARM狀態。該信號反映在外部引腳TBIT上。在程序中不得修改CPSR中的TBIT位,否則處理器工作狀態不能確定。

    4) 保留位:CPSR中的其餘位爲保留位,當改變CPSR中的條件碼標誌位或者控制位時,保留位不要改變,在程序中也不要用保留位存儲數據。保留位將用於ARM版本的擴展。

   5) 運行模式位M[4:0]:這幾位是模式位,這些位決定了處理器的運行模式。具體含義如下表所示:

M[4:0]

處理器模式

ARM模式可訪問的寄存器

THUMB模式可訪問的寄存器

0b10000

用戶模式

PC,CPSR,R0~R14

PC,CPSR,R0~R7,LR,SP

 

0b10001

FIQ模式

PC,CPSR,SPSR_fiq,R14_fiq~R8_fiq,R0~R7

PC,CPSR,SPSR_fiq,LR_fiq,SP_fiq,R0~R7

 

0b10010

IRQ模式

PC,CPSR,SPSR_irq,R14_irq~R13_irq,R0~R12

PC,CPSR,SPSR_irq,LR_irq,SP_irq,R0~R7

 

0b10011

管理模式

PC,CPSR,SPSR_svc,R14_svc~R13_svc,R0~R12

PC,CPSR,SPSR_svc,LR_svc,SP_svc,R0~R7

 

0b10111

中止模式

PC,CPSR,SPSR_abt,R14_abt~R13_abt,R0~R12

PC,CPSR,SPSR_abt,LR_abt,SP_abt,R0~R7

 

0b11011

未定義模式

PC,CPSR,SPSR_und,R14_und~R13_und,R0~R12

PC,CPSR,SPSR_und,LR_und,SP_und,R0~R

 

0b11111

系統模式

PC,CPSR,R0~R14

PC,CPSR,LR,SP,R0~R74

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