標籤: arm920t寄存器cpsrcpu工做原理 |
分類: 第四章-踏入嵌入式領域之ARM |
在介紹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
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種模式,如表所示:
注:ARM920T共有7種工做模式,除去用戶模式和系統模式剩下的5中模式中,處理器有一個專用的備份程序狀態寄存器SPSR(Backups Program statues register)。當特定的異常中斷髮生時,SPSR用於存放CPSR中的內容,在異常中斷處理完成後,能夠用SPSR中的內容來恢復CPSR。已達到保護並恢復中斷現場做用。SPSR的格式與CPSR的格式徹底相同。