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

【ARM】ARM寄存器和异常处理

目录

1.指令的执行过程

2. ARM处理器概述

3.ARM指令集

4.ARM存储模型

5. ARM工作模式

6.ARM寄存器组织

(1)寄存器

(2)  ARM寄存器

(3)CPSR寄存器​​​​​​​

7. ARM异常处理

(1)异常

(2)异常源

(3)ARM异常模式

(4) ARM异常响应

(5)IRQ异常举例

(6) 异常优先级

(7) FIQ和IRQ



1.指令的执行过程

(1)一条指令的执行分为三个阶段

         1.取址:     

CPU将PC寄存器中的地址发送给内存,内存将其地址中对应的指令返回

到CPU中的指令寄存器(IR)

        2.译码:     

译码器对IR中的指令进行识别,将指令(机器码)解析成具体的运算    

        3.执行:     

控制器控制运算器中对应的运算单元进行运算,运算结果写入寄存器

(2) 每执行一条指令后PC的值会自动增加指向下一条指令

2. ARM处理器概述

ARM产品系列
早先经典处理器 包括ARM7、ARM9、ARM11家族
 Cortex-A系列

针对开放式操作系统的高性能处理器    

应用于智能手机、数字电视、智能本等高端运用 

Cortex-R系列

针对实时系统、满足实时性的控制需求    

应于汽车制动系统、动力系统等

Cortex-M系列

为单片机驱动的系统提供了低成本优化方案    

应用于传统的微控制器市场、智能传感器、汽车周边等

3f50e050b8b9498fab67459420349e50.jpeg

3.ARM指令集

(1)指令集: 处理器能识别的指令的集合称为指令集,不同架构的处理器指令集不同,指令集是处理器对开发者提供的接口

(2)大多数ARM处理器都支持两种指令集:

ARM指令集

 所有指令(机器码)都占用32bit存储空间    

代码灵活度高、简化了解码复杂度    

执行ARM指令集时PC值每次自增4

Thumb指令集

所有指令(机器码)都占用16bit存储空间    

代码密度高、节省存储空间    

执行Thumb指令集时PC值每次自增2

4.ARM存储模型

(1)ARM采用32位架构,基本数据类型有以下三种

Byte(字节)8bits
Halfword(半字)16bits
Word(字)32bits

(2)数据存储

Word型数据在内存的起始地址必须是4的整数倍    

Halfword型数据在内存的起始地址必须是2的整数倍    

注:即数据本身是多少位在内存存储时就应该多少位对齐,且ARM一般使用小端对齐

5. ARM工作模式

(1)ARM有8个基本的工作模式

User    非特权模式,一般在执行上层的应用程序时ARM处于该模式
FIQ 当一个高优先级中断产生后ARM将进入这种模式
IRQ当一个低优先级中断产生后ARM将进入这种模式
SVC当复位或执行软中断指令后ARM将进入这种模式
Abort 当产生存取异常时ARM将进入这种模式
Undef当执行未定义的指令时ARM将进入这种模式
System    使用和User模式相同寄存器集的特权模式
Monitor    为了安全而扩展出的用于执行安全监控代码的模式

(2)工作模式的理解

         不同模式拥有不同权限  

        不同模式执行不同代码  

        不同模式完成不同的功能

(3)ARM工作模式分类

按照权限              User为非特权模式(权限较低),其余模式均为特权模式(权限较高)
按照状态 FIQ、IRQ、SVC、Abort、Undef属于异常模式,即当处理器遇到异常后 会进入对应的模式

6.ARM寄存器组织

(1)寄存器

 概念寄存器是处理器内部的存储器,没有地址
作用一般用于暂时存放参与运算的数据和运算结果
分类包括通用寄存器、专用寄存器、控制寄存器

a64bfde11f264895a95b8bdf0dbab7ca.jpeg

(2)  ARM寄存器

在某个特定模式下只能使用当前模式下的寄存器,一个模式下特有的寄存器其他模式下不可使用

eb7b8907447f4296a7f59ece9233cc9a.png

专用寄存器
R15(PC,Program Counter) 程序计数器,用于存储当前取址指令的地址
R14(LR,Link Register)

链接寄存器,一般有以下两种用途:    

> 执行跳转指令(BL/BLX)时,LR会自动保存跳转指令下一条指令的地址,程序需要返回时将LR的值复制到PC即可实现    

> 产生异常时,对应异常模式下的LR会自动保存被异常打断的指令的下一条指令的地址,异常处理结束后将LR的值复制到PC可实现程序返回

R13(SP,Stack Pointer)栈指针,用于存储当前模式下的栈顶地址
CPSR(Current Program Status Register)当前程序状态寄存器 

(3)CPSR寄存器

 CPSR寄存器分为四个域,[31:24]为条件域用F表示、[23:16]为状态域用S表示、[15:8]为预留域用X表示、[8:0]为控制域用C表示

45605903526648f5bd62eb106406c2e6.png

Bit[4:0][10000]User    [10001]FIQ     [10010]IRQ     [10011]SVC     [10111]Abort   [11011]Undef   [11111]System  [10110]Monitor
Bit[5] [0]ARM状态     [1]Thumb状态
 Bit[6] [0]开启FIQ     [1]禁止FIQ
 Bit[7][0]开启IRQ     [1]禁止IRQ
Bit[28] 

> 当运算器中进行加法运算且产生符号位进位时该位自动置1,否则为0    

> 当运算器中进行减法运算且产生符号位借位时该位自动置0,否则为1

Bit[29]    > 当运算器中进行加法运算且产生进位时该位自动置1,否则为0     > 当运算器中进行减法运算且产生借位时该位自动置0,否则为1
Bit[30]    当运算器中产生了0的结果该位自动置1,否则为0
Bit[31]     当运算器中产生了负数的结果该位自动置1,否则为0

7. ARM异常处理

(1)异常

处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生,这时处理器就要将当前的程序暂停下来转而去处理这个异常的事件,异常事件处理完成之后再返回到被异常打断的点继续执行程序

1d9ed181a44f4b05bbd30f7311bb1609.jpeg

(2)异常源

 导致异常产生的事件称为异常源

ARM异常源
FIQ    快速中断请求引脚有效    
IRQ    外部中断请求引脚有效
 Reset复位电平有效
 Software Interrupt执行swi指令
Data Abort    数据终止
Prefetch Abort指令预取终止
 Undefined Instruction遇到不能处理的指令

(3)ARM异常模式

异常模式:在ARM的基本工作模式中有5个属于异常模式,即ARM遇到异常后会切换成对应的异常模式

2be89d6fe0cf4612a1f771cf44166afe.png

(4) ARM异常响应

ARM产生异常后的动作(自动完成)

1.拷贝CPSR中的内容到对应异常模式下的SPSR_<mode>    

2.修改CPSR的值   

         2.1.修改中断禁止位禁止相应的中断   

         2.2.修改模式位进入相应的异常模式    

         2.3.修改状态位进入ARM状态    

3.保存返回地址到对应异常模式下的LR_<mode>    

4.设置PC为相应的异常向量(异常向量表对应的地址)

异常向量表

 > 异常向量表的本质是内存中的一段代码    

> 表中为每个异常源分配了四个字节的存储空间    

> 遇到异常后处理器自动将PC修改为对应的地址    

> 因为异常向量表空间有限一般我们不会再这里写异常处理程序,而是在对应的位置写一条跳       转指令使其跳转到指定的异常处理程序的入口    

c995ed5810224419a0b3eda9b67ea03d.jpeg

注:ARM的异常向量表的基地址默认在0x00地址但可以通过配置协处理器来修改其地址

ARM异常返回的动作(自己编写)

    1.将SPSR_<mode>的值复制给CPSR, 使处理器恢复之前的状态                     

   2.将LR_<mode>的值复制给PC ,使程序跳转回被打断的地址继续执行 

(5)IRQ异常举例

bc9850d3198b48e78e615c7144a31204.jpeg

(6) 异常优先级

9b0963e26c8f49fda71ad5cfd38a878b.jpeg

(7) FIQ和IRQ

 FIQ的响应速度比IRQ快    

        1. FIQ在异常向量表位于最末 ,可直接把异常处理写在异常向量表之后,省去跳转    

        2. FIQ模式有5个私有寄存器(R8-R12) ,执行中断处理程序前无需压栈保存寄存器,可直接处理中断    

        3. FIQ的优先级高于IRQ     

                3.1 两个中断同时发生时先响应FIQ     

                3.2 FIQ可以打断RIQ,但RIQ不能打断FIQ

相关文章:

【ARM】ARM寄存器和异常处理

目录 1.指令的执行过程 2. ARM处理器概述 3.ARM指令集 4.ARM存储模型 5. ARM工作模式 6.ARM寄存器组织 &#xff08;1&#xff09;寄存器 &#xff08;2&#xff09; ARM寄存器 &#xff08;3&#xff09;CPSR寄存器​​​​​​​ 7. ARM异常处理 &#xff08;1&am…...

数仓建模【埋点设计与管理】

埋点设计与管理 埋点的作用 分析用户转化以及留存&#xff1a;分析用户偏好收集市场反馈保障用户数据安全定位异常其他作用 埋点数仓设计 数据进入数仓之前我们就需要设计好数仓表&#xff0c;埋点表的数据有几个特点&#xff1a; 数据量非常大&#xff0c;可能是所有数据集…...

Spring Clound介绍

Spring Cloud 是一系列框架的集合&#xff0c;它利用 Spring Boot 的开发便利性简化了分布式系统&#xff08;例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话和集群状态&#xff09;的开发。Spring Cloud 旨在为开发者…...

Redhat Linux忘记密码解决方案

1、重启系统 2、将光标移动到要启动的内核 3、按e编辑当前条目 4、将光标移动以Linux开头的行&#xff0c;此为内核命令行 5、在末尾添加人的rd.break 6、按ctrlx继续启动&#xff0c;如果发现输入的rd.break不能进入到伪系统&#xff0c;那么改为 rd.break consoletty0 (按ctr…...

对于子数组问题的动态规划

前言 先讲讲我对于这个问题的理解吧 当谈到解决子数组问题时&#xff0c;动态规划(DP)是一个强大的工具&#xff0c;它在处理各种算法挑战时发挥着重要作用。动态规划是一种思想&#xff0c;它通过将问题分解成更小的子问题并以一种递归的方式解决它们&#xff0c;然后利用这些…...

Instal IIS on Windows Server 2022 Datacenter

和以往版本一样&#xff0c;没有什么不同&#xff0c;So easy&#xff01; WinR - ServerManager.exe 打开服务器管理器&#xff0c;点击【添加角色和功能】&#xff0c;选择自己想要的角色和功能。 一、开始之前&#xff1a;帮助说明&#xff0c;点击【下一步】&#xff1b;…...

飞天使-k8s知识点30-kubernetes安装1.28.0版本-使用containerd方式

文章目录 安装前准备containerd 配置内核参数优化安装nerdctl以上是所有机器全部安装开始安装初始化&#xff0c;这步骤容易出问题&#xff01; 安装前准备 内核升级包的md5,本人已验证&#xff0c;只要是这个md5值&#xff0c;放心升级 1ea91ea41eedb35c5da12fe7030f4347 ke…...

Oracle 误操作insert delete update 数据回滚

查询回滚数据 select * from tablename AS OF TIMESTAMP TO_TIMESTAMP(2023-12-29 10:29:00,yyyy-mm-dd hh24:mi:ss) where not exists (select 1 from tablename A where A.xh tablename.xh and A.TIME tablename.TIME); TO_TIMESTAMP(2023-12-29 10:29:00,yyyy-mm-dd h…...

Linux系统(CentOS)下安装配置 Nginx 超详细图文教程

一、下载并安装 1.打开nginx官网并点击右侧的download&#xff0c;Nginx官网下载地址 2.选择稳定版本 我放在/usr/local/nginx/下&#xff0c;新建文件夹 mkdir /usr/local/nginx/ 通过xftp传输到Linux的服务器上&#xff0c;这里方法不过多复述。 或者如果Linux联网&#xf…...

追求完美用户体验,从变量名设计的细节抓起

在一个安静的办公室里&#xff0c;卧龙和凤雏正坐在电脑前忙碌地工作着。阳光透过窗户洒在他们的脸上&#xff0c;映照出专注的神情。 “变量命名让人摸不着头脑&#xff0c;光看变量名很难搞清楚它的用途。”卧龙眉头紧皱&#xff0c;表情严肃地说道。 “哦&#xff1f;具体是…...

matlab实现K均值聚类

在MATLAB中实现聚类分析&#xff0c;可以使用MATLAB内置的聚类函数&#xff0c;如kmeans&#xff08;用于K均值聚类&#xff09;&#xff0c;linkage和cluster&#xff08;用于层次聚类&#xff09;&#xff0c;或者使用MATLAB的统计和机器学习工具箱中的其他函数。 以下是一个…...

详解BOM编程

华子目录 BOM编程window对象常见的window对象的属性常见的window对象的方法注意 history对象history对象的属性history对象的方法 screen 对象navigator 对象属性方法 location对象属性方法示例 BOM编程 JavaScript本质是在浏览器中运行&#xff0c;所以JavaScript提供了BOM&a…...

情感分类学习笔记(1)

文本情感分类&#xff08;二&#xff09;&#xff1a;深度学习模型 - 科学空间|Scientific Spaces 一、代码理解 cw lambda x: list(jieba.cut(x)) #定义分词函数 您给出的代码定义了一个使用 jieba 分词库的分词函数。jieba 是一个用于中文分词的 Python 库。该函数 cw 是…...

EtherCAT运动控制器Delta机械手应用

ZMC406硬件介绍 ZMC406是正运动推出的一款多轴高性能EtherCAT总线运动控制器&#xff0c;具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口&#xff0c;ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。 ZMC406支持6轴运动控制&#xff0c;最多可扩展至32轴&#…...

物联网杀虫灯—新型的环保杀虫设备

型号推荐&#xff1a;云境天合TH-FD2S】物联网杀虫灯是一种新型环保杀虫设备&#xff0c;其中风吸式太阳能杀虫灯作为其一种特殊类型&#xff0c;展现了独特的工作原理和优势。 风吸式太阳能杀虫灯以太阳能电池板为电源&#xff0c;白天储存电源&#xff0c;晚上为杀虫灯提供电…...

加盟零食店的真是大冤种

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 我一朋友&#xff0c;在老家县城去年失业没事干&#xff0c;手里有一点钱但不多&#xff0c;就想着自己干点啥 。最后经多方打听考察&#xff0c;加盟了一个零食店&#xff0c;前前后后花去了近五六十万&#xff0c…...

力扣刷题--数组--第三天

今天再做两道二分查找的题目&#xff0c;关于二分查找的知识可看我前两篇博客。话不多说&#xff0c;直接开干&#xff01; 题目1&#xff1a;69.x 的平方根 题目详情&#xff1a;   给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。由于返回类型是整数&#…...

开源即时通讯IM框架 MobileIMSDK v6.5 发布

一、更新内容简介 本次更新为次要版本更新&#xff0c;进行了bug修复和优化升级&#xff08;更新历史详见&#xff1a;码云 Release Notes、Github Release Notes&#xff09;。 MobileIMSDK 可能是市面上唯一同时支持 UDPTCPWebSocket 三种协议的同类开源IM框架。轻量级、高…...

React 第二十七章 Hook useMemo

useMemo 函数可以用于缓存计算结果&#xff0c;以避免不必要的重复计算。 在React的函数组件中&#xff0c;当组件重新渲染时&#xff0c;函数组件内的所有代码都会重新执行。有些计算可能是非常消耗资源的&#xff0c;例如进行复杂的计算或进行网络请求。如果这些计算的结果在…...

自己写的爬虫小案例

网址&#xff1a;aHR0cDovL2pzc2NqZ3B0Lmp4d3JkLmdvdi5jbi8/dXJsPS92aWV3L3dvcmtpbmdVbml0L3dvcmtpbmdVbml0Lmh0bWw 这串代码能够爬取勘察单位企业的详细信息。 import requests import time import csv f open(勘察单位公司信息.csv,w,encodingutf-8,newline) csv_writer …...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...