關於CPSR_cxsf

關於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尾綴。

相關文章
相關標籤/搜索