网站首页 > 技术文章 正文
最近在看韦东山 imx6ull 裸机的汇编启动文件,看到一条比较陌生的汇编指令CPS(如下图所示),于是把它记录下来。
通过在《ARM Cortex-A(armV7)编程手册V4.0》中搜索 “CPS”,在 5.6.3 PSR modification 章节可以找到这样一句话,如下图高亮文字:
意思就是: 在特权模式下(除了用户模式,剩余的模式都是特权模式),可以通过CPS指令直接修改CPSR寄存器的M[4:0],让处理器进入不同的模式。
CPSR 寄存器结构相同,如下图所示:
其中M[4:0] 就是处理器的模式控制为,不同的编码对应着不同的处理器模式,如下图所示:
所以:
CPS #0x12 /*把CPSR寄存器的M[4:0]修改为0x12,让处理器进入IRQ 模式*/
CPS #0x13 /*把CPSR寄存器的M[4:0]修改为0x13,让处理器进入SVC 模式*/
注:当然,我们也可以使用MRS、MSR指令通过 读、修改、写回 的方式,修改CPSR寄存器的M[4:0],让CPU进入不同的模式。只是,我觉得使用CPS指令更快速高效,只需一条指令即可。
注:内容来源 《ARM Cortex-A(armV7)编程手册V4.0》
猜你喜欢
- 2024-11-10 VMware中ESXI常用命令(vmware esxi使用教程)
- 2024-11-10 arm嵌入式考试题,大神精心总结(arm嵌入式知识点)
- 2024-11-10 ARM汇编教程(3): ARM指令集(arm汇编指令的基本格式)
- 2024-11-10 Cortex-A的通用寄存器和程序状态寄存器
- 2024-11-10 基于istio的mirror构建真实流量测试环境
- 2024-11-10 领先业界,中兴通讯首发两款双路4K超高清视讯终端
- 2024-11-10 Linux-2.6.37版:Linux内核启动全过程详解
- 2024-11-10 协处理器指令_开启ICache代码示例
- 2024-11-10 ADC触摸屏编程_定时器程序优化(触摸屏如何修改plc里时间定时值)
- 2024-11-10 90后程序员小伙分享—Linux内核kernel启动分析(下篇)精品推荐
- 最近发表
-
- 使用Knative部署基于Spring Native的微服务
- 阿里p7大佬首次分享Spring Cloud学习笔记,带你从0搭建微服务
- ElasticSearch进阶篇之搞定在SpringBoot项目中的实战应用
- SpringCloud微服务架构实战:类目管理微服务开发
- SpringBoot+SpringCloud题目整理
- 《github精选系列》——SpringBoot 全家桶
- Springboot2.0学习2 超详细创建restful服务步骤
- SpringCloud系列:多模块聚合工程基本环境搭建「1」
- Spring Cloud Consul快速入门Demo
- Spring Cloud Contract快速入门Demo
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)