当前位置: 首页 > news >正文

Cortex-A9 架构

一、Cortex-A 处理器运行模式

Cortex-A9处理器有 9中处理模式,如下表所示:

九种运行模式


在上表中,除了User(USR)用户模式以外,其它8种运行模式都是特权模式,在特权模式下,程序可以访问所有的系统资源。这几个运行模式可以通过软件进行任意切换,也可以通过中断或者异常来进行切换。

大多数的应用程序运行在用户模式,该模式下某些被保护的系统资源是不能被访问的,要想访问这些受限的资源就必须进行模式切换。不过用户模式是不能直接进行切换的,用户模式下需要借助异常来完成模式切换,当要切换模式的时候,应用程序可以产生异常,在异常的处理过程中完成处理器模式切换。

当中断或者异常发生以后,处理器就会进入到相应的异常模式中。每一种异常模式都有一组寄存器供异常处理程序使用,以保证在进入异常模式以后,用户模式下的寄存器不会被破坏。

二、Cortex-A 寄存器组

每一种运行模式都有一组与之对应的寄存器组。本节我们要讲的是 Cortex-A的内核寄存器组,注意不是芯片的外设寄存器。

ARM架构提供了16 个32位的通用寄存器(R0~R15)供软件使用,前15个(R0~R14)可以用作通用的数据存储,R15是程序计数器PC,用来保存将要执行的指令。ARM还提供了一个当前程序状态寄存器CPSR(Current Program Status Register)和一个备份程序状态寄存器SPSR(Saved Program Status Register),SPSR寄存器是CPSR寄存器的备份。这18个寄存器如下图所示:
在这里插入图片描述

Cortex-A 寄存器

Cortex-A的每一种模式可见的寄存器包括15 个通用寄存器(R0~R14)、一个程序状态寄存器和一个程序计数器PC。在这些寄存器中,有些是所有模式共用的同一个物理寄存器,有一些是各模式自己所独立拥有的,各个模式所拥有的寄存器如下图所示:
在这里插入图片描述
九种模式所对应的寄存器

图中浅色字体的是与User模式所共有的寄存器,蓝绿色背景的是各个模式所独有的寄存器。可以看出,在所有的模式中,低寄存器组(R0~R7)是共享同一组物理寄存器的,只是一些高寄存器组在不同的模式有自己独有的寄存器,比如FIQ模式下R8~R14是独立的物理寄存器。假如某个程序在FIQ模式下访问R13寄存器,那它实际访问的是寄存器R13_fiq,如果程序处于SVC模式下访问R13寄存器,那它实际访问的是寄存器R13_svc。可见Cortex-A内核寄存器组成如下:

  1. 34 个通用寄存器,包括 R15 程序计数器(PC),这些寄存器都是 32 位的。
  2. 8 个状态寄存器,包括 CPSR 和SPSR。
  3. Hyp 模式下独有一个 ELR_hyp 寄存器。

1、通用寄存器

R0~R15是通用寄存器,通用寄存器可以分为一下三类:

  1. 未备份寄存器,即R0~R7。
  2. 备份寄存器,即R8~R14。
  3. 程序计数器PC,即R15。

分别来看一下这三类寄存器:

(1)未备份寄存器

未备份寄存器指的是R0~R7这 8个寄存器,因为在所有的处理器模式下这8个寄存器都是同一个物理寄存器,在不同的模式下,这8 个寄存器中的数据就会被破坏。所以这8个寄存器并没有被用作特殊用途。

(2)备份寄存器

备份寄存器中的R8~R12这 5个寄存器有两种物理寄存器,在快速中断模式下(FIQ)它们对应着Rx_irq(x=8~12)物理寄存器,其他模式下对应着Rx(8~12)物理寄存器。FIQ是快速中断模式,看名字就是知道这个中断模式要求快速执行。FIQ模式下中断处理程序可以使用R8~R12寄存器,因为FIQ模式下的R8~R12是独立的,因此中断处理程序可以不用执行保存和恢复中断现场的指令,从而加速中断的执行过程

备份寄存器R13一共有 8个物理寄存器,其中一个是用户模式(User)和系统模式(Sys)共用的,剩下的7个分别对应 7种不同的模式。R13通常用来做为栈指针SP。基本上每种模式都有一个自己的R13物理寄存器,应用程序会初始化R13,使其指向该模式专用的栈地址,这就是常说的初始化SP指针。

备份寄存器R14一共有 7个物理寄存器,其中一个是用户模式(User)、系统模式(Sys)和超级监视模式(Hyp)所共有的,剩下的6个分别对应6种不同的模式。R14也称为链接寄存器(LR,Link Register),LR寄存器在ARM中主要用作如下两种用途:

  1. 每种处理器模式使用R14(LR)来存放当前子程序的返回地址。如果使用BL或者BLX来调用子函数的话,R14(LR)被设置成该子函数的返回地址,在子函数中,将R14(LR)中的值赋给R15(PC)即可完成子函数返回,比如在子程序中可以使用如下代码:
    MOV PC, LR @寄存器 LR 中的值赋值给 PC,实现跳转
    或者可以在子函数的入口处将LR入栈:
    PUSH {LR} @将LR 寄存器压栈
    在子函数的最后面出栈即可:
    POP {PC} @将上面压栈的LR 寄存器数据出栈给 PC 寄存器
  2. 当异常发生以后,该异常模式对应的R14 寄存器被设置成该异常模式将要返回的地址。另外R14也可以当作普通寄存器使用。

(3)程序计数器 R15

程序计数器R15也叫做PC(program counter),在ARM状态下,R15始终指向当前指令之前的八个字节,在Thumb状态下,它始终指向当前指令之前的四个字节,这是因为ARM的流水线机制导致的。ARM处理器3级流水线:取指->译码->执行,这三级流水线循环执行,比如当前正在执行第一条指令的同时也对第二条指令进行译码,第三条指令也同时被取出存放在R15(PC)中。我们喜欢以当前正在执行的指令作为参考点,也就是以第一条指令为参考点,那么R15(PC)中存放的就是第三条指令,换句话说就是R15(PC)总是指向当前正在执行的指令地址再加上2条指令的地址。对于32位的ARM处理器,每条指令是 4个字节,所以:
R15 (PC)值 = 当前执行的程序位置 + 8 个字节

2、程序状态寄存器

所有的处理器模式都共用一个CPSR物理寄存器,因此CPSR可以在任何模式下被访问。CPSR是当前程序状态寄存器,该寄存器包含了条件标志位、中断禁止位、当前处理器模式标志等一些状态位以及一些控制位。所有的处理器模式都共用一个 CPSR必然会导致冲突,为此,除了User和Sys这两个模式以外,其他 7个模式每个都配备了一个专用的物理状态寄存器,叫做SPSR(备份程序状态寄存器),当特定的异常中断发生时,SPSR寄存器用来保存当前程序状态寄存器(CPSR)的值,当异常退出以后可以用SPSR中保存的值来恢复CPSR。

因为User和Sys这两个模式不是异常模式,所以并没有配备SPSR,因此不能在User和Sys模式下访问SPSR,会导致不可预知的结果。由于SPSR是CPSR的备份,因此SPSR和CPSR的寄存器结构相同,如下图所示:
在这里插入图片描述

CSPR 寄存器

  • N(bit31):当两个补码表示的有符号整数运算的时候,N=1表示运算对的结果为负数,N=0表示结果为正数。
  • Z(bit30):Z=1表示运算结果为零,Z=0表示运算结果不为零,对于CMP指令,Z=1表示进行比较的两个数大小相等。
  • C(bit29):在加法指令中,当结果产生了进位,则C=1,表示无符号数运算发生上溢,其它情况下C=0。在减法指令中,当运算中发生借位,则C=0,表示无符号数运算发生下溢,其它情况下C=1。对于包含移位操作的非加/减法运算指令,C为移出值的最后一位,对于其它非加/减运算指令,C位的值通常不受影响。
  • V(bit28):对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出,对于其他的非加/减法运算指令,V的值通常不改变。
  • Q(bit27):在ARMv5及以上版本的E系列处理器中,用Q标志位表示增强的DSP运算指令是否发生了溢出,在其他版本的处理器中,Q标志位无意义。
  • IT[1:0](bit26:25):和IT[7:2](bit15:bit10)一起组成IT[7:0],作为IF-THEN指令执行状态。
  • J(bit24):仅ARM_v5TE-J架构支持,J=1表示处于Jazelle状态,此位通常和T(bit5)位一起表示当前所使用的指令集,如下表所示:
指令类型

在这里插入图片描述

  • GE[3:0](bit19:16):SIMD指令有效,大于或等于。
  • IT[7:2](bit15:10):参考IT[1:0]。
  • E(bit9):大小端控制位,E=1表示大端模式,E=0表示小端模式。
  • A(bit8):禁止异步中断位,A=1表示禁止异步中断。
  • I(bit7):I=1禁止IRQ,I=0使能IRQ。
  • F(bit6):F=1禁止FIQ,F=0使能FIQ。
  • T(bit5):控制指令执行状态,表明本指令是ARM指令还是Thumb指令,通常和J(bit24)一起表明指令类型,参考J(bit24)位。
  • M[4:0]:处理器模式控制位,含义如下表所示:
处理器模式位

在这里插入图片描述

相关文章:

Cortex-A9 架构

一、Cortex-A 处理器运行模式 Cortex-A9处理器有 9中处理模式,如下表所示: 九种运行模式 在上表中,除了User(USR)用户模式以外,其它8种运行模式都是特权模式,在特权模式下,程序可以访问所有的系统资源。这…...

【C语言】循环结构程序设计(第二部分 -- 习题讲解)

前言:昨天我们学习了C语言中循环结构程序设计,并分析了循环结构的特点和实现方法,有了初步编写循环程序的能力,那么今天我们通过一些例子来进一步掌握循环程序的编写和应用。 💖 博主CSDN主页:卫卫卫的个人主页 💞 &am…...

UGUI交互组件Toggle

一.Toggle对象的构造 Toggle和Button类似,是交互组件的一种 如果所示,通过菜单创建了两个Toggle,Toggle2中更换了背景和标记资源 对象说明Toggle含有Toggle组件的对象Background开关背景Checkmark开关选中标记Label名称文本 二.Toggle组件属…...

亲,您的假期余额已经严重不足了......

引言 大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。 转眼八天长假已经接近尾声了,今天来总结一下大家的假期,聊一聊假期关于学习的看法,并预估一下大家节后大家上班时的样子。 1.放假前一天 即将迎来八天…...

【软件测试】自动化测试selenium(一)

文章目录 一. 什么是自动化测试二. Selenium的介绍1. Selenium是什么2. Selenium的特点3. Selenium的工作原理4. SeleniumJava的环境搭建 一. 什么是自动化测试 自动化测试是指使用软件工具或脚本来执行测试任务的过程,以替代人工进行重复性、繁琐或耗时的测试活动…...

Nginx实现动静分离

一、概述 1、什么是动静分离 动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。 动静分离简单的概…...

【算法题】309. 买卖股票的最佳时机含冷冻期

题目: 给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 卖出股票后,你无法在…...

1951-2011年长序列高时空分辨率月尺度温度和降水数据集

简介 长序列高时空分辨率月尺度温度和降水数据集,基于中国及周边国家共1153个气温站点和1202个降水站点数据,利用ANUSPLIN软件插值,重建了1951−2011年中国月值气温和降水量的高空间分辨率0.025(~2.5km)格点数据集&am…...

十天学完基础数据结构-第六天(树(Tree))

树的基本概念 树是一种层次性的数据结构,它由节点组成,这些节点按照层次关系相互连接。树具有以下基本概念: 根节点:树的顶部节点,没有父节点。 子节点:树中每个节点可以有零个或多个子节点。 叶节点&am…...

RobotFramework流程控制(最新版本)

文章目录 一 分支流程1. 关键字:Run Keyword If2. 关键字:IF/ELSE3. 嵌套IF/ELSE4. 关键字:Set Variable If 二 循环流程1. 普通FOR循环2. 嵌套FOR循环3. 退出循环4. 其它常用循环 一 分支流程 1. 关键字:Run Keyword If Run Key…...

win11 好用的 快捷方式 --chatGPT

gpt: Windows 11引入了许多新的功能和改进,同时也包括一些实用的快捷方式和功能。以下是一些Windows 11中的常用快捷方式: 1. **Win D**:最小化或还原所有打开的窗口,显示桌面。 2. **Win E**:打开文件资源管理器…...

在大数据相关技术中,HBase是个分布的、面向列的开源数据库,是一个适合于非结构化数据存储的数据库。

HDFS,适合运行在通用硬件上的分布式文件系统,是一个高度容错性的系统,适合部署在廉价的机器上。Hbase,是一个分布式的、面向列的开源数据库,适合于非结构化数据存储。MapReduce,一种编程模型,方…...

910数据结构(2020年真题)

算法设计题 问题1 现有两个单链表A和B,其中的元素递增有序,在不破坏原链表的情况下,请设计一个算法,求这两个链表的交集,并将结果存放在链表C中。 (1)描述算法的基本设计思想; (2)根据设计思想&#xff0…...

MyBatisPlus(八)范围查询

说明 范围查询&#xff0c;包括&#xff1a; 大于大于等于小于小于等于在范围内在范围外 大于&#xff1a;gt 代码 Testvoid gt() {LambdaQueryWrapper<User> wrapper new LambdaQueryWrapper<>();wrapper.gt(User::getAge, 20);List<User> users mapp…...

【day10.04】QT实现TCP服务器客户端搭建的代码

服务器&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);//此时&#xff0c;服务器已经成功进入…...

milvus 结合Thowee 文本转向量 ,新建表,存储,搜索,删除

1.向量数据库科普 【上集】向量数据库技术鉴赏 【下集】向量数据库技术鉴赏 milvus连接 from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection, utility connections.connect(host124.****, port19530)2.milvus Thowee 文本转向量 使用 …...

GEO生信数据挖掘(三)芯片探针ID与基因名映射处理

检索到目标数据集后&#xff0c;开始数据挖掘&#xff0c;本文以阿尔兹海默症数据集GSE1297为例 目录 处理一个探针对应多个基因 1.删除该行 2.保留分割符号前面的第一个基因 处理多个探针对应一个基因 详细代码案例一删除法 详细代码案例二 多个基因名时保留第一个基因名…...

力扣 -- 96. 不同的二叉搜索树

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int numTrees(int n) {vector<int> dp(n1);//初始化dp[0]1;//填表for(int i1;i<n;i){for(int j1;j<i;j){//状态转移方程dp[i](dp[j-1]*dp[i-j]);}}//返回值return dp[n];} }; 你学会了吗&…...

经典算法-枚举法(百钱买百鸡问题)

题目&#xff1a; 条件&#xff1a;现有 100 元&#xff0c;一共要买公鸡、母鸡、小鸡三种鸡&#xff0c;已知公鸡 5 元一只&#xff0c;母鸡 3 元一只&#xff0c;1 元可以买三只小鸡。 要求&#xff1a;公鸡、母鸡、小鸡都要有&#xff0c;一共买 100 只鸡。有哪几种买法&am…...

Gurobi设置初始可行解

目录 1. 决策变量的Start属性直接设置变量的初始值 1.1 Start&#xff1a;MIP变量的起始值&#xff08;初值&#xff09;double类型&#xff0c;可更改 1.2 StartNodeLimit&#xff1a;限制了在完善一组输入部分变量的初始解时&#xff0c;MIP所探索的分支定界的节点的数量 …...

保姆级教程:用命令行实时监控瑞芯微RK3588的CPU/GPU/NPU负载与温度

嵌入式开发实战&#xff1a;构建RK3588芯片全维度性能监控系统 在边缘计算和AI推理场景中&#xff0c;RK3588作为一款高性能SoC&#xff0c;其复杂的多核架构&#xff08;包括6核CPU、Mali-G610 GPU和6TOPS NPU&#xff09;对系统监控提出了更高要求。本文将手把手教你搭建一个…...

粒子追踪模拟单透镜聚焦comsol ansys Fluent 二维三维模型 仿真模型,文献复现

粒子追踪模拟单透镜聚焦comsol ansys Fluent 二维三维模型 仿真模型&#xff0c;文献复现&#xff0c;热湿传递在实验室折腾粒子追踪仿真的时候&#xff0c;最让人上头的莫过于单透镜聚焦的场景搭建。COMSOL和ANSYS这对冤家各有各的脾气——前者把物理场耦合玩出花&#xff0…...

WeMod Pro免费解锁终极指南:两种补丁方法完整对比与实战教程

WeMod Pro免费解锁终极指南&#xff1a;两种补丁方法完整对比与实战教程 【免费下载链接】Wemod-Patcher WeMod patcher allows you to get some WeMod Pro features absolutely free 项目地址: https://gitcode.com/gh_mirrors/we/Wemod-Patcher 还在为WeMod Pro的高级…...

Pixelorama:免费开源的2D精灵编辑器终极指南

Pixelorama&#xff1a;免费开源的2D精灵编辑器终极指南 【免费下载链接】Pixelorama A free & open-source 2D sprite editor, made with the Godot Engine! Available on Windows, Linux, macOS and the Web! 项目地址: https://gitcode.com/gh_mirrors/pi/Pixelorama …...

NaViL-9B图文理解入门:支持中英文混合提问的实测案例

NaViL-9B图文理解入门&#xff1a;支持中英文混合提问的实测案例 1. 认识NaViL-9B NaViL-9B是一款原生多模态大语言模型&#xff0c;由专业研究机构开发。它最大的特点是能够同时处理文字和图片信息&#xff0c;就像一个能"看图说话"的智能助手。无论是纯文字问题&…...

英雄联盟智能助手:5个提升游戏体验的核心技巧

英雄联盟智能助手&#xff1a;5个提升游戏体验的核心技巧 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾经在英雄联盟游…...

Informer实战指南:从ProbSparse自注意力到生成式解码器的长序列预测优化

1. Informer模型的核心突破&#xff1a;为什么比Transformer更适合长序列预测&#xff1f; 第一次看到Informer论文时&#xff0c;最让我惊讶的是它在AAAI 2021上击败了众多Transformer变体获得最佳论文。这个专为长序列预测&#xff08;Long Sequence Time-series Forecasting…...

RWKV7-1.5B-g1a惊艳案例:将复杂段落压缩为三条逻辑闭环要点

RWKV7-1.5B-g1a惊艳案例&#xff1a;将复杂段落压缩为三条逻辑闭环要点 1. 模型能力展示&#xff1a;从复杂到简洁的文本处理 RWKV7-1.5B-g1a作为一款轻量级文本生成模型&#xff0c;在信息压缩和提炼方面展现出令人惊喜的能力。我们通过一个实际案例来展示它如何将复杂内容转…...

Gemma-3-270m量化压缩实战:4位精度模型部署

Gemma-3-270m量化压缩实战&#xff1a;4位精度模型部署 1. 开篇&#xff1a;小模型的大能量 最近在折腾边缘设备部署时&#xff0c;发现一个挺有意思的现象&#xff1a;很多团队还在用"大炮打蚊子"&#xff0c;明明只需要处理一些简单的文本分类任务&#xff0c;却…...

OpenClaw+Qwen3-VL:30B:学术论文图表解析助手

OpenClawQwen3-VL:30B&#xff1a;学术论文图表解析助手 1. 为什么需要论文图表解析助手 作为一名经常需要阅读大量文献的科研工作者&#xff0c;我深刻体会到处理论文图表的痛苦。传统的工作流程通常是&#xff1a;下载PDF论文→手动截图→用OCR工具识别→复制数据到Excel→…...