ARM7的三级流水线过程
看到汇编中很多关于程序返回与中断返回时处理地址都很特别,仔细想想原来是流水线作用的效果。所以,决定总结学习下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
另外补充说明就是根据以上描述,流水线只有被指令填满时才能发挥最大效能,即每时钟周期完成一条指令的执行(仅单周期指令)。
如果程序发生跳转,流水线会被清空,这将需要几个时钟才能使流水线被再次填满。因此,尽量地少使用跳转指令可以提高程序的执行效率
这样你就知道了,如果返回的时候返回PC,那么中间就有一个指令没有执行,所以用SUB pclr-irq #4。
ARM7的三级流水线过程相关推荐
- ARM中流水线分析——以三级流水线进行分析
一.ARM流水线技术基础知识 流水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器的效率和吞吐率.ARM7是冯·诺依曼结构,采用了典型的三级流水线,而ARM9则是哈佛结构,采用五级流水线技 ...
- ARM base instruction -- 简单三级流水线
/* * 简单三级流水线 */ IF Instruction fetch 取指 ...
- 经典ARM7三级流水线的分析
3级流水线如上图所示(PC为程序计数器),流水线使用3个阶段,因此指令分3个阶段执行. ⑴ 取指从存储器装载一条指令 ⑵ 译码识别将要被执行的指令 ⑶ 执行处理指令并将结果写会寄存器 对于ARM7来说 ...
- 【Java面试题全集】
2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对 ...
- ARM的流水线与PC值的关系
一.两种结构: 冯 · 诺依曼结构 和 哈佛结构: 1.冯·诺依曼结构 冯·诺依曼结构又称作普林斯顿体系结构(Princetionarchitecture). 1945年,冯·诺依曼首先提出了&quo ...
- 关于ARM的内核架构
@TOC张凌001 关于ARM的内核架构 很多时候我们都会对M0,M0+,M3,M4,M7,arm7,arm9,CORTEX-A系列,或者说AVR,51,PIC等,一头雾水,只知道是架构,不知道具体是 ...
- Uboot中start.S源码的指令级的详尽解析
Uboot中start.S源码的指令级的详尽解析 版本:v1.9 Crifan Li 摘要 本文对Uboot中的Start.S的源码的几乎每一行,都进行了详细的解析 本文提供多种格式供: 在线阅读 H ...
- 【期末复习资料】嵌入式系统及应用
第一章 嵌入式系统导论 嵌入式系统概述 嵌入式系统的定义 嵌入式系统是嵌入式计算机系统的简称.顾名思义,它是一种嵌入在设备(或系统)内部,为特定应用而设计的专用计算机系统. 嵌入式系统是以应用为中心. ...
- 组成原理(五)CPU指令流水线
5.5 CPU指令流水线 一. 流水线 流水线 (1)流水线: 指令从取值到真正执行的过程划分成多个小步骤,cpu真正开始执行指令序列时,一步压一步的执行,减少其等待时间. (2)流水线级数越多,工作 ...
最新文章
- 云计算行业报告:2018, 风起云涌
- java四行代码实现图片下载
- 【Selenium 小知识】获取 token 和 cookies
- 1.2传值、引用、常量引用
- 亲加通讯云郝飞:探讨直播低延迟低流量的粉丝连麦技术
- ARM(IMX6U)BSP工程文件管理(分文件编程)
- Android 高级编程 RecyclerView 控件的使用
- 计算机编程学英语词汇,计算机编程英语词汇大全
- STM32编译环境、建立工程模板以及程序下载
- 限流的简单使用及学习
- 用MicroPython开发ESP32-文件传输工具-ampy
- CNN和机器学习算法性能测试
- 数据资产目录建设之数据分类全解(上)
- Visdom 介绍 | 二
- Java实现mysql保存微信特殊表情符号
- Mentor-dft 学习笔记 day44-Low-Power Design Test
- python中的递归函数如何表示_python:递归函数
- 【Python】批量对文件做downsample并且以指定名称保存到文件夹中
- frozen ui php,推荐几个移动端前端UI框架
- 虚拟服务器主机选型,如何选择虚拟主机?Windows主机选购指南
热门文章
- 浅C#中的装箱和拆箱
- VNC Viewer方式的远程连接树莓派
- C++/C中的Sleep函数
- JAVA环境与相关软件的下载与配置
- [4G+5G专题-141]: 终端 - 测试仪表详解
- 常用的RSS阅读器评测
- 瀑布流代码PHP,thinkPHP实现瀑布流的方法
- python 网页版支付宝 api_Python接入支付宝进行PC端支付
- 微信编辑器春天模板推荐
- 论文笔记28 -- (Vehicle ReID)VOC-ReID: Vehicle Re-identification based on Vehicle-Orientation-Camera