(六)ARM狀態(tài)寄存器-PSR
ARM程序狀態(tài)寄存器Program State Register
在ARM模式中, 有16個(gè)數(shù)據(jù)寄存器和1或2個(gè)狀態(tài)寄存器是可以隨時(shí)訪問(wèn)的.在特權(quán)模式(privileged mode)下, 對(duì)應(yīng)的特殊組寄存器才可以使用.
CPSR當(dāng)前程序狀態(tài)寄存器(Current Program State Register)
SPSR保存的程序狀態(tài)寄存器(Saved Program State Register), 有6個(gè),主要是在處理異常的時(shí)候使用.
每一種處理器模式下都有一個(gè)專用的物理寄存器作為備份的程序狀態(tài)寄存器SPSR , 當(dāng)特定的異常發(fā)生時(shí),這個(gè)物理寄存器負(fù)責(zé)保存CPSR當(dāng)前程序狀態(tài)寄存器的內(nèi)容, 當(dāng)異常處理程序返回時(shí),再將內(nèi)容恢復(fù)到當(dāng)前程序狀態(tài)器中,繼續(xù)向下執(zhí)行原來(lái)程序.
結(jié)構(gòu)解析CPSR和保存它的SPSR寄存器因?yàn)槎紝儆跔顟B(tài)寄存器PSR,因此它們的結(jié)構(gòu)相同,如下:
保存最近的邏輯或者算術(shù)操作的信息;
控制中斷時(shí)使能;
設(shè)置處理器的工作模式;
狀態(tài)寄存器的各個(gè)位的功能如下圖:
其中,著重要注意的是高4位(28-31)和低8位(0-7).
注意:
-DNM(Do Not Modify):不同通過(guò)軟件進(jìn)行賦值;
-條件標(biāo)志位(Condition code flags): N,Z,C,V. 這些位可以通過(guò)邏輯或者算術(shù)操作, 或者M(jìn)SR和LDM指令來(lái)操作. 處理器會(huì)測(cè)試這些標(biāo)志位,以確定是否操作一些指令.
-控制位(低8位 I,F,T,M[4:0]),當(dāng)發(fā)生異常時(shí), 這些為的值將發(fā)生相應(yīng)的變化.在特權(quán)模式下,也可以通過(guò)軟件來(lái)修改這些位.用的比較多.