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

ARM 指令流水线

一,ARM 3级指令流水线特点 
“指令”:给CPU核下发的执行动作的命令 —— 例如:add指令,就是让CPU核进行数据的加法运算+指令3级流水线的过程和涉及的如下三个硬件单元: 
取值:取值器将内存中的指令加载到CPU核中 
解码:解码器将加载的指令翻译成CPU核将来能够识别的真正的指令 
执行:CPU核最终执行下发的指令 

PC永远指向取值,也就是PC永远保存取值指令的地址。ARM指令集的位宽为32位(4字节) , THUMB指令集的位宽为16位(2字节) 

二,ARM 5级指令流水线特点 

ARM9以后,指令流水线一律采用5级流水线,3级流水线(F->D->E)中没有把M(访存)和 W(写会)合法化。比如:add,sub,orr,eor,and等没有M和W。 只有ldr才有 到5级流水线,任何指令都有M和W(终于合法了) ,但是类似add,sub等指令即使没有M(访问动作) +但是对应的周期必须要存在。

 三,ARM CPU核处理器的7种工作模式

工作模式

场景

SVC管理模式

复位或者CPU执行swi指令,CPU就会切换到SVC管理模式,此模式的权限最高!

FIQ快速中断模式

外设产生中断电信号,经过中断控制器,中断控制器再以FIQ发送给CPU,CPU切换到FIQ快速中断模式

IRQ中断模式

外设产生的中断电信号,经过中断控制器,中断控制器再以IRQ发送给CPU,CPU切换到IRQ中断模式

切记:外设产生的中断电信号不能直接给CPU,必须要经过中断控制器,中断控制器会对这个中断信号

+进行一番的判断最终觉得是否发送给CPU或者以什么样的方式(FIQ/IRQ)发送给CPU

Abort终止模式

CPU访问一个不存在内存地址或者访问的数据权限不够,CPU会切换到Abort终止模式

Undef未定义模式

CPU执行一个不认识的指令,例如CPU执行zhangsan指令,CPU不认识此指令,CPU切换到未定义指令模式

System系统模式 / User模式:

这两个模式一样,系统运行时,应用程序一般都是在User模式运行前者的权限稍微高于User,但是在7种工作模式中权限最低

 四,ARM的7种异常

异常

对应场景

对应CPU模式

复位异常

系统复位

SVC管理模式

未定义指令异常

指令CPU不识别

Undef未定义指令模式

软中断异常

CPU执行swi指令

SVC管理模式

预取指令异常

访问内存失败

Abort终止模式

数据处理异常

数据的访问权限不够 Abort终止模式

IRQ异常

外设给CPU发IRQ中断 IRQ模式

FIQ异常

外设给CPU发FIQ中断 FIQ模式

一旦发生异常,ARM核硬件上自动完成:    

1.保存CPSR到SPSR_mode(对应的工作模式下的spsr) 保存是为了将来能够返回继续执行    

2.设置CPSR的相应位          

设置BIT[5]=0, 切换到ARM状态。         

设置BIT[4:0]=mode, 切换到某个CPU的工作模式下。         

设置BIT[7:6]=11, 禁止IRQ和FIQ中断。  

3.保存返回地址到lr_mode为了将来能够返回到原来被打断的地方继续执行、 设置PC为相应异常的软件处理入口地址,也就是让CPU到某个地址去"运行",开启软件处理异常。软件处理异常,怎么处理,完全由开发者自己决定。

4.软件一旦处理异常完毕,一般要返回,返回需要软件实现:        

(1)将spsr_mode赋值给cpsr(2)将lr_mode(保存着跳转之前的地址)赋值给pc  等于让CPU继续到跳转之前的地址去运行 

五,ARM寄存器之CPSR(当前程序状态寄存器):位宽32位。

              

BIT[4:0]: 又称MODE位,指示当前程序对应的CPU的工作模式                

BIT[5]:又称状态位(T),指示当前CPU的工作状态。=0:ARM状态。=1:Thumb状态。                

BIT[6]:又称F位。=0,使能FIQ中断。=1,禁止CPU核相应FIQ中断。               

BIT[7]:又称I位。=0,使能IRQ中断。=1,禁止CPU核相应IRQ中断 。                     

BIT[28]:又称V位。=0:程序执行无溢出 。=1:程序执行溢出。

BIT[29]:又称C位。=0:没有发生借位或者进位。=1:有发生过进位或者借位。

BIT[30]:又称Z位。=0:程序运算结果为非0。=1:程序运算结果为0。

BIT[31]:又称N位。=1:程序运算结果为负数或者小于 。=0:否则                             

N,Z,C,V:由统称条件标志位 。影响CPSR的条件标志位的情形:指令后面加S,指令的运算结果影响cpsr的NZCV位。              

例如:

add r0, r0, r1 //r0=-1, r1=1     //结果r0不影响cpsr的NVZV 。 

adds r0,r0,r1                         //会影响。                    

ARM寄存器之SPSR(保存当前程序状态寄存器) 位宽也是32位,用来保存CPSR,当CPU正在运行某个进程,此时CPU的工作模式为 +User模式,此时UART控制器给CPU发送一个IRQ中断,CPU相应IRQ中断,伴随着CPU由User模式切换到IRQ模式,但是在切 +换之前,应该保存当前进程的运行状态(否则将来再返回就没法继续运行),只需将cpsr保存在IRQ模式下的spsr下,将来中断处理完毕以 +后,再将IRQ模式下的spsr给cpsr,恢复到之前被打断的进程的状态 。

相关文章:

  • 天冷就要大口吃肉肉~python采集周边烤肉店数据【附代码】
  • 网络地址转换(NAT)(二)
  • 【目标检测】56、目标检测超详细介绍
  • 【PyTorch深度学习项目实战100例】—— 基于RNN实现微博热点新闻分类 | 第27例
  • 05_移动端网页适配
  • Hive数据库操作
  • python 矩阵运算
  • Vue3基础部分
  • 猿创征文 | 国产数据库之神通数据库详解安装和使用
  • STM32中使用PS2手柄
  • 飞翔的小猫-第12届蓝桥杯Scratch省赛2真题第2题
  • 基于粒子群算法的移动机器人路径规划
  • C# 连接 MySQL 数据库
  • 计算机网络物理层
  • 朋友问我,斗破苍穹中到底出现了多少次“恐怖如斯”?
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • ES2017异步函数现已正式可用
  • JavaScript 一些 DOM 的知识点
  • JS实现简单的MVC模式开发小游戏
  • mysql 5.6 原生Online DDL解析
  • scala基础语法(二)
  • 近期前端发展计划
  • 经典排序算法及其 Java 实现
  • 前端相关框架总和
  • 如何合理的规划jvm性能调优
  • 为什么要用IPython/Jupyter?
  • 学习Vue.js的五个小例子
  • 学习笔记TF060:图像语音结合,看图说话
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • ​TypeScript都不会用,也敢说会前端?
  • #pragma once
  • #预处理和函数的对比以及条件编译
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (4)事件处理——(7)简单事件(Simple events)
  • (k8s中)docker netty OOM问题记录
  • (多级缓存)缓存同步
  • (二)丶RabbitMQ的六大核心
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (转)http协议
  • (转)jQuery 基础
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 回调、接口回调、 委托
  • .Net7 环境安装配置
  • @JsonFormat与@DateTimeFormat注解的使用
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)