zoukankan      html  css  js  c++  java
  • ARM学习笔记6——程序状态寄存器访问指令

       这两条指令结合,可用于对CPSR或SPSR进行读/写操作。 当需要保存或修改当前模式下CPSR或SPSR的内容时,首先必须将这些内容传递到通用寄存器中

    1、MRS指令(Move to Register from Status Register)

      1.1、作用

        它将程序状态寄存器内容传输到通用寄存器

      1.2、语法格式

        MRS{<condition>} <Rd>,CPSR

        MRS{<condition>} <Rd>,SPSR

      1.3、参数说明

        <Rd>:确定指令的目标寄存器,如果R15被用作目标寄存器,指令的执行结果不可预知,因为每执行一个指令,PC都会改变。

      1.4、使用场合

        1.4.1、当需要保存或修改当前模式下CPSR或SPSR的内容时,首先必须将这些内容传送到通用寄存器中,对选择的位进行修改,然后将数据回写到状态寄存器

        1.4.2、当异常中断允许嵌套时,需要在进入异常处理程序之后,嵌套中断发生之前保存当前处理器模式对应的SPSR。这时需要先通过MRS指令读出SPSR的值,再用其他指令(如压栈指令)将SPSR值保存起来。

        1.4.3、在进程切换时也需要保存当前程序状态寄存器的值。

      1.5、使用举例

        1.5.1、将CPSR状态寄存器读取,保存到R1中

          MRS R1,CPSR

        1.5.2、将SPSR状态寄存器读取,保存到R2中

          MRS R2,SPSR

    2、MSR指令(Move to Status Register from Register)

      2.1、作用

        MSR指令用于通用寄存器内容传输到程序状态寄存器

      2.2、语法格式

        MSR{<condition>} CPSR_<fields>,#<immediate>

        MSR{<condition>} CPSR_<fields>,<Rm>

        MSR{<condition>} SPSR_<fields>,#<immediate>

        MSR{<condition>} SPSR_<fields>,<Rm>

      2.3、参数说明

        2.3.1、<fields>:域标志位,是下面选项中的一种或几种的组合  

            C:设置控制位掩码域(bit[16])  

            X:设置扩展位掩码域(bit[17])  

            S:设置状态位掩码域(bit[18])  

            F:设置标志位掩码域(bit[19])

        2.3.2、<immediate>:被传送到CPSR和SPSR寄存器的立即数,此立即数可以为8位立即数(范围在0x00-0xff之间)

        2.3.3、<Rm>:指定的通用寄存器,此寄存器包含将要被传送状态寄存器中的数据

  • 相关阅读:
    poj3180 The Cow Prom
    洛谷P1434 滑雪
    洛谷P1199 三国游戏
    洛谷P1230 智力大冲浪
    洛谷P1012 拼数
    洛谷P1106 删数问题
    bzoj3538 [Usaco2014 Open]Dueling GPS
    Android(java)学习笔记134:Android数据存储5种方式总结
    Android(java)学习笔记133:Eclipse中的控制台不停报错Can't bind to local 8700 for debugger
    Android(java)学习笔记132:eclipse 导入项目是提示:某些项目因位于工作空间目录中而被隐藏。
  • 原文地址:https://www.cnblogs.com/zjzsky/p/3532301.html
Copyright © 2011-2022 走看看