ARM学习笔记_2 模式,寄存器,流水线

news2024/10/6 16:27:45

ARM

arm体积小功耗低性能高,支持thumb ARM双指令集,兼容8/16位器件;大量使用寄存器,指令定长,寻址简单。

ARM是32位架构,Word 32bit, half Word 16bit.

模式

image-20230518185159807

用户模式是用户程序的模式,没权限操作其他硬件和数据,只能通过软中断或异常切换。

系统模式和用户模式共用一套资源,且权限更高。

中断模式可以自由访问硬件资源。不然CPU直接可以访问所有硬件资源效率太低。

快速中断紧急一些,处理快速问题。

管理模式svc:软中断swi处理或者板子上电/rst时的模式,主要用于系统初始化。

中止模式:访问非法地址时的异常,如segment fault。预取指令中止或数据中止异常进入中止模式(预取指令中止是指令没问题,但是指令指的地址找不到)。

未定义模式:软件仿真,或无法识别指令时进入。

Monitor:安全监测。

这些模式的切换可以通过软件或者EXTI Exception改变。

异常有精确和非精确,无法嵌套只能一个个处理。

image-20230518193233074

寄存器

除了sys和usr是共用一组寄存器,其他模式之间都是有一部分通用寄存器(33个,对于Cortex-A来说),一部分当前模式独有的状态寄存器(7个)。

  • R0-R7:未分组寄存器。这些寄存器所有模式下都指向同一批寄存器,因此模式切换的时候可能出问题。
  • R8-R14:分组寄存器,分低位高位,一些指令可以分组执行提高效率。高位比如R13的SP和R14的LR。(R8-R12快中断和其他模式不一样,物理上有两组R8-R12的寄存器;而R13 14有7个物理寄存器,sys和usr模式下是一样的,其他模式下各自有一个R13 R14)
  • R15 PC:程序计数器。

r13 堆栈寄存器,由高位向低位存储。

刚刚了解到r13是7种模式下各有一个的,因此用途在于当模式切换的时候,堆栈指针可以保存各自模式下需要保存的寄存器,便于恢复。

r14 链接寄存器,用于保存程序运行位置(即各个模式下PC的值),多模式切换时返回有用。

pc的最低位一般没用,arm是[31:2]位保存pc,[1:0]位=0;thumb是[31:1]保存pc。因此寻址0x40008001和寻址0x40008000没区别。

pc=当前程序执行位置+8,因为取指是预取 提前多取一点装载一下,然后解码执行。

cpsr 当前程序状态寄存器,cpsr是所有模式共用的。

  • m位:[4:0],指代处理器模式位,如10000是usr mode。
  • t位,j位:[5] [24],指代寄存器是arm/thumb等状态。
  • i位:[7],是否启用中断,1禁止IRQ。
  • nzcv:[31:28] 条件位,比如根据这些位的值决定跳转到什么模式。image-20230519184826540

spsr 每种模式下自己专用的物理状态寄存器,用于异常发生时备份cpsr。sys usr没有spsr因为他俩不是异常模式。

协处理器

arm允许协处理器扩展指令集。比如控制cache,存储管理单元mmu,异常向量表地址设置等。了解即可,用到的时候再深入学习。

流水线

取指,移码,执行。这些都是串行的话,或者都给cpu做,效率极低。就像手术台上的大夫要完成重要的手术操作,护士辅助可以递工具准备药剂,而不是拿工具也要大夫自己亲自去拿。

一个程序需要三个步骤都来一遍,3个周期。但是我们可以依次开始更多的指令,比如一个周期入一个程序,一个周琦出一个指令,效率将大幅度提高。

最佳流水线:反应周期2

image-20230518213624742

但是实际上并非这么理想的每一个都是一个指令周期,因为有许多总线要传输数据,外存拷过来的数据更慢。

LDR流水线:

image-20230518215707697

执行ldr装载等指令时,需要先通过指令和数据总线把数据存入指定寄存器中,再写回原寄存器。在此期间其他并行的指令无法解码无法执行,因此只能延时stall。

分支流水线:反应周期2

image-20230518220811917

如图,BL指令要跳转到AND指令。

第2周期,Linkret做了两件事,第一是预取目的地址指令,预取AND指令。第二是保存当前函数返回位置,即把SUB的地址存入r14链接寄存器中,因此占用总线无法解码执行。

第3周期跳转,解码and的指令,预取下一条指令,且修改r14值,因为前面介绍过r14最后两位没用,清零以便简单返回。

中断流水线:反应周期7

image-20230518221647269

周期1:收到中断,不急,先把add指令执行完了。

周期2:保存cpsr到spsr,修改cpsr的当前模式改为中断模式,禁止中断进一步输入。

周期3:保存中断函数返回地址lr=当前pc=0x800c加了2条指令后的地址,预取指令。

周期4:跳转过去解码,且调整r14 lr=0x8008.

周期5:根据lr跳转回原函数对应位置。

周期6:根据lr修改回pc.

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

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

相关文章

RK3568平台开发系列讲解(驱动基础篇)RK平台IR的使用

🚀返回专栏总目录 文章目录 一、红外遥控配置二、内核驱动2.1 DTS 定义键值表2.2 内核用户码和IR键值的获取2.3 编译 IR 驱动进内核2.4 Android 键值映射三、IR 波形沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将对RK IR的使用进行学习。 一、红外遥控配置 …

解决插件加载动态库的冲突问题

最近发给用户的插件在使用过程中,UI界面一直未能加载成功,分析后发现和其他的插件发生冲突了,同时用到了一个UI库:MahApps.Metro(自己改造过的版本)。 分析过程中使用ProcessExplorer查看Revit运行过程中所…

二叉树最大宽度-广度优先方式 -队列应用_20230520

二叉树最大宽度-广度优先(BFS)方式 -队列应用 前言 上一遍介绍了求解二叉树最大宽度的DFS解法,求解的核心主要是对根节点、左孩子及右孩子的宽度取最大值,通过赋值给根节点后,然后通过递归栈层层返回,当返回至树的根节点上的时候…

数字图像处理—图像分割算法详解(边缘检测、阈值处理)

前言 令R表示一幅图像占据的整个空间区域。图像分割:把R分为n个子区域R1,R2,…,Rn的过程,满足 点、线、边缘检测 背景知识 一阶导数的近似要求: (1)在恒定灰度区域必须为零 (2)在灰度台阶或…

【连续介质力学】张量值张量函数

张量值张量函数 张量值张量函数有以下类型:标量,向量和高阶张量 标量值张量函数: Ψ Ψ ( T ) det ⁡ T Ψ Ψ ( T , S ) T : S \Psi \Psi(T) \det T \\ \Psi \Psi(T,S) T:S ΨΨ(T)detTΨΨ(T,S)T:S 其中, T , S T, S …

【JavaEE】MyBatis + 单元测试

目录 MyBaits项目的创建使用 引入相关依赖 配置文件设置 数据库连接 配置XML路径 映射器文件模板 业务代码实例 创建实体类 添加Mapper接口创建映射器 验证是否成功 MyBatis原理 什么是MyBatis 为什么学习MyBatis MyBatis工作原理 单元测试 前置工作 生成测试…

Selenium是什么,带你了解自动化测试的神奇之处

一、使用测试工具 工欲善其事,必先利其器。在开始具体的自动化测试之前,我们需要做好更多的准备,包括以下几个方面: 认识自动化测试 准备自动化测试工具 使用有效的方式 针对具体的测试对象 接下来的第一部分内容,我…

基于Java web的电子商务系统

摘要 【摘要】 所谓电子商务就是在网上开展商务活动,当企业将它的主要业务通过企业内部网(Intranet)、外部网(Extranet)以及Internet与企业的职员、客户供销商以及合作伙伴直接相连时,其中发生的各种活动就…

基于SpringBoot的校园志愿者管理系统的设计与实现

背景 本次设计任务是要设计一个校园志愿者管理系统,通过这个系统能够满足管理员和志愿者的校园志愿者信息管理功能。系统的主要功能包括首页、个人中心、志愿者管理、活动类型管理、活动信息管理、活动报名管理、活动通知管理、活动心得管理、交流反馈、系统管理等…

【LTspice入门】一、LTspice安装

一、LTspice安装 1、仿真的重要性:2、LTspice介绍3、LTspice官网4、LTspice下载与安装 1、仿真的重要性: 掌握好电路仿真有助于加深对电子电路分析理论的理解。 由于电子电路仿真不需要实际的元件和仪器仪表设备,设计者就可以对所涉及的电子电路进行性能…

PCIE总线基本介绍(和PCI总线差异、速率计算、引脚定义)

1、PCI和PCIE的差异 (1)PCIE协议在软件编程上是兼容PCI协议,不同在于PCIE和PCI的控制器; (2)PCIE是差分串行信号线,PCI是电平并行信号线; (3)PCI协议使用INTA#、INTB#、INTC#、INTD#四根中断线来触发终端,PCIE协议没有…

sshd_conf 配置文件详解

/etc/ssh/sshd_config配置文件内容详解。 Port 22 设置SSHD监听端口号。 SSH 预设使用 22 这个port,也可以使用多个port,即重复使用 port 这个设定项!例如想要开放SSHD端口为 22和222,则多加一行内容为: Port 222 即…

kotlin协程async与await

kotlin协程async与await import kotlinx.coroutines.* import kotlin.system.measureTimeMillisfun main() {val time measureTimeMillis {runBlocking {/*** async 是 CoroutineScope 扩展函数,async 和 launch 的区别在于async 可以返回协程结果,而 l…

【002hive基础】hive的库、表与hdfs的组织逻辑

文章目录 一. 数据的组织形式1. hive数据库2. hive表2.1. 内部表和外部表2.2. 分区表与分桶表 3. 视图 二. 底层储存 一. 数据的组织形式 1. hive数据库 hive将不同功能模块的数据,存储在不同的数据库中,在hdfs中以文件夹的形式显示。 2. hive表 2.1.…

Excel统计函数AVEDEV,稳住我们能赢

你的关注,是我最大的动力!你的转发,我的10W!茫茫人海有你的支持,给我无限动力。 1、AVEDEV函数。 (1)说明。 返回一组数据点到其算术平均值的绝对偏差的平均值。 AVEDEV函数是对一组数据中变化…

Linux---phy外设调试

文章目录 一、phy设备概述二、内核驱动配置与设备树添加三、其他补充 一、phy设备概述 我们知道在计算机网络上有一个OSI 7层模型: 应用层:网络服务与最终用户的一个接口。 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP 表…

服务(第二十七篇)squid-传统、穿透、反向代理

squid代理服务器: 主要提供缓存加速、应用层过滤控制的功能。 代理的工作机制: 1、代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。 2、将获得的网页数据(静态 Web 元素)保存到缓存中并发送给客户机&#x…

【Anaconda+Pytorch+DGL】安装+配置详细过程

文章目录 Anaconda安装1、进入[Anaconda官网](https://www.anaconda.com/)下载,下载完成后安装指令默认直到完成安装。2、进入Anaconda Prompt,使用conda指令来为不同的版本创建单独的环境: Pytorch安装1、打开NVIDIA控制面板,帮助…

Python+Yolov5水稻病害侦测识别

程序示例精选 PythonYolov5水稻病害侦测识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonYolov5水稻病害侦测识别>>编写代码&#xff0c;代码整洁&#xff0c;规则&am…

gcc/g++ 、Make/Makefile、CMake/CMakeLists.txt、qmake关系简述

1、gcc与g 首先来了解下编译器的主要工作流程&#xff1a; 源码&#xff08;Source Code&#xff09;>> 预处理器&#xff08;Preprocessor&#xff09;>> 编译器&#xff08;Compiler&#xff09; >> 汇编程序&#xff08;Assembler&#xff09;>> …