在ARMv8架构中,使用PSTATE用来描述当前处理器的状态信息。如下的图描述了PSTATE的每个字段的意义

上面是PSTATE的各个bit位的含义,我们可以将其分为三组

  • 状态标志位

    • N
    • Z
    • C
    • V
  • 异常状态控制位
    • SS
    • IL
    • nRW
    • EL
    • SP
  • 异常屏蔽位
    • D
    • A
    • I
    • F

下面来详细描述下各个字段的含义:

  • 状态标志位

    1. N(Negative)代表的是当前指令的结果,如果是1则是负数,如果是0则是正数或者0
    2. Z(Zero)代表当前指令指令的结果,如果是1则是-0,否则是其他
    3. C(Carry Condition flag)携带环境标志,1代表携带,0代表没有
    4. V(Overflow Condition flag)溢出标志位,1代表溢出,0没有
  • 异常屏蔽位
    1. D(Debug exception Mask bit)
    2. A(SError Interrupt mask bit)
    3. I(IRQ interrupt mask bit)
    4. F(FIQ interrupt mask bot)
    5. 对每个状态,1代表屏蔽,0代表没有屏蔽

访问PSTATE的各个bit位

在ARMv8-A中可以使用特殊功能的寄存器MRS对PSTATE进行读,使用MSR寄存器来对PSTATE进行写操作

ARMv8提供了一些特殊的寄存器,可以直接来操作PSTATE的各个域

比如可以直接使用NZCV来直接操作NZCV各个bit的值

通用在ARMv7中使用的是CPSR寄存器来描述处理器的状态,只不过在ARMv8-A中已经取消了CPSR寄存器

下来看下ARMv7中CPSR寄存器的格式

其中NZCV和AIF和ARMv8是保持一致的。别的位不说了,有兴趣的可以去看armv7的手册

举例说明:

比如内核中的disable_local_irq和enable_local_irq的在ARM64架构的最终实现,就是通过daifset和daifclr指令实现的

static inline void arch_local_irq_enable(void)
{asm volatile("msr daifclr, #2     // arch_local_irq_enable"::: "memory");
}static inline void arch_local_irq_disable(void)
{asm volatile("msr daifset, #2     // arch_local_irq_disable"::: "memory");
}

ARMv8-A Process State, PSTATE相关推荐

  1. 15 Process State and O.S. Scheduling

    1 Process State and Scheduling 1.scheduler唯一的任务是决定哪个进程使用cpu 2 The O.S. Scheduler 2.1 O.S. Scheduling ...

  2. ARMv8(aarch64)指令集特性

    有了之前mips系统架构的基础,再了解arm64就相对轻松多了.所谓体系架构,核心就是寄存器.指令集和abi(即寄存器和指令集的使用规范).下面就分这几方面展开做的学习笔记. 目录 一.armv8概览 ...

  3. ARMv8 ARM64 架构 整体介绍

    这里整理一些 arm64(aarch64是armv8下面的一个工作状态,一般我们将其称为arm64?) 在这里不考虑 aarch32 这里的主要内容是 手册 arm ARM arm ARM// cpu ...

  4. 64位程序怎么判断指针是否有效_AArch64应用程序级编程模型

    根据实现选择,体系结构支持多级执行特权,由从EL0到EL3的不同异常级别表示.EL0对应于最低的特权级别,通常被描述为无特权.应用层程序员模型是在EL0上执行软件的程序员模型. 系统软件决定异常级别, ...

  5. OPTEE学习笔记 - AArch64 RPC(一)

    前文OPTEE学习笔记 - REE与TEE通信记录了AArch32的RPC调用流程,这边总结一下OPTEE AArch64的RPC调用流程,基于optee 3.11版本以及TF-A 2.4 REE侧E ...

  6. aarch64指令集_AArch64应用程序级编程模型

    根据实现选择,体系结构支持多级执行特权,由从EL0到EL3的不同异常级别表示.EL0对应于最低的特权级别,通常被描述为无特权.应用层程序员模型是在EL0上执行软件的程序员模型. 系统软件决定异常级别, ...

  7. AARCH64 常用的指令和寄存器描述

    当我们在写汇编时要参考什么 1. ABI// 当考虑了ABI之后,这样子写的汇编代码就可以和C代码兼容,可以相互调用 3. 语法 (指令解释中的各种概念是什么)// C1.2 Structure of ...

  8. 深入理解LINUX内核 笔记 第四章 中断和异常

    中断和异常处理程序的嵌套执行 https://blog.csdn.net/denglin12315/article/details/121703669 一.历史 早前的Linux内核版本,中断分为两种 ...

  9. ARMv8与linux的新手笔记

    ARMv8 與 Linux的新手筆記 by loda hlchou@gmail.com 從iPhone 5S採用ARMv8處理器架構後,對於ARMv8 64bits的相關討論很多,也受到大家關注,Go ...

最新文章

  1. Nginx教程--02.Nginx虚拟主机的配置
  2. DSS转发中sdp文件的简化
  3. SAP CRM Fiori BP overview page design
  4. YUV420数据格式
  5. linux下能运行python,(转)Linux下运行python
  6. 数据库的显示、创建、使用 、用户授权管理及忘记root用户后重置密码
  7. C#中XML的基本操作
  8. UITableView设置背景为透明时遇到的问题
  9. phpstudy之解决phpmyadmin卡顿的方法
  10. Atitit View事件分发机制
  11. 如何下载矢量电子地图
  12. 液晶屏接口定义_简介TFT-LCD液晶屏接口类型之LVDS接口
  13. 如何使用《口袋操作系统 Ceedo 2.2.1.23 汉化破解版》
  14. 图形化开发(五)032-Three.js之光照——PointLight 点光源、SpotLight 聚光灯光源、实现聚光灯阴影、HemisphereLight室外光源
  15. 计算机硬件cpu指令执行过程,cpu执行指令的过程详解
  16. 居住证申领条件放宽!关系孩子上学!
  17. 2019最新《后盾网向军0基础学PHP教程》
  18. LigerUI初学篇---使用LigerUI制作简洁清爽的界面
  19. 总裁演说思维商务谈判中的九大技巧
  20. 上课第一天初感。。。

热门文章

  1. c语言孪生素数用函数,孪生素数(C语言),C语言编程。。孪生素数
  2. python爬取视频的工具_Python爬取视频(其实是一篇福利)
  3. 基于java电影院购票售票系统设计与实现
  4. ACM 在线平台(OJ)评判结果 错误类型 及解决办法
  5. 程序员也要学会生活,今天自己看教程学做芝士蛋糕
  6. SDL2的学习之路<一> 创建基本窗口
  7. 大数据应用之 --- clickhouse客户端连接 dbeaver和永洪对接
  8. Mitmproxy精华笔记
  9. 自动化测试python selenium案例_Python selenium自动化测试框架实战--登录测试案例
  10. JDK 9 到 19 内存变化