汇编指令msr_ARM汇编:MRS和MSR指令
发布日期:2021-06-24 16:44:39 浏览次数:4 分类:技术文章

本文共 1978 字,大约阅读时间需要 6 分钟。

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=1100 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

ARM汇编:MRS和MSR指令

ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。

一:下面先来说说状态寄存器

针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器。每个位的含义如下图:

分成了4部分:

1,条件标志位

N(Negative), Z(Zero), C(Carry), V(Verflow)统称为条件标志位。ARM指令可以根据CPSR中的这些条件标志位来选择性的执行。

2,Q标志位

ARM v5的E系列处理器中,CPSR的bit[27]称为Q标志位。主要用于指示增强的DSP指令是否发生了溢出。

3,控制位

I, F, T以及M[4:0]统称为控制位。当异常中断发生时,这些位发生变化。在特权级的处理器模式下,软件可以修改这些控制位。

下表示控制位M[4:0]的含义:

4,保留位

用于将来ARM版本的扩展。

二:状态寄存器访问指令仅有两条:

MRS: 状态寄存器到通用寄存器的传送指令。

MSR: 通用寄存器到状态寄存器的传送指令。

三:MRS指令用法:

四:MSR指令用法:

其中:

为指令执行的条件码。当忽略时指令为无条件执行。

设置状态寄存器中需要操作的位。状态寄存器的32位可以分为4个8位的域:

f: 指示bits[31 : 24],又名条件标志位域

s: 指示bits[23 : 16],又名状态标志位域

x: 指示bits[15 : 8], 又名扩展位域

c: 指示bits[7 : 0],又名控制位

为将要传送到状态寄存器中的立即数,该立即数的计算方式可以去照看

寄存器包含将要传送到状态寄存器中的数据。

指令的操作伪代码:

转载地址:https://blog.csdn.net/weixin_33921444/article/details/112937189 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:慕课python第五周测试答案_中国大学MOOC(慕课)_python+_满分章节测试答案
下一篇:高中必备学习软件_有哪些适合高中生的学习软件?

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月09日 07时34分01秒