關於CPSR_cxsfide
msr cpsr_cxsf,r1 ;這裏的cxsf表示從低到高分別佔用的4個8bit的數據域it
指令中有時還有出現cpsr_cf, cpsr_all, cpsr_c等,這裏:class
c 指 CPSR中的control field ( PSR[7:0])兼容性
f 指 flag field (PSR[31:24])psr
x 指 extend field (PSR[15:8])方法
s 指 status field ( PSR[23:16])數據
指令中,cpsr_**和spsr_**在「**」處的c、f、x、s表示該指令影響的位。兼容
其中cpsr的位表示爲:di
31 30 29 28 --- 7 6 - 4 3 2 1 0view
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
以上都是已通過時的表示方法,ADS已經不支持。
對於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尾綴。