arm 標志寄存器 CPSR SPSR 圖解


 

 

一、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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM