一、CPSR概述
ARM處理器共有37個寄存器。這37個寄存器按其在用戶編程中的功能划分,可分為2類寄存器,即31個通用寄存器和6個狀態寄存器。這6個狀態寄存器在ARM公司文件中其名稱分別為:CPSR、SPSR_svc、SPSR_abt、SPSR_und、SPSR_irq和SPSR_fig。這12的作用分別如圖1所示:
程序狀態寄存器
所有處理器模式下都可訪問當前程序狀態寄存器CPSR。CPSR中包含條件碼標志、中斷禁止位、當前處理器模式以及其他狀態和控制信息。在每種異常模式下都有一個對用的程序狀態寄存器SPSR。當異常出現時,SPSR用於保存CPSR的狀態,以便異常返回后恢復異常發生時的工作狀態。
(1)條件碼標志
N、Z、C、V,最高4位稱為條件碼標志。ARM的大多數指令可以條件執行的,即通過檢測這些條件碼標志來決定程序指令如何執行。
各個條件碼的含義如下:
N:在結果是有符號的二進制補碼情況下,如果結果為負數,則N=1;如果結果為非負數,則N=0。
Z:如果結果為0,則Z=1;如果結果為非零,則Z=0。
C:其設置分一下幾種情況:
對於加法指令(包含比較指令CMN),如果產生進位,則C=1;否則C=0。
對於減法指令(包括比較指令CMP),如果產生借位,則C=0;否則C=1。
對於有移位操作的非法指令,C為移位操作中最后移出位的值。
對於其他指令,C通常不變。
V:對於加減法指令,在操作數和結果是有符號的整數時,如果發生溢出,則V=1;如果無溢出發生,則V=0;對於其他指令,V通常不發生變化。
(2)控制位的作用在圖1中可以看出,在這里就不闡述了。
二:CPSR與CPSR_c的區別
CPSR有4個8位區域:標志域(F)、狀態域(S)、擴展域(X)、控制域(C)
MSR - Load specified fields of the CPSR or SPSR with an immediate constant, or from the contents of a general-purpose register.
Syntax:
MSR{cond} <psr>_<fields>, #immed_8r MSR{cond} <psr>_<fields>, Rm where: cond is an optional condition code. <psr> is either CPSR or SPSR. <fields> specifies the field or fields to be moved. <fields> can be one or more of:
c control field mask byte (PSR[7:0]) x extension field mask byte (PSR[15:8]) s status field mask byte (PSR[23:16) f flags field mask byte (PSR[31:24]). immed_8r is an expression evaluating to a numeric constant. The constant must correspond to an 8-bit pattern rotated by an even number of bits within a 32-bit word. Rm is the source register.
C 控制域屏蔽字節(psr[7:0])
X 擴展域屏蔽字節(psr[15:8])
S 狀態域屏蔽字節(psr[23:16])
F 標志域屏蔽字節(psr[31:24])
常用於MRS或MSR指令,用於psr中的值轉移到寄存器或把寄存器的內容加載到psr中.
如:
MSR CPSR_c,#0xd3
參考:
http://blog.csdn.net/david_luyang/article/details/6276533
https://blog.csdn.net/cfy_fonex