arm的状态寄存器

目录

  • 一、arm 的 PSRs
  • 二、CPSR
    • 2.1 CPSR_cxsf
  • 三、SPSR
  • 四、APSR

一、arm 的 PSRs

arm 中有很多程序状态寄存器(Program Status Registers,PSRs)用于存储处理器的状态信息,包括 CPSR\SPSR\FPSR\APSR 等:

  • CPSR(Current Program Status Register):当前程序状态寄存器,用于存储当前程序的状态信息,包括处理器模式、条件码、中断使能状态等。
  • SPSR(Saved Program Status Register):保存程序状态寄存器,用于保存异常处理程序执行前的状态,以确保异常处理程序执行完毕后能够正确地返回到原来的程序状态。每个异常模式都有对应的 SPSR。
  • APSR(Application Program Status Register):应用程序状态寄存器,用于存储特定于应用程序的状态信息。在 ARMv7-M 架构中,APSR 包含了条件码和标志位。

arm core寄存器

二、CPSR

The Current Program Status Register (CPSR),当前程序状态寄存器,寄存器格式如下:
CPSR寄存器
存储了以下处理器状态和控制信息:

  • APSR(N Z C V Q GE),存储特定于应用程序的状态信息,在下面 APSR 中详细介绍;
  • 程序指令集信息,bit24 J 和 bit5 T 的不同组合,区分 ARM\Thumb\Jazelle\ThumbEE 不同的指令集;
  • IT 保存了 Thumb 的 IT 指令的 If-Then 执行状态;
  • E 保存了大小端信息;
  • M 保存了 ARM 的处理器模式(usr\fiq\irq\svc\mon\abt\hyp\und\sys);
  • A I F (Abort\IRQ\FIQ)是中断和异常的使能 bit 位;

2.1 CPSR_cxsf

为了防止在某些操作 CPSR 寄存器的场景中,误操作其它 bit 位,CPSR(PSRs,其它状态寄存器也都具备这个功能)有 c x s f 几个不同的字段指代不同的 bit 位。

  • c:control 字段,PSR[7:0] bit 位;
  • x:extension 字段,PSR[15:8] bit 位;
  • s:status 字段,PSR[23:16] bit 位;
  • f:flag 字段,PSR[31:24] bit 位;

cxsf 字段可以任意单个或多个组合,例如 CPSR_c 指代只操作 CPSR 的低 8bit 位、CPSR_xs 指代只操作 CPSR 的[23:8] bit 位。

三、SPSR

The Saved Program Status Registers (SPSRs),程序状态保存寄存器,每个异常模式都有对应的 SPSR,是各个异常模式下 CPSR 的拷贝。

  • 当进入某个异常,CPSR 会被拷贝到这个异常状态下的 SPSR 中;
  • 当异常处理完成后,为了恢复导致回去的程序状态,将 SPSR restore 到 CPSR;

总的来说,CPSR 用于存储当前程序的状态,而 SPSR 则用于保存异常处理程序执行前的状态,以确保异常处理程序执行完毕后能够正确地返回到原来的程序状态。SPSR 在异常处理过程中起到了保护和恢复程序状态的作用。

四、APSR

The Application Program Status Register (APSR),在 ARMv7-A,是 application level view 下的 CPSR,包含以下 bit 位:
APSR寄存器

  • N(Negative):该位表示最近一条指令的运算结果是否为负数。当运算结果为负数时,N 位被设置为 1;否则,N 位被清零。
  • Z(Zero):该位表示最近一条指令的运算结果是否为零。当运算结果为零时,Z 位被设置为 1;否则,Z 位被清零。
  • C(Carry):该位用于处理无符号数运算中的进位。当运算产生了进位时,C 位被设置为 1;否则,C 位被清零。
  • V(Overflow):该位用于处理带符号数运算中的溢出。当运算结果超出了有符号数的表示范围时,V 位被设置为 1;否则,V 位被清零。
  • Q(Sticky Overflow):该位用于处理 SIMD(Single Instruction, Multiple Data)指令中的溢出情况。Q 位是一个粘性位,当 V 位被设置时,Q 位也会被设置,直到被显式清除。
  • GE( The Greater than or Equal flags):意为大于等于,用于控制条件分支指令的执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/791724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3配置router路由步骤

Vue3配置router路由步骤 首先创建一个vue3的项目 先检查一下router的版本,可以在pakage.json里面查看,也可以你直接在终端输入 npm list vue-router如果版本比较低的话,先升级一下 vue3的话,用以下命令 npm install vue-route…

红蓝色WordPress外贸建站模板

红蓝色WordPress外贸建站模板 https://www.mymoban.com/wordpress/5.html

TSINGSEE青犀推出河道/河湖/水域治理视频AI智能解决方案

一、方案背景 “十四五”时期,在面源污染防治等方面实现突破,实现主要水污染排放总量持续减少,水生态环境持续改善等任务艰巨。进一步完善流域综合治理体系,提升流域水环境综合治理能力和水平,更好适应新阶段发展需求…

IDEA2023.1.1中文插件

1.启动IDEA 选中Customize 2.选择All settings 3.选中Plugins,再搜索栏里输入Chinese,找到 "Chinese (Simplified) Language"插件,点击 Install 进行安装。 4. 安装完成后,重启IntelliJ IDEA,即可看到界面语言已经变为中文。

JavaScript(一)基础

文章目录 一、JS介绍JavaScript是什么JavaScript书写位置JavaScript的注释输入输出语法字面量 二、变量变量是什么变量基本使用变量的本质变量命名规则与规范变量拓展-数组var与let的区别 三、常量四、数据类型数据类型检测数据类型数据类型转换隐式转换显式转换 简单运算符断点…

【洛谷 P8695】[蓝桥杯 2019 国 AC] 轨道炮 题解(映射+模拟+暴力枚举+桶排序)

[蓝桥杯 2019 国 AC] 轨道炮 题目描述 小明在玩一款战争游戏。地图上一共有 N N N 个敌方单位,可以看作 2D 平面上的点。其中第 i i i 个单位在 0 0 0 时刻的位置是 ( X i , Y i ) (X_i, Y_i) (Xi​,Yi​),方向是 D i D_i Di​ (上下左右之一, 用…

同步检查继电器 JT-1/200 100V 面板嵌入式安装,板后接线

系列型号 JT-1同步检查继电器; DT-1同步检查继电器; JT-3同步检查继电器; DT-3同步检查继电器; 一、应用范围 JT(DT)系列同步检查继电器用于两端供电线路的自动重合闸线路中,以检查线路上电压的存在及线路上和变电站汇…

基于Spring Boot的在线考试系统

开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven…

element-ui breadcrumb 组件源码分享

今日简单分享 breadcrumb 组件的源码实现,主要从以下三个方面: 1、breadcrumb 组件页面结构 2、breadcrumb 组件属性 3、breadcrumb 组件 slot 一、breadcrumb 组件页面结构 二、breadcrumb 组件属性 2.1 separator 属性,分隔符&#xff…

程序员沟通之道:TCP与UDP之辩,窥见有效沟通的重要性(day19)

程序员沟通的重要性: 今天被师父骂了一顿,说我不及时回复他,连最起码的有效沟通都做不到怎么当好一个程序员,想想还挺有道理,程序员需要知道用户到底有哪些需求,用户与程序员之间的有效沟通就起到了关键性作…

Java多态世界(day18)

多态:重写的方法调用和执行 1.静态绑定:编译器在父类中找方法,如: 上面的eat()方法是先在父类中找方法,父类没有的话,就算子类有编译也会报错。(如果引用方法在父类中存…

UE4_普通贴图制作法线Normal材质

UE4 普通贴图制作法线Normal材质 2021-07-02 10:46 导入一张普通贴图: 搜索节点:NormalFromHeightmap 搜索节点:TextureObjectparameter,并修改成导入的普通贴图,连接至HeightMap中 创建参数normal,连接…

Dockerfile详解构建镜像

Dockerfile构建企业级镜像 在服务器上可以通过源码或rpm方式部署Nginx服务,但不利于大规模的部署。为提高效率,可以通过Dockerfile的方式将Nginx服务封装到镜像中,然后Docker基于镜像快速启动容器,实现服务的快速部署。 Dockerf…

【Vue3】el-checkbox-group实现权限配置和应用

一. 需求 针对不同等级的用户,配置不同的可见项 配置效果如下 (1)新增,获取数据列表 (2)编辑,回显数据列表 应用效果如下 (1)父级配置 (2)子级…

详解TCP/IP五层模型

目录 一、什么是TCP五层模型? 二、TCP五层模型的详细内容 1. 应用层 2. 传输层 3. 网络层 4. 数据链路层 5. 物理层 三、网络设备所在分层 封装和分⽤ 三、Java示例 引言: 在网络通信中,TCP/IP协议是至关重要的。为了更好地理解TCP协议的工…

详解设计模式:单例的进化之路

概念 单例模式(Singleton Pattern)是设计模式中一个重要的模式之一,是确保一个类在任何情况下都绝对只有一个实例。单例模式一般会屏蔽构造器,单例对象提供一个全局访问点,属于创建型模式。 根据初始化时间的不同,可以将单例模式…

文件操作讲解

目录 一.为什么使用文件 二.什么是文件 2.1程序文件 2.2数据文件 2.3文件名 三.文本文件和二进制文件 fwrite函数 fclose函数 四.文件的打开和关闭 4.1流和标准流 4.2文件指针 4.3文件的打开和关闭 五.文件的顺序读写 5.1文件的顺序读写函数 5.1.1fgetc函数…

【软件工程】概要设计

1. 导言 1.1 目的 该文档的目的是描述学生成绩管理系统的概要设计,其主要内容包括: 系统功能简介 系统结构简介 系统接口设计 数据设计 模块设计 界面设计 本文的预期读者是: 项目开发人员 项目管理人员 项目评测人员(…

VS2022使用属性表快速设置OpenCV工程属性

1.创建C++控制台应用 2.配置工程 3.打开工程后,为工程添加属性表 打开属性管理器窗口,选择Debug|x64 然后右击选择添加新的项目属性表 并命名为opencv490_debug_x64 点击添加 Debug版本属性表添加成功 使用相同方法添加Release版本属性表

Windows通过git配置github代码仓库全流程

git git是代码的版本控制工具 git安装和github注册 这个默认弄过了 通过git和github之间的SSH配置 在github上面新建仓库,做好配置 git绑定GitHub账号 先cd到上传的文件所在的目录 git config --global user.name "你的github用户名"git config -…