首页 > 编程知识 正文

cpsr-c,cpr cps

时间:2023-05-04 18:32:00 阅读:225455 作者:3568

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的位表示为:

深入分析:
对于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尾缀 

这里举个例:(关于c语言嵌入汇编,汇编和c语言混合编程更多知识,看我这篇ARM中C语言和汇编语言的混合编程)从上面说的cpsr各状态位意思,就可以知道下面程序如何打开和关闭中断的了。

主要参考博客:

Cpsr与Cpsr_c的区别arm中SP,LR,PC寄存器以及其它所有寄存器介绍ARM中C语言和汇编语言的混合编程

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。