• 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>:指定的通用寄存器,此寄存器包含将要被传送状态寄存器中的数据

  • 相关阅读:
    解锁 redis 锁的正确姿势
    PHP实现Redis单据锁,防止并发重复写入
    js笔记
    FormData使用方法详解
    jquery里用each遍历的值存到数组和字符串
    Sublime Text3 安装 CTags 插件出现乱码
    通过pd.to_sql()将DataFrame写入Mysql
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket
    pandas 从txt读取DataFrame&DataFrame格式化保存到txt
    pandas 取消读取csv时默认第一行为列名
  • 原文地址:https://www.cnblogs.com/zjzsky/p/3532301.html
Copyright © 2020-2023  润新知