看到汇编中很多关于程序返回与中断返回时处理地址都很特别,仔细想想原来是流水线作用的效果。所以,决定总结学习下ARM流水线。

ARM7处理器采用3级流水线来增加处理器指令流的速度,能提供0.9MIPS/MHz的指令处理速度。

PS:

MIPS(Million Instruction Per Second)表示每秒多少百万条指令。比如0.9MIPS,表示每秒九十万条指令。

MIPS/MHz表示CPU在每MHz的运行速度下可以执行多少个MIPS,如0.9MIPS/MHz则表示如果CPU运行在1MHz的频率下,每秒可执行90万条指令。

如果CPU在20MHz的频率下,每秒可运行1800万条指令。MIPS/MHz可以很好的反映CPU的速度。

3级流水线如上图所示(PC为程序计数器),流水线使用3个阶段,因此指令分3个阶段执行。

⑴ 取指从存储器装载一条指令

⑵ 译码识别将要被执行的指令

⑶ 执行处理指令并将结果写会寄存器

以前学过的51单片机,因为比较简单,所以它的处理器只能完成一条指令的读取和执行后,才会执行下一条指令。这样,PC始终指向的正在“执行”的指令。

而对于ARM7来说因为是3级流水线,所以把指令的处理分为了上面所述的3个阶段。

所以处理时实际是这样的:ARM正在执行第1条指令的同时对第2条指令进行译码,并将第3条指令从存储器中取出。

所以,ARM7流水线只有在取第4条指令时,第1条指令才算完成执行。

下图生动形象的说明了3级流水线的处理机制

下面一句话很关键:无论处理器处于何种状态,程序计数器R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或者正在“译码”的指令。

人们一般会习惯性的将正在执行的指令作为参考点,即当前第1条指令。

所以,PC总是指向第3条指令,

或者说PC总是指向当前正在执行的指令地址再加2条指令的地址。

处理器处于ARM状态时,每条指令为4个字节,所以PC值为正在执行的指令地址加8字节,即是:

PC值 = 当前程序执行位置 + 8字节

处理器处于Thumb状态时,每条指令为2字节,所以PC值为正在执行的指令地址加4字节,即是:

PC值 = 当前程序执行位置 + 4字节

下面一个例子就很好的说明了这个问题。

0x4000 ADDPC,PC,#4 ;正在被执行的指令,将地址值PC+4写入PC
0x4004 ...;正在被译码的指令
0x4008 ...;正在被取指的指令,PC=0x4008
0x400C ...;PC+4=0x400C

另外补充说明就是根据以上描述,流水线只有被指令填满时才能发挥最大效能,即每时钟周期完成一条指令的执行(仅单周期指令)。

如果程序发生跳转,流水线会被清空,这将需要几个时钟才能使流水线被再次填满。因此,尽量地少使用跳转指令可以提高程序的执行效率。

以上就是对ARM73级流水线的一个总的认识,参考来自学习ARM时的教材——《ARM嵌入式系统基础教程(第二版)》。

ARM架构与体系学习(二)——3级流水线相关推荐

  1. 学习ARM架构,系统移植和驱动开发总结

    本次结束了对ARM架构,系统移植和驱动开发的学习,它们都是属于底层,难度想对都比较的难一点,但先学习arm架构之后去学习系统移植和驱动开发,会使自己对系统移植和驱动开发容易理解点. arm架构 arm ...

  2. 嵌入式软件开发培训笔记——ARM架构Linux系统下交叉编译环境搭建、NFS、TFTP服务配置及Nandflash的读写

    bootloader原理和开发-->kernel构建-->文件系统/根文件系统(filesystem/rootfs) APP 一.配置交叉编译环境(可参考嵌入式Linux移植与驱动开发co ...

  3. ARM学习(12)基于arm架构的嵌入式操作系统理解

    ARM学习(12)基于arm架构的嵌入式操作系统理解 笔者来聊聊指令集的理解 这里写自定义目录标题 ARM学习(12)基于arm架构的嵌入式操作系统理解 symbol 符号表认识 symbol符号表的 ...

  4. 适合阿里P8级架构师提升学习的再造淘宝阿里团队代码落地实战项目

    前言 蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力.培训.出国.大公司的经历,还有很多很好的朋友.但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员 ...

  5. 【Android 逆向】ARM CPU 架构体系 ( ARM 内存模型 | ARM 架构堆的实现 | ARM 架构栈的实现 )

    文章目录 一.ARM 内存模型 二.ARM 架构堆的实现 三.ARM 架构栈的实现 一.ARM 内存模型 ARM 架构体系中 , CPU 直接访问内存 , 控制内存中的状态和数据 , 内存中映射外部设 ...

  6. 【Android 逆向】ARM CPU 架构体系 ( ARM 处理器工作模式 | ARM 架构模型 )

    文章目录 一.ARM 处理器工作模式 二.ARM 架构模型 一.ARM 处理器工作模式 参考 [嵌入式开发]ARM 处理器工作模式 及 修改方法 ( 处理器模式 | 设置处理器模式 | 程序状态字寄存 ...

  7. ARM学习-ARM架构基本内容

    目录 1.ARM处理器简介及RISC特点 1.1ARM处理器简介 1.2 RISC设计主要特点 2. Arm的基本数据类型 3. ARM处理器存储格式 4. 内核的工作模式 5. ARM9的5级流水线 ...

  8. (转)MyBatis框架的学习(二)——MyBatis架构与入门

    http://blog.csdn.net/yerenyuan_pku/article/details/71699515 MyBatis框架的架构 MyBatis框架的架构如下图:  下面作简要概述: ...

  9. Arm发布v9体系架构:Cortex-X2、Cortex-A710和Cortex-A510

    又到了每年一度的 Arm 架构更新的时候.在上个月 Arm 发布了最新的基础架构 Neoverse V1 和 Neoverse N2 CPU IP 之后,现在官方终于推出了移动端新架构. 今年,Arm ...

最新文章

  1. numpy中的ogrid
  2. Anaconda :利用Anaconda Prompt (Anaconda3)建立、设计不同python版本及对应库函数环境之详细攻略
  3. 阿姨帮万勇:O2O产品的颠覆与布局,阿姨帮未来发展战略独家披露
  4. 鸿蒙可以安装荣耀play,荣耀play3是鸿蒙系统吗
  5. 记录 之 tf.placeholder() 函数的意义及用法
  6. 2017年游戏营收报告公布,谁是去年最大的赢家?
  7. android项目实战博学谷源码_阿里爆款SpringBoot项目实战PDF+源码+视频分享
  8. 怎么在虚拟机上安装linux mint,如何在VirtualBox上安装Linux Mint?
  9. android如何查看手机中的db文件,查看sqlite数据库的表结构
  10. 北京市朝阳区卫星地图下载
  11. 【机器学习面经】AI算法岗位简历必备
  12. 四轴笔记----PSRAM存储器介绍
  13. 华为S5700实战配置
  14. 《测绘综合能力》——海洋测绘
  15. ccf-20161203--权限查询
  16. 计算机系统基础实验 pa1
  17. 《软技能(代码外的生存指南)》读书笔记——持续更新
  18. 微信封面怎么设置?微信主页面的背景怎么设置
  19. [PHP] 算法-请找出带环链表的环的入口结点的PHP实现
  20. Oracle GoldenGate Monitor agent安装后的报错OGGMON-20603

热门文章

  1. 使用HTML制作课表
  2. python 修改excel内容转PDF文件
  3. 回文数函数(c语言)
  4. Java bit、byte、位、字节、汉字、字符
  5. 【安全与风险】密码安全和用户认证
  6. 算法日记(四)之回文字符串
  7. 项目经理论坛_做好项目经理,应该向华为学习
  8. python换硬币_Python 硬币兑换问题
  9. HTPC知识普及第二讲
  10. 游戏抽奖网站用java怎么做,Java实现游戏抽奖算法