MSR和MRS指令操作CPSR寄存器

1.MSR和MRS指令介绍

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

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

2.CPSR寄存器介绍

如图所示,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中断,进入管理模式

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

C 控制域屏蔽字节([7:0])

X 扩展域屏蔽字节([15:8])

   S 状态域屏蔽字节([23:16])

F 标志域屏蔽字节([31:24])

所以cpsr_c表示的是CPSR控制位、

时间: 2024-10-15 10:22:02

MSR和MRS指令操作CPSR寄存器的相关文章

(转)ARM汇编学习笔记——CPSR寄存器、CPSR_C

转自:http://blog.csdn.net/cos_sin_tan/article/details/7667582 内容有所改动 1:ARM每种工作模式除R0~R15共16个寄存器外,还有第17个寄存器CPSR,叫做 "当前程序状态寄存器",CPSR中一些位被用于标识各种状态,一些位被用于标识当前处于什么工作模式. 2:这个状态寄存器的32位可以分为四个8位的域. 其中cpsr_c代表的是cpsr寄存器的低8位,也就是控制位 有些程序里这样写msr cpsr_c, #0xd2   

Linux常用指令操作笔记

这篇博文是我在日常工作中比较常用的指令操作,陆续会慢慢补齐,大家觉得有用可以参考参考,我会不定时的修改这篇博文.我所使用的Linux操作系统版本是Ubuntu. 一.开关机 reboot 重启电脑 shutdown -r now 重启电脑 shutdown -h +10 "This is a warning information" 10分钟后关机 poweroff -h 关机 二.版本 uname -a 查看linux当前版本 三.安装 apt-get install 要安装的包 四

linux下操作gpio寄存器的方法

一. 在驱动中: 1. 用的时候映射端口:ioremap; #define GPIO_OFT(x) ((x) - 0x56000000) #define GPFCON (*(volatile unsigned long *)(gpio_va + GPIO_OFT(0x56000050))) gpio_va = ioremap(0x56000000, 0x100000); // 物理地址0x56000000, 映射区分配的大小0x100000字节 这样映射过后,就可以直接操作寄存器了: 配置3引脚

redis数据类型四之hash的指令操作(五种数据类型中最重要的一种)

1.老规矩,看看redis官方文档怎么写:         这里说呢,hashes 这种数据类型容易代表对象,实际上你可以无限制地在 hash 中放给定数量的字段.(除了可用的内存)(其实这个我理解有些模糊,是内存能够满足就可以无限制的放入吗?)所以你可以在应用中多方面地使用它. 我理解的 hash 数据类型是: 就好像是Java中 Map<String, Map<Srtring,String>> 一样,KV模式不变,但是 V 值是一个键值对. 2.hash 数据类型的指令操作:

Android手机指令操作释疑

有人问我一个关于Android手机root与否的问题,她说明明iTools显示已取得root权限,但她就是没法在该手机上运行需要root权限的App如钛备份等等.我告诉她最好的确认方式便是以adb指令进到 /data/data路径之下,再执行 ls –al,若能顺利得到执行结果,而不会提示”Permission denied”,便是已root成功,如下图所示. 那她又问道,怎么她在操作adb指令时,无法改动文件的权限? Android的核心不也是Linux吗? 是的,Android的核心是Lin

awk指令操作详解

记录与字段 awk一次从文件中读取一条记录,并将记录存储在字段变量$0中.记录被分隔为字段比功能存储在$1,$2,...$NF中,(默认使用空格或指标符为分隔符).内建参数NF为记录的字段数. #输出demo.txt 文件的第1个,第2个,第3个,第4个字段 awk '{print $1,$2,$3,$4}' demo.txt #输出demo.txt 文件整行记录 awk '{print $0}' demo.txt #输出demo.txt 该行的字段个数. awk '{print NF}' de

linux 的shell指令操作

1.在命令终端来获取root用户权限 在终端中输入: sudo passwd root Enter new UNIX password: (在这输入你的密码) Retype new UNIX password: (确定你输入的密码) passwd: password updated successfully 以后,如果在想获得root权限,只需进行如下的操作: su root Password: (在此输入你上面设置的密码) 如果要再次禁用 root 帐号, 那么可以执行 sudo passwd

/dev/mem直接操作硬件寄存器

/******************************************************************************* * /dev/mem直接操作硬件寄存器 * 说明: * 在和左栋讨论如何处理iomux的时候,可以直接通过操作/dev/mem进行iomux的pin映射. * * 2017-9-27 深圳 龙华樟坑村 曾剑锋 ****************************************************************

Git 初學筆記 - 指令操作教學

Git 是分散式的版本控制系統, 從架設.簡易操作.設定, 此篇主要是整理 基本操作.遠端操作 等. 註: Git 的範圍太廣了, 把這篇當作是初學入門就好了. 注意事項 由 project/.git/config 可知: (若有更多, 亦可由此得知) origin(remote) 是 Repository 的版本 master(branch) 是 local 端, 正在修改的版本 平常沒事不要去動到 origin, 如果動到, 可用 git reset --hard 回覆到沒修改的狀態. Gi