[ARM][架构] 02.AArch32 程序状态

news2025/5/31 21:19:30

目录

参考资料

1.程序状态 - PSTATE

2.用户模式的 PSTATE 信息

2.1.状态标志

2.2.溢出/饱和标志

2.3.大于等于标志

2.4.指令集状态

2.5.IT 块状态

2.6.端序控制

2.7.指令执行时间控制

3.用户模式访问 PSTATE - APSR 寄存器

4.系统模式的 PSTATE 信息

4.1.状态标志

4.2.溢出/饱和标志

4.3.大于等于标志

4.4.PE 状态控制

4.5.异步异常(中断)标志

4.6.PE 模式

4.7.权限控制(ARMv8.1 可用)

4.8.指令执行时间控制

4.9.Speculation 控制

5.系统模式访问 PSTATE - CPSR 寄存器


参考资料

// ARMv9 架构手册:ARM Architecture Reference Manual for A-profile Architecture

// https://www.cnblogs.com/frankfankk/p/15738453.html

1.程序状态 - PSTATE

ARM AArch32 架构中的程序状态 Process State(PSTATE),用于指示当前指令执行的状态

指令执行时会产生进位、溢出、运算结果为负数(对于二进制编码,使用最高位指示正负)等情况,例如,系统架构为 32-bit,即该架构中的地址寄存器、数据寄存器等为 32-bit 长度,如果两个数据寄存器进行加法运算,但计算结果大于 32-bit,则此时会产生溢出,CPU 无法直接通过这两个数据寄存器中的值得知是否产生溢出,因此,CPU 会设置程序状态 PSTATE 的溢出标志位 V(Overflow Condition flag),以表明刚才执行的指令产生了溢出情况,需要进行处理

2.用户模式的 PSTATE 信息

// 手册位置
// 手册:ARM Architecture Reference Manual for A-profile Architecture
// 章节:E1 The AArch32 Application Level Programmers’ Model

ARM 在用户模式下(异常等级 EL0),提供的 PSTATE 信息如下:

2.1.状态标志

  • N:Negative Condition flag,负数标志,如果需要将指令计算结果视为二进制有符号整数,则该位为:

    • 1:表示结果为负数;

    • 0:表示结果为正数或者 0;

    • 注意:当计算结果需要用更高的位来保存时就会产生进位,例如,计算 8 + 9 = 17,二进制表示为 1 0 0 0 + 1 0 0 1 = 1 0 0 0 1,这便是进位的一种情况;

  • Z:Zero Condition flag,计算结果为 0,常用于表示比较的结果为相等:

    • 1:表示结果为 0;

    • 0:其他;

  • C:Carry Condition flag,进位标志:

    • 1:指令计算产生了进位,例如,无符号整数加法运算溢出也是一种进位;

  • V:Overflow Condition flag,溢出标志:

    • 1:指令计算产生溢出,例如,有符号整数的加法运算导致溢出;

    • 0:其他;

条件指令基于这些状态标志,结合指令中的信息确定是否执行下一条指令,或者执行哪一条指令,即基于上一条指令的执行结果,确定下一条需要执行的指令

2.2.溢出/饱和标志

  • Q:Overflow or Saturation flag,溢出/饱和标志,某些指令(通常为 DSP 相关的指令)会设置该位:

    • 1:表示指令执行的结果产生溢出或饱和;

    • 0:其他情况下不会发生改变;

2.3.大于等于标志

  • GE[3:0]:Greater than or equal flags,大于等于标志,并行加法/减法指令会使用该标志位,用于指示单字节或半字节运算的结果;

2.4.指令集状态

  • J、T:Instruction set state,指令集状态(正在执行哪个指令集),其中:

    • J 在 ARMv8 之前的架构中用于指示 CPU 是否为 Jazelle 状态(正在执行的指令集为 Jazelle,Jazelle 技术使 CPU 可以直接运行 Java 字节码);

    • T 用于指示 CPU 当前使用的是 Thumb 指令集还是 ARM 指令集;

    • J、T 两位组合使用,指示当前 CPU 所使用的指令集;

注意:在 ARMv8 之前的架构中,{J,Z} = {1,0} 表示指令集为 Jazelle,{J,Z} = {1,1} 表示指令集为 T32EE,从 ARMv8 架构开始,不再支持这两个指令集(指令集未实现),AArch32 中仍然需要 Trivial Jazelle 指令集扩展

2.5.IT 块状态

  • IT[7:0]:IT block state,T32 指令集中的 IT 指令使用该字段(If-Then Control,控制 IT 指令块);

2.6.端序控制

  • E:Endianness mapping,端序选择:

    • 0:小端序(Little-endian);

    • 1:大端序(Big-endian);

    • 指令集只会使用小端序,并且忽略 PSTATE.E;

2.7.指令执行时间控制

  • DIT:Data Independent Timing,控制指令执行的时间,例如,计算 1 + 1 和计算 12345789 + 123456789 所耗费的时间是不一样的,但是启用该功能后,所有指令执行所花费的时间均相同(为了安全);

3.用户模式访问 PSTATE - APSR 寄存器

在用户模式中(EL0 权限),可以通过 APSR 寄存器(Application Program Status Register)访问 PSTATE

在 EL0 权限下,只可以访问部分 PSTATE 字段,通过 MRS 指令进行读取,通过 MSR 指令进行写入

APSR 寄存器的描述如下(可访问的 PSTATE 字段):

APSR 寄存器只提供了对 N、Z、C、V、Q、GE[3:0] 字段的访问,用户模式下,对剩余保留位执行的写入操作会被忽略,保留位虽然可以进行读取,但是读取出来的值是未知的

在更高的权限等级中(大于等于 EL1),可通过 CPSR 寄存器(Current Program Status Register)访问 PSTATE,CPSR 寄存器会提供更多的信息

4.系统模式的 PSTATE 信息

// 手册位置
// 手册:ARM Architecture Reference Manual for A-profile Architecture
// 章节:G The AArch32 System Level Programmers’ Model

AArch32 架构中,系统模式下的 PSTATE 信息如下所示:

4.1.状态标志

  • N:Negative Condition flag,负数标志;

  • Z:Zero Condition flag,计算结果为 0;

  • C:Carry Condition flag,进位标志;

  • V:Overflow Condition flag,溢出标志;

状态标志的含义和用户模式中的一致

4.2.溢出/饱和标志

  • Q:Overflow or Saturation flag,溢出/饱和标志;

该标志的含义和用户模式中的一致

4.3.大于等于标志

  • GE[3:0]:Greater than or equal flags,大于等于标志;

该标志的含义和用户模式中的一致

4.4.PE 状态控制

  • J、T:Instruction set state,指令集状态,该标志位的含义和用户模式中的一致:

    • AArch32 架构 PL1 权限下,处理异常时,通过系统控制寄存器(System Control Register,SCTLR)的 TE(T32 Exception Enable)位设置 T 标志位,表示当前执行的指令集为 T32({J、T} = {0,1});

    • AArch32 架构 PL2 权限下,通过 Hypervisor 系统控制寄存器(Hyp System Control Register,HCTLR)的 TE (T32 Exception Enable)位设置 T 标志位,表示当前执行的指令集为 T32({J、T} = {0,1});

  • IT[7:0]:IT block state,IT 块的状态,该标志位的含义和用户模式中的一致;

  • E:Endianness of data accesses,端序控制,该标志位的含义和用户模式中的一致,如果平台同时支持大端序和小端序,则:

    • AArch32 架构下执行 Warm Reset 时,该位的值依赖具体的平台实现:

      • 如果平台异常权限的最高等级不为 EL2,则将该位设置为 SCTLR.EE 中的值;

      • 如果平台异常权限的最高等级为 EL2,则将该位设置为 HSCTLR.EE 中的值;

    • 处理异常时:

      • AArch32 架构 PL1 权限下,将该位设置为 SCTLR.EE 中的值;

      • AArch32 架构 PL2 权限下,将该位设置为 HSCTLR.EE 中的值;

  • IL:Illegal Execution state,非法执行状态;

4.5.异步异常(中断)标志

  • A:SError interrupt mask bit,SError 中断标记;

    • 1:产生了该类型的异常;

    • 0:未产生该类型的异常;

  • I:IRQ interrupt mask bit,IRQ 中断标记;

    • 1:产生了该类型的异常;

    • 0:未产生该类型的异常;

  • F:FIQ interrupt mask bit,FIQ 中断标记;

    • 1:产生了该类型的异常;

    • 0:未产生该类型的异常;

4.6.PE 模式

  • M[4:0]:Current mode of PE,当前 PE 的模式(User、IRQ、Hyp 等),支持的模式如下:

其中的编码 Encoding 即为 M[4:0] 字段的可能值

其中 M[4] 用于指示当前处理器的状态:

  • M[4] 为 0:处理器为 AArch64 状态;

  • M[4] 为 1:处理器为 AArch32 状态;

AArch32 架构中执行 Warm Reset 时,M[4:0] 的值设置如下:

  • 如果系统最高权限等级不为 EL2,则该字段设置为 0b10011,表示 Supervisor 模式;

  • 如果系统最高权限等级为 EL2,则该字段设置为 0b11010,表示 Hypervisor 模式;

AArch32 架构中处理异常时,M[4:0] 会设置为异常类型所对应的模式

4.7.权限控制(ARMv8.1 可用)

  • PAN:Privileged Access Never (PAN) state,ARMv8.1 架构中,当 PAN 位置 1 时,将受 PL1 或 EL2 权限保护的数据,拷贝至仅受 EL0 权限保护的虚拟内存中时,会产生权限受限错误,该位置 0 时,系统行为和 ARMv8.0 保持一致;

4.8.指令执行时间控制

  • DIT:Data Independent Timing (DIT) bit,该标志位的含义和用户模式中的一致,仅当架构实现了 FEAT_DIT 相关指令时,该位有效;

4.9.Speculation 控制

  • SSBS:Speculative Store Bypass Safe (SSBS) bit,用于防止 Speculative Store Bypass 漏洞,仅当架构实现了 FEAT_SSBS 相关指令时,该位有效;

5.系统模式访问 PSTATE - CPSR 寄存器

用户模式下(EL0)仅能通过 APSR 寄存器访问一小部分 PSTATE 字段,在其他模式中(如中断 IRQ 模式)可以通过 CPSR 寄存器(Current Program Status Register)访问大部分 PSTATE 字段,同样的,通过 MRS 指令进行读取,通过 MSR 指令进行写入

CPSR 寄存器的描述如下(可访问的 PSTATE 字段):

CPSR 可以访问除 IL、IT[7:0]、J、E、T 字段的其余字段,这些字段可以通过 SPSR 寄存器(Saved Program Status Register)访问(仅在处理异常时可以访问),读写这些位需要使用对应的指令,例如,使用 SETEND BE 指令将 PSTATE.E 置 1,使用 SETEND LE 将 PSTATE.E 置 0 等等

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

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

相关文章

React---day4

3、React脚手架 生成的脚手架的目录结构 什么是PWA PWA全称Progressive Web App,即渐进式WEB应用;一个 PWA 应用首先是一个网页, 可以通过 Web 技术编写出一个网页应用;随后添加上 App Manifest 和 Service Worker 来实现 PWA 的安装和离线…

ArkUI(方舟UI框架)介绍

ArkUI(方舟UI框架)介绍 构建快速入门 使用ArkWeb构建页面

若依微服务的定制化服务

复制依赖 复制依赖 复制system服务的bootstrap.yml文件,修改port和name 在nacos复制一个新的nacos配置,修改对应的nacos的配置 ,可能不需要修改,看情况。 网关修改 注意curd的事项,模块名称的修改

Axios 如何通过配置实现通过接口请求下载文件

前言 今天,我写了 《Nodejs 实现 Mysql 数据库的全量备份的代码演示》 和 《NodeJS 基于 Koa, 开发一个读取文件,并返回给客户端文件下载》 两篇文章。在这两篇文章中,我实现了数据库的备份,和提供数据库下载等接口。 但是&…

20250529-C#知识:运算符重载

C#知识:运算符重载 运算符重载能够让我们像值类型数据那样使用运算符对类或结构体进行运算,并且能够自定义运算逻辑。 1、运算符重载及完整代码示例 作用是让自定义的类或者结构体能够使用运算符运算符重载一定是public static的可以把运算符看成一个函…

如何在WordPress网站中添加相册/画廊

在 WordPress 网站上添加相册可以让您展示许多照片。无论您是在寻找标准的网格相册画廊还是独特的瀑布流相册画廊体验,学习如何在 WordPress 网站上添加相册总是一个好主意。在本教程中,我们将介绍两种为 WordPress 网站添加相册的方法:使用区…

Codeforces Round 1025 (Div. 2)

Problem - A - Codeforces 查有没有人说谎&#xff0c;有一个必错的情况&#xff1a; 两个人都说输了&#xff0c;必有人撒谎&#xff0c;还有就是所有人都赢了&#xff0c;也是撒谎 来看代码&#xff1a; #include <iostream> #include <vector> using namespa…

Ubuntu20.04操作系统ssh开启oot账户登录

文章目录 1 前提2 设置root密码3 允许ssh登录root账户3.1 编辑配置文件3.2 重启ssh服务 4 安全注意事项 1 前提 ssh可以使用普通用户正常登录。 2 设置root密码 打开终端&#xff0c;设置密码 sudo passwd root # 设置root密码3 允许ssh登录root账户 3.1 编辑配置文件 su…

类欧几里得算法(floor_sum)

文章目录 普通floor_sum洛谷P5170 【模板】类欧几里得算法 万能欧几里得算法求 ∑ i 1 n A i B ⌊ a i b c ⌋ \sum_{i1}^{n}A^iB^{\lfloor \frac{aib}{c} \rfloor} ∑i1n​AiB⌊caib​⌋求 ∑ i 0 n ⌊ a i b c ⌋ \sum_{i0}^n \lfloor\frac{aib}{c}\rfloor ∑i0n​⌊caib…

每日Prompt:卵石拼画

提示词 世界卵石拼画大师杰作&#xff0c;极简风格&#xff0c;贾斯汀.贝特曼的风格&#xff0c;彩色的鹅卵石&#xff0c;斑马头像&#xff0c;鹅卵石拼画&#xff0c;马卡龙浅紫色背景&#xff0c;自然与艺术的结合&#xff0c;新兴的艺术创作形式&#xff0c;石头拼贴画&am…

硬件服务器基础

1、硬件服务器基础 2、服务器后面板 3、组件 3.1 CPU 3.2 内存 3.3 硬盘 3.4 风扇 4、服务器品牌 4.1 配置 4.2 CPU 架构 4.2.1 CPU 命名规则 4.2.2 服务器 CPU 和家用 CPU 的区别 4.2.3 CPU 在主板的位置 4.2.4 常见 CPU 安装方式 4.3 内存中组件 4.3.1 内存的分类 4.3.1.1 …

TRS收益互换平台开发实践:从需求分析到系统实现

一、TRS业务概述 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;允许投资者通过支付固定或浮动利息&#xff0c;换取标的资产&#xff08;如股票、指数&#xff09;的收益权。典型应用场景包括&#xff1a; ​​跨境投资​​&#xff…

测试Bug篇

本节概要&#xff1a; 软件测试的生命周期 bug的概念 buh要素 bug等级 bug生命周期 对于bug的定级与开发发生冲突如何解决 一、 软件测试的⽣命周期 软件测试贯穿于软件的整个生命周期&#xff0c;针对这句话我们⼀起来看⼀下软件测试是如何贯穿软件的整个生命周期。 软…

【Linux系统移植】Cortex-A8 Linux系统移植(超详细)

目录 前言 一、ARM开发板ARM简介RISC和CISCARM产品分布核心板S5pv210 SOC嵌入式系统开发方式 二、嵌入式系统组成为什么要系统移植内核移植框图 三、嵌入式开发环境搭建搭建开发环境总流程设置ubuntu与windows共享目录修改用户为root用户安装NFS服务器安装tftp服务器安装交叉编…

第十五届蓝桥杯大赛软件赛国赛Python 大学 C 组试做【本期题单: 设置密码、栈】

早上好啊大伙&#xff0c;这一期依旧是蓝桥杯备赛刷题的记录。 本期题单&#xff1a;设置密码、栈 前言 前段时间准备省赛&#xff0c;运气好进国赛了。所以就开始准备6月份的国赛。但是近期还有别的比赛要准备&#xff0c;所以刷题的速度比较慢&#xff0c;可能每一期就会有一…

报错SvelteKitError: Not found: /.well-known/appspecific/com.chrome.devtools.json

报错信息 SvelteKitError: Not found: /.well-known/appspecific/com.chrome.devtools.json 解决方案一 更新所有依赖 npm update解决方案二&#xff08;不一定成功&#xff09; src\lib\hooks.server.ts&#xff0c;每次请求服务器时执行 import type { Handle } from &…

word添加页眉

问题一&#xff1a; 为word文档添加页眉。 方法&#xff1a; 1、在要添加页眉的第一页页面顶端双击页眉区域&#xff0c;如果添加页眉页上面还有其他页或者与上一页添加页眉内容不同&#xff0c;记得取消“链接到前一节”&#xff08;点击使其上面没有灰色即可&#xff09;&…

2025推客系统小程序开发:独立部署源码交付,高性价比裂变增长引擎

在私域流量争夺白热化的今天&#xff0c;源码独立部署的推客系统小程序已成为企业构建自主分销体系、降低获客成本的核心利器。基于成熟案例与技术沉淀&#xff0c;我们提供安全可控、高性价比的一站式解决方案&#xff0c;助力企业快速搭建专属推客生态&#xff0c;实现长效增…

CentOS 7.0重置root密码

文章目录 版本&#xff1a;CentOS 7.0内核版本&#xff1a;CentOS Linux, with Linux 3.10.0-123.el7.x86_64 服务器重启后&#xff0c;等待进入上述页面&#xff0c;按⬆⬇键&#xff0c;中断正常启动。在此页面按E&#xff0c;进入编辑模式 继续按⬇&#xff0c;找到linux16…

YOLOV11改进策略【最新注意力机制】CVPR2025局部区域注意力机制LRSA-增强局部区域特征之间的交互

1.1网络结构 1.2 添加过程 1.2.1 核心代码 import torch import torch.nn as nn import torch.nn.functional as F from einops import rearrangedef patch_divide(x, step, ps):"""Crop image into patches.Args:x (Tensor): Input feature map of shape(b, …