cpsr當前程序狀態寄存器

詳解CPSR寄存器(ls_core)

  (2012-10-11 17:29:47)

在介紹CPSR寄存器以前,讓咱們來想個問題。CPU執行一條指令的流程是這樣的,CPU從存儲器高速緩衝存儲器中取出指令,放入指令寄存器,並對指令譯碼。它把指令分解成一系列的微操做,而後發出各類控制命令,執行微操做系列,從而完成一條指令的執行。在這個過程當中,CPU執行了加、減、移位運算。想一想看每次加、減、移位運算後的結果的信息哪裏去了?有兩種可能,A:隨着運算的結束消失了。B:將運算的相關信息存儲了起來。舉個例子:8位二進制無符號數相加,1111_1110B+0000_0011B=0000_0001(假設微處理器是8位的,該加法結果溢出了)。該加法表達式譯爲彙編語言爲:html

 

MOV     R0  #0xFE                 @將當即數0xFE裝入通用寄存器R0中url

ADD     R0  R0  #03               @將R0中的內容和當即數0x03相加後存入R0中spa

 

顯然,在運算完成後通用寄存器中的值爲0x01,那麼給人的感受就是254+3=1(有點「小學沒畢業」的感受)。對!CPU就是「小學沒畢業」 該運算結果CPU認爲是正確的,只不過CPU將運算信息(該運算信息就是在運算過程當中出現了一次運算溢出)存儲了起來。其實CPU認爲R0中的值和中間運算信息的集合纔是該表達式的預算結果。好!咱們的答案出來了,選B。CPU將運算的相關信息存儲了起來。問題又來了,這個運算信息要存到哪裏?答案即是筆者今天要將得內容:程序狀態寄存器CPSR。xml

 

ARM920T微處理器任何一種模式下都有一個程序狀態寄存器CPSR(current program status register)的寄存器。該寄存器就是用來存儲一些關於運算的信息,包括,條件標誌位、中斷禁止位、當前處理器模式標誌和控制狀態位等。CPSR是一個32位寄存器,大致分爲三段:[31:28]、[27:8]和[7:0],如圖所示:htm

詳解CPSR寄存器(ls_core)

1、條件標誌位[31:28]blog

條件標誌位有N(Negative)、Z(Zero)、C(Carry)和V(Overflow)。這些標誌位統稱爲條件標誌位。圖片

一、符號標誌位Nci

當兩個補碼錶示的有符號整數運算時,若結果爲負則N=1;若結果爲正或爲零則N=0;例如代碼(假設CPU是8位的):開發

MOV     R0        #0x05get

SUB      R1,     R0,     #0x06

當CPU執行完該代碼以後R1中的值爲0XFF。同時CPSR中的符號標誌位N=1,表示運算結果R1中的值爲-1。再看下面一段代碼:

MOV     R0,        #0x06

SUB     R1,        R0,        0x05

當CPU執行完該代碼後R1中的值爲0x01,同時CPSR中的符號標誌位N=0,表示運算結果R1中的值爲1。

二、零標誌位Z

Z=1表示運算結果爲零;Z=0表示運算結果不爲零。

注:對於CMP命令中,Z=1表示比較的兩個數大小相等。

MOV     R0         #05

CMP     R0         #05

當CPU執行CMP這條代碼時,將R0中的值(0x05)與當即數0x05相減(結果不保存),同時使CPSR中的符號標誌位Z=1,表示比較的兩個數大小相等。

三、進位、借位標誌C

該標誌位分四種狀況表示:

A、在加法指令(包括比較指令CMN)中,C=1,表示無符號運算結果產生了進位。其餘狀況C=0。例如:

MOV     R0  #0xFE                

ADD     R0  R0  #03              

當CPU執行完該代碼後,R0中的值爲0x01,同時CPSR的標誌位

C=1,表示運算結果向上進位,該運算結果的大小爲257(這便解釋了,開頭說所的CPU 「小學沒畢業」 的問題)。

B、 在減法指令(包括比較指令CMP)中,當運算中發生借位C=0,表示無符號數運算髮生下溢出;其餘狀況,C=1;

C、 在對於移位操做的指令,C的值爲最後一次被移出位的值。例如:

MOV     R1,     #0xA5

MOV     R0,     R1, LSR#2 @將R1中的值向右移動兩位後存入R0

CPU執行完該代碼後,R0中的值爲0x29,同時CSPR中標誌位C的值爲最後一出去的‘0’。

D、對於其餘非加、減運算指令通常不會影響C的值。

四、溢出標誌位V

當帶符號數進行加減運算指令出現符號位溢出時V=1。

2、[27:8]沒有開發利用。

3、控制位[7:0]

當異常中斷髮生時,該控制位發生變化。在特權級的處理器模式下,軟件能夠修改這些控制位。

●  中斷禁止位:

1.        當I=1時,禁止IRQ中斷。

2.        當F=1時,禁止FIQ中斷。

在CPU上電覆位時須要將IRQ和FIQ中斷關閉,能夠經過一下代碼實現。

MRS       R0,    CPSR           @將CPSR中的內容讀入R0中

BIC       R0,    R0,   #0xC0   @清零R0的第七、6位

ORR       R0,     R0,    #0xC0   @置位R0的第七、6位

MSR       CPSR,   R0             @將R0中的內容回送到CPSR中

●  T控制位

T控制位用於說明執行的指令時ARM指令仍是Thumb指令。對於ARM920T來講,T=0表示ARM指令;T=1表示Thumb指令。

●  控制位M[4:0]控制處理器的模式,共7種模式,如表所示:

詳解CPSR寄存器(ls_core)

注:ARM920T共有7種工做模式,除去用戶模式和系統模式剩下的5中模式中,處理器有一個專用的備份程序狀態寄存器SPSR(Backups Program statues register)。當特定的異常中斷髮生時,SPSR用於存放CPSR中的內容,在異常中斷處理完成後,能夠用SPSR中的內容來恢復CPSR。已達到保護並恢復中斷現場做用。SPSR的格式與CPSR的格式徹底相同。

相關文章
相關標籤/搜索