ARM基礎(chǔ)知識(shí)連載(2)
***************************************************************
程序狀態(tài)寄存器
***************************************************************
CPSR(當(dāng)前程序狀態(tài)寄存器)在任何處理器模式下被訪問。它包含了條件標(biāo)志位、中斷禁止位、當(dāng)前處理器模式標(biāo)志以及其他的一些控制和狀態(tài)位。每一種處理器
模式下都有一個(gè)專用的物理狀態(tài)寄存器,稱為SPSR(備份程序狀態(tài)寄存器)
。當(dāng)特定的異常中斷發(fā)生時(shí),這個(gè)寄存器用于存放當(dāng)前程序狀態(tài)寄存器的內(nèi)容。在異常中斷退出時(shí),可以用SPSR來恢復(fù)CPSR。由于用戶模式和系統(tǒng)模式不是異常
中斷模式,所以他沒有SPSR。當(dāng)用戶在用戶模式或系統(tǒng)模式訪問SPSR,將產(chǎn)生不可預(yù)知的后果。
CPSR格式如下所示。SPSR和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
***條件標(biāo)志位***
N——本位設(shè)置成當(dāng)前指令運(yùn)算結(jié)果的bit[31]的值。當(dāng)兩個(gè)表示的有符號(hào)整數(shù)運(yùn)算時(shí),n=1表示運(yùn)算結(jié)果為負(fù)數(shù),n=0表示結(jié)果為正書或零。
z——z=1表示運(yùn)算的結(jié)果為零;z=0表示運(yùn)算的結(jié)果不為零。對(duì)于CMP指令,Z=1表示進(jìn)行比較的兩個(gè)數(shù)大小相等。
C——下面分四種情況討論C的設(shè)置方法:
在加法指令中(包括比較指令CMP),當(dāng)結(jié)果產(chǎn)生了進(jìn)位,則C=1,表示無符號(hào)運(yùn)算發(fā)生上溢出;其他情況C=0。
在減法指令中(包括減法指令CMP),當(dāng)運(yùn)算中發(fā)生錯(cuò)位,則C=0,表示無符號(hào)運(yùn)算數(shù)發(fā)生下溢出;其他情況下C=1。
對(duì)于包含移位操作的非加堿運(yùn)算指令,C中包含最后一次溢出的的位的數(shù)值
對(duì)于其他非加減運(yùn)算指令,C位的值通常不受影響
V——對(duì)于加減運(yùn)算指令,當(dāng)操作數(shù)和運(yùn)算結(jié)果為二進(jìn)制的補(bǔ)碼表示的帶符號(hào)數(shù)時(shí),V=1表示符號(hào)為溢出;通常其他指令不影響V位。
***Q標(biāo)識(shí)位***
在ARM V5的E系列處理器中,CPSR的bit[27]稱為q標(biāo)識(shí)位,主要用于指示增強(qiáng)的dsp指令是否發(fā)生了溢出。同樣的spsr的bit[27]位也稱為q標(biāo)識(shí)位,用于在異常中
斷發(fā)生時(shí)保存和恢復(fù)CPSR中的Q標(biāo)識(shí)位。
在ARM V5以前的版本及ARM V5的非E系列的處理器中,Q標(biāo)識(shí)位沒有被定義。
***CPSR中的控制位***
CPSR的低八位I、F、T、M[4:0]統(tǒng)稱為控制位。當(dāng)異常中斷發(fā)生時(shí)這些位發(fā)生變化。在特權(quán)級(jí)的處理器模式下,軟件可以修改這些控制位。
**中斷禁止位:當(dāng)I=1時(shí)禁止IRQ中斷,當(dāng)F=1時(shí)禁止FIQ中斷
**T控制位:T控制位用于控制指令執(zhí)行的狀態(tài),即說明本指令是ARM指令還是Thumb指令。對(duì)于ARM V4以更高版本的T系列ARM處理器,T控制位含義如下:
T=0表示執(zhí)行ARM指令
T=1表示執(zhí)行Thumb指令
對(duì)于ARM V5以及更高版本的非T系列處理器,T控制位的含義如下
T=0表示執(zhí)行ARM指令
T=1表示強(qiáng)制下一條執(zhí)行的指令產(chǎn)生未定指令中斷
***M控制位***
M控制位控制處理器模式,具體含義如下:
M[4:0] 處理器模式 可訪問的寄存器
ob10000 user pc,r14~r0,CPSR
0b10001 FIQ PC,R14_FIQ-R8_FIQ,R7~R0,CPSR,SPSR_FIQ
0b10010 IRQ PC,R14_IRQ-R13_IRQ,R12~R0,CPSR,SPSR_IRQ
0B10011 SUPERVISOR PC,R14_SVC-R13_SVC,R12~R0,CPSR,SPSR_SVC
0b10111 ABORT PC,R14_ABT-R13_ABT,R12~R0,CPSR,SPSR_ABT
0b11011 UNDEFINEED PC,R14_UND-R8_UND,R12~R0,CPSR,SPSR_UND
0b11111 SYSTEM PC,R14-R0,CPSR(ARM V4以及更高版本)
***CPSR中的其他位***
這些位用于將來擴(kuò)展。應(yīng)用軟件不要操作這些位。
評(píng)論