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

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.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GPT-2(Transformer Decoder)的TensorFlow实现(附源码)

文章目录 一、GPT2实现步骤二、源码 一、GPT2实现步骤 机器学习模型的开发实现步骤一般都包含以下几个部分:   1. 遵照模型的网络架构,实现每一层(Layer/Block)的函数;   2. 将第1步中的函数组合在一起&#xff0c…

Typecho搭建和美化

概述 Typecho是一款轻量级的开源PHP博客系统,它简单易用,界面整洁,性能高效,主题、插件众多。我使用的是腾讯云轻量服务器,Typecho的应用模版,一键安装环境。构建自己的博客网站,记录生活、分享…

容器简单介绍

目录 一、容器简介​编辑 二、容器和虚拟化技术差异 三、容器基本概念 四、容器技术对企业优势 五、容器的工具 一、容器简介 docker只是容器工具,真正容器技术是LXC (linux container) 二、容器和虚拟化技术差异 虚拟机模式&#xff…

AI人工智能逻辑回归的原理、优缺点、应用场景和实现方法

逻辑回归(Logistic Regression)是一种常见的机器学习算法,它被广泛应用于分类问题。在人工智能(Artificial Intelligence,简称AI)领域中,逻辑回归是一种简单而有效的算法,可以用于许…

vue+elementui+nodejs高校校园在线打印预约系统

在线提交文档进行打印 首页简单介绍系统 语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 顶部或主页按钮转到打印 用户可以登录 查看历史打印记录 用户分学生和非学生 学生可以享有优惠…

【C#】GridControl增加选择列(不用二次点击)

系列文章 【C#】单号生成器(编号规则、固定字符、流水号、产生业务单号) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器(开始日期、结束日期) 本文链接:h…

黑马Redis原理篇

黑马Redis原理篇 1、数据结构1.1、动态字符串SDS1.2、IntSet1.3、Dict1.4、ZipList1.5、QuickList1.6、SkipList1.7、RedisObject1.8、五种数据结构1. String(小EMBSTR,大RAW (SDS),少量整数INT)2. List(Redis3.2之后使用QuickList实现&#…

electron 使用electron-packager打linux-x64包与linux-arm64包,解决打包缓慢问题

使用electron-packager打linux-x64包与linux-arm64包,解决下载zip打包缓慢问题 在使用electron-packager打包的过程中,需要在第一次下载electron版本对应的zip文件,下载很缓慢,而且还可能出现每次都在下载zip的情况 解决思路是提前下载好zip文…

【Jmeter第三章】Jmeter给请求添加请求头

给请求加上请求头最常见的场景就是在请求头上添加token了,这里也拿添加token来举例 1、添加某个请求的请求头 1、选中HTTP请求,右键添加 2、添加请求头 2、添加公共的请求头信息 其实步骤和上面是一样的,只不过是选择:线程组…

Midjourney提示词资源、使用技巧、艺术家资源网站收录

为了帮助艺术家们使用Midjourney更专业、准确地创作更完美的艺术作品,我们收录了一些Midjourney提示词资源分享、提示词书写技巧、相关专业工具,同时还有一些相关艺术家资源帮艺术家们找到创作灵感。有很多是社区内资深玩家分享的云文档,资源…

2023彩虹易支付最新原版安装教程(内附源码)

此源码已通过检查,确认无后门,且所有代码开源,无加密文件。 测试日期 2023年5月21日 源码已扫描无后门,不放心的也可以自己再去扫描一遍 2023年5月22日 各个功能接口测试完毕,均可用 选中下方可查看下载链接 http…

初识linux之网络基础概念

目录 一、网络发展 1. 独立模式 2. 网络互联 二、认识协议 1. 为什么要有协议 2. 什么是协议 三、网络协议初识 1. 协议分层 2. 协议分层的优点 3. 理解分层 4. OSI七层模型 4.1 概念 4.2 模型形式 4.3 各层的作用 5. TCP/IP五层(或四层&#xff09…

23 KVM管理虚拟机-使用VNC密码登录虚拟机

文章目录 23 KVM管理虚拟机-使用VNC密码登录虚拟机23.1 概述23.2 前提条件23.3 操作步骤 23 KVM管理虚拟机-使用VNC密码登录虚拟机 本章介绍使用VNC密码登录虚拟机的方法。 23.1 概述 当虚拟机操作系统安装部署完成之后,用户可以通过VNC协议远程登录虚拟机&#…

HTTP介绍、原理

HTTP 与 HTTPS 有哪些区别? HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。HTTP 连接建立相…

C++编译和链接

目录 一、源代码的组织 ①头文件(*.h) ②源文件(*.cpp) ③主程序(main函数所在的程序) ④从源代码到可执行文件,编译的过程有三大步骤: 1)编译预处理 2&#xff09…

Matlab - Plot in plot(图中画图)

Matlab - Plot in plot(图中画图) 这是在MATLAB中创建一个嵌入式图形的示例,可以在另一个图形中显示。 与MATLAB中的“axes”函数相关。 Coding % Create data t linspace(0,2*pi); t(1) eps; y sin(t);% Place axes at (0.1,0.1) with w…

Winform窗体利用WebApi接口实现ModbusTCP数据服务

在上位机开发过程中,有时候会遇到需要提供数据接口给MES或者其他系统,今天跟大家分享一下,如何在Winform等桌面应用程序中,开发WebApi接口,提供对外modbus设备的数据服务。通讯模型是: 为了更好地演示应用场…

Qt- QSS样式表用法及用例说明

这里写自定义目录标题 QSS样式表用法1.Qt样式表语法2.选择器3.属性列表4.冲突解决5.全局添加QSS QSS样式表用法 整理qss样式表语法知识,方便今后查看。 1.Qt样式表语法 Qt样式表支持各种属性、伪状态和子控件,可以自定义小部件的外观 selector { attr…

Day01 关系型数据MySQL简介与多平台安装配置

文章目录 第一章 数据库简介1.1 数据库的简介1.2 数据库的分类 第二章 数据库的安装与配置2.1 安装: Windows版2.2 卸载: Windows版2.3 安装: Mac直装版2.4 卸载: Mac直装版2.5 安装: Mac Homebrew版2.6 卸载: Mac Homebrew版2.7 启动、停止mysql服务2.8 登录到MySQL2.9 修改密…

【dcdc】AP2813 DCDC降压恒流芯片 两路输出 一路恒流 一路瀑闪 电动摩托汽车灯方案

1,方案来源:深圳市世微半导体有限公司 汤巧 2,产品描述 AP2813 是一款双路降压恒流驱动器,高效率、外围简单、内置功率管,适用于 5-80V 输入的高精度降压 LED 恒流驱动芯片。内置功率管输出最大功率可达12W,最大电流…