關於CPSR_cxsf

關於CPSR_cxsf
msr cpsr_cxsf,r1 ;這裏的cxsf表示從低到高分別佔用的4個8bit的數據域

指令中有時還有出現cpsr_cf, cpsr_all, cpsr_c等,這裏:

c 指 CPSR中的control field ( PSR【7:0】)
f 指 flag field (PSR【31:24】)
x 指 extend field (PSR【15:8】)
s 指 status field ( PSR【23:16】)

其中cpsr的位表示爲:
31 30 29 28 --- 7 6 - 4 3 2 1 0
N Z C V I F M4 M3 M2 M1 M0

0 0 0 0 0 User26 模式
0 0 0 0 1 FIQ26 模式
0 0 0 1 0 IRQ26 模式
0 0 0 1 1 SVC26 模式
1 0 0 0 0 User 模式
1 0 0 0 1 FIQ 模式
1 0 0 1 0 IRQ 模式
1 0 0 1 1 SVC 模式
1 0 1 1 1 ABT 模式
1 1 0 1 1 UND 模式

深入分析:
對於MSR(寄存器到狀態寄存器)的指令,
MSR CPSR, r0
MSR CPSR_all, r0
MSR CPSR_flg, r0
都是已經過時的表示方法。
對於MRS(狀態寄存器到寄存器)的指令,
MRS R0, CPSR 等同於MRS R0, CPSR_cxsf
MRS R0, CPSR_all 會有waring
MRS R0, CPSR_flg 會有錯誤
在ADS中使用c,f,x,s表示cpsr的各個部分是推薦的。從指令來說:
MSR CPSR_f, r0機器碼爲0xe128f000
MSR CPSR_c, r0機器碼爲0xe121f000
MSR CPSR_x, r0機器碼爲0xe122f000
MSR CPSR_s, r0機器碼爲0xe124f000
可見機器碼中用bit【29:16】4bit表示是f,c,x,s的。所以能夠在機器執行的時候,
給予不同的執行結果。爲了代碼向後兼容性,建議使用f,c,x,s尾綴。

關於CPSR的條件位
ARM中的程序狀態寄存器(CPSR)
分類:ARM嵌入式系統
2006.11.1 00:31 作者:hokepoly | 評論:1 | 閱讀:3893

31 30 29 28 27 ~ 8 7 6 5 4 3 2 1 0
N Z C V 保留 I F T M4 M3 M2 M1 M0

N Negative/Less Than I IRQ disable
Z Zero F FIQ disable
C Carry/Borrow/Extend T State bit
V Overflow M0~4 Mode bits


1、條件碼標誌

N、Z、C、V均爲條件碼標誌位。它們的內容可被算術或邏輯運算的結果所改變,並且可以決定某條指令是否被執行。條件碼標誌各位的具體含義如下表所示:


標誌位 含 義
N 當用兩個補碼錶示的帶符號數進行運算時,N=1表示運算的結果爲負數;N=0表示運算的結果爲正數或零
Z Z=1表示運算的結果爲零,Z=0表示運算的結果非零。
C 可以有4種方法設置C的值:
-加法運算(包括CMP):當運算結果產生了進位時(無符號數溢出),C=1,否則C=0。
-減法運算(包括CMP):當運算時產生了借位時(無符號數溢出),C=0,否則C=1。
-對於包含移位操作的非加/減運算指令,C爲移出值的最後一位。
-對於其它的非加/減運算指令,C的值通常不會改變。
V 可以有2種方法設置V的值:
-對於加減法運算指令,當操作數和運算結果爲二進制的補碼錶示的帶符號數時,V=1表示符號位溢出
-對於其它的非加/減運算指令,V的值通常不會改變。
Q 在ARM V5及以上版本的E系列處理器中,用Q標誌位指示增強的DSP運算指令是否發生了溢出。在其它版本的處理器中,Q標誌位無定義



在ARM狀態下,絕大多數的指令都是有條件執行的;在THUMB狀態下,僅有分支指令是條件執行的。

2 控制位

CPSR的低8位(包括I、F、T和M【4:0】)稱爲控制位,當發生異常時這些位可以被改變。如果處理器運行於特權模式時,這些位也可以由程序修改。

·中斷禁止位I、F:置1時,禁止IRQ中斷和FIQ中斷。

·T標誌位:該位反映處理器的運行狀態。當該位爲1時,程序運行於THUMB狀態,否則運行於ARM狀態。該信號反映在外部引腳TBIT上。在程序中不得修改CPSR中的TBIT位,否則處理器工作狀態不能確定。

·運行模式位M【4:0】:這幾位是模式位,這些位決定了處理器的運行模式。具體含義如下表所示:

·保留位:CPSR中的其餘位爲保留位,當改變CPSR中的條件碼標誌位或者控制位時,保留位不要改變,在程序中也不要用保留位存儲數據。保留位將用於ARM版本的擴展。


M【4:0】 處理器模式 ARM模式可訪問的寄存器 THUMB模式可訪問的寄存器
0b10000 用戶模式 PC,CPSR,R0~R14 PC,CPSR,R0~R7,LR,SP
0b10001 FIQ模式 PC,CPSR,SPSR_fiq,R14_fiq~R8_fiq,R0~R7 PC,CPSR,SPSR_fiq,LR_fiq,SP_fiq,R0~R7
0b10010 IRQ模式 PC,CPSR,SPSR_irq,R14_irq~R13_irq,R0~R12 PC,CPSR,SPSR_irq,LR_irq,SP_irq,R0~R7
0b10011 管理模式 PC,CPSR,SPSR_svc,R14_svc~R13_svc,R0~R12 PC,CPSR,SPSR_svc,LR_svc,SP_svc,R0~R7
0b10111 中止模式 PC,CPSR,SPSR_abt,R14_abt~R13_abt,R0~R12 PC,CPSR,SPSR_abt,LR_abt,SP_abt,R0~R7
0b11011 未定義模式 PC,CPSR,SPSR_und,R14_und~R13_und,R0~R12 PC,CPSR,SPSR_und,LR_und,SP_und,R0~R7
0b11111 系統模式 PC,CPSR,R0~R14 PC,CPSR,LR,SP,R0~R74

發佈了14 篇原創文章 · 獲贊 8 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章