zoukankan      html  css  js  c++  java
  • CPSR_cxsf

    在启动代码里,我们会看到如 msr cpsr_cxsf,r0这样的代码。
    用MSR指令对PSR进行操作的时候,为了设定操作的范围,避免对某些位的操作而影响其他部分而定义了这几个FLAG。
    具体指令如下:
    MSR{cond} <psr>_<fields>, #immed_8r
    MSR{cond} <psr>_<fields>, Rm
    <fields>的具体含义如下:
    specifies the field or fields to be moved. <fields> can be one or more of:
    c - control field mask byte (PSR[7:0])
    x - extension field mask byte (PSR[15:8])
    s - status field mask byte (PSR[23:16)
    f - flags field mask byte (PSR[31:24]).

    原文:http://mcs.szu.edu.cn/user/qmtsang/Article_53737

    关于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尾缀。

  • 相关阅读:
    C# Socket TcpClient 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。
    C#编程使用Managed Wifi API连接无线SSID
    中国最精确的电子地图,可以找到你家哦
    利用mysql数据库中的TMD表修复“is marked as crashed and last (automatic?) repair failed”的错误 Database query error
    Google Directions API 中路线编码解析
    c语言 nmealib-0.5.3 学习 简单代码 ,供参考
    【转】IT管理人才必备的十大能力
    【转】10个让人受益的管理原理
    【转】耐心看
    【转】对于移动APP测试的一个小技巧
  • 原文地址:https://www.cnblogs.com/xmphoenix/p/2372984.html
Copyright © 2011-2022 走看看