msr cpsr_cxsf,r1;这里的cxsf表示从低到高分别占用的4个8bit的数据域指令中有时还有出现cpsr_cf, cpsr_all, cpsr_c等,这里:
本文引用地址:https://www.eepw.com.cn/article/201611/316969.htmc 指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---76-43210
NZCVIFM4M3M2M1M0
000 00User26 模式
000 01FIQ26 模式
000 10IRQ26 模式
000 11SVC26 模式
10000User 模式
10001FIQ 模式
10010IRQ 模式
10011SVC 模式
10111ABT 模式
1101 1UND 模式
深入分析:
对于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尾缀
评论