ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

汇编指令-MRS(读)和MSR(写)指令操作CPSR寄存器和SPSR寄存器使用

2021-04-17 14:57:39  阅读:231  来源: 互联网

标签:r0 MSR SPSR pc 指令 CPSR 寄存器 cpsr


1.MSR和MRS指令介绍

    MRS 指令: 对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以获得当前处理器的工作状态。读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有SPSR寄存器)。

   MSR指令: 对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。

2.CPSR 程序状态寄存器(current program status register)

   如图所示,ARM每种工作模式除R0~R15共16个寄存器外,还有第17个寄存器CPSR,叫做 当前程序状态寄存器
在这里插入图片描述
   CPSR寄存器格式:
在这里插入图片描述
   在CPSR寄存器中主要用到了控制位,每个标志位如下图所示:
在这里插入图片描述

3.使用MSR指令写入数据

例:

msr cpsr_c, #0xd2       @0xd2=1101 0010//禁止中断使能,进入中断模式msr cpsr_c, #0x53        @0x53=0101 0011//开IRQ中断,禁止FIQ中断,进入ARM状态,设为管理(svc32)模式

   其中cpsr_c是因为CPSR有4个8位区域:

   C 控制域屏蔽字节([7:0])
   X 扩展域屏蔽字节([15:8])
   S 状态域屏蔽字节([23:16])
   F 标志域屏蔽字节([31:24])
   所以cpsr_c表示的是CPSR控制位、

4.使用MRS和MSR来设置2440位管理模式,实例:

mrs r0,cpsr         //读状态寄存器cpsr的数据到r0中bic  r0,r0,#0x1f    //对r0低5位进行清0,清除模式位orr    r0,r0,#0xd3  //低8位或(110 10011), 设为管理(svc32)模式,禁止IRQ和FIQ中断msr    cpsr,r0      //写入状态寄存器cpsr,更新。

5.SPSR程序保存状态寄存器(saved program status register)

   SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用SPSR来恢复CPSR。

(注意:用户user模式和系统system模式不是异常中断模式,所以他没有SPSR。当用户在用户模式或系统模式访问SPSR,将产生不可预知的后果。)

    在异常模式返回时,如果指令带有S后缀(除了比较指令以外),同时又以PC为目标寄存器进行操作,则操作的同时从SPSR恢复CPSR。以下都是可以恢复CPSR寄存器

例如:

movs pc, #0xff             // cpsr = spsr; pc = 0xff adds pc, r1, #0xffffff00   //cpsr = spsr; pc = r1 + 0xffffff00  ands pc, r1, r2         //cpsr = spsr; pc = r1 & r2; ldmia   sp!,    { r0-r12,pc }^ //中断返回, ^表示将spsr的值复制到cpsr

标签:r0,MSR,SPSR,pc,指令,CPSR,寄存器,cpsr
来源: https://blog.51cto.com/u_11934066/2713494

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有