现代计算机由三大部分组成(已经转化为以存储器为中心)

  1. CPU(Central Processing Unit) 中央处理器,核心部件为ALU(Arithmetic Logic Unit,算术逻辑单元)和CU(Control Unit,控制单元)

  2. I/O设备(受CU控制)

  3. 主存储器(Main Memory,MM),分为RAM(随机存储器)和ROM(只读存储器) //CPU与MM合成主机,I/O设备可称为外部设备

二、一条指令在CPU的执行过程

// 专业术语
1. Ad(Address) 形式地址
2. DR(Data Register) 数据寄存器
3. AR(Address Register) 地址寄存器(MAR)
4. IR(Instruction Register) 指令寄存器
5. BR(Buffer Register) 缓冲寄存器(MBR)
5. ID(Instruction Decoder) 指令译码器
6. PC(ProgramCounter) 程序计数器

计算机的CPU,其工作都可以分为5个阶段:

1.取指令阶段    取指令(Instruction Fetch,IF)阶段是将一条指令从主存中取到指令寄存器的过程。    程序计数器PC中的数值,用来指示当前指令在主存中的位置。当一条指令被取出后,PC中的数值将根据指令字长度而自动递增:若为单字长指令,则(PC)+1àPC;若为双字长指令,则(PC)+2àPC,依此类推。    //PC -> AR -> Memory    //Memory -> IR2.指令译码阶段    取出指令后,计算机立即进入指令译码(Instruction Decode,ID)阶段。    在指令译码阶段,指令译码器按照预定的指令格式,对取回的指令进行拆分和解释,识别区分出不同的指令类别以及各种获取操作数的方法。    在组合逻辑控制的计算机中,指令译码器对不同的指令操作码产生不同的控制电位,以形成不同的微操作序列;在微程序控制的计算机中,指令译码器用指令操作码来找到执行该指令的微程序的入口,并从此入口开始执行。    //                        { 1.Ad    //Memory -> IR -> ID ->   { 2.PC变化     //                        { 3.CU(Control Unit)3.访存取数阶段    根据指令需要,有可能要访问主存,读取操作数,这样就进入了访存取数(Memory,MEM)阶段。    此阶段的任务是:根据指令地址码,得到操作数在主存中的地址,并从主存中读取该操作数用于运算。    //Ad -> AR -> AD -> Memory4.执行指令阶段    在取指令和指令译码阶段之后,接着进入执行指令(Execute,EX)阶段。    此阶段的任务是完成指令所规定的各种操作,具体实现指令的功能。为此,CPU的不同部分被连接起来,以执行所需的操作。    例如,如果要求完成一个加法运算,算术逻辑单元ALU将被连接到一组输入和一组输出,输入端提供需要相加的数值,输出端将含有最后的运算结果。    //Memory -> DR -> ALU 5.结果写回阶段    作为最后一个阶段,结果写回(Writeback,WB)阶段把执行指令阶段的运行结果数据“写回”到某种存储形式:结果数据经常被写到CPU的内部寄存器中,以便被后续的指令快速地存取;在有些情况下,结果数据也可被写入相对较慢、但较廉价且容量较大的主存。许多指令还会改变程序状态字寄存器中标志位的状态,这些标志位标识着不同的操作结果,可被用来影响程序的动作。    //DR -> Memory6.循环阶段    在指令执行完毕、结果数据写回之后,若无意外事件(如结果溢出等)发生,计算机就接着从程序计数器PC中取得下一条指令地址,开始新一轮的循环,下一个指令周期将顺序取出下一条指令。    //重复 1~5    //遇hlt(holt on)停止

java代码是否一定按顺序执行?

这个问题听起来有点蠢,串行的代码确实会按代码语意正确的执行,但是编译器对于代码本身的优化却并不一定会按实际的代码一步一步的执行。

比如:

r1=a;

r2=r1.x;

r3=r1.x;

编译器则可能会进行优化,将r3=r1.x这条指令替换成r3=r2,这就是指令的重排

编译器为什么要做指令的重排呢?

地球人都知道,当然是出于性能上的考虑,而指令重排能提升多少性能?

首先指令的执行可以分为这几步:

  • 取指 IF

  • 译码和取寄存器操作数 ID

  • 执行或者有效地址计算 EX (ALU逻辑计算单元)

  • 存储器访问 MEM

  • 写回 WB (寄存器)

详见:https://blog.csdn.net/fuhanghang/article/details/83421254

  而一段代码并不是由单条指令就可以执行完毕的,而是通过流水线来执行多条指令。

流水线技术是一种将指令分解为多步,并让不同指令的各步操作重叠,从而实现几条指令并行处理。

指令1    IF    ID    EX  MEN      WB

指令2          IF    ID    EX         MEN      WB

指令的每一步都由不同的硬件完成,假设每一步耗时1ms,执行完一条指令需耗时5ms,

每条指令都按顺序执行,那两条指令则需10ms。

但是通过流水线在指令1刚执行完IF,执行IF的硬件立马就开始执行指令2的IF,这样指令2只需要等1ms,两个指令执行完只需要6ms,效率是不是提升巨大!

先记住几个指令:

MIPS汇编指令集---https://www.cnblogs.com/yanghong-hnu/p/5635245.html

LW(加载数据到寄存器的指令)

ADD(两个定点寄存器的内容相加)

SUB(相减)

SW(把数据从寄存器存储到存储器)

现在来看一下代码 A=B+C 是怎么执行的

现有R1,R2,R3三个寄存器,

LW R1,B       IF   ID    EX  MEN  WB(加载B到R1中)LW R2,C             IF   ID    EX    MEN  WB(加载C到R2中)ADD R3,R2,R1           IF    ID       ×       EX  MEN       WB(R1,R2相加放到R3)SW A,R3                           IF      ID     x     EX         MEN      WB(把R3  的值保存到变量A)

当然是可以的,通过指令重排就可以实现,再看一下下面的例子:

要执行

A=B+C;

D=E-F;

通过将D=E-F执行的指令顺序提前,从而消除因等待加载完毕的时间。

LW R1,B       IF   ID    EX  MEN  WB(加载B到R1中)LW R2,C             IF   ID    EX    MEN  WB(加载C到R2中)ADD R3,R2,R1           IF    ID       ×       EX  MEN       WB(R1,R2相加放到R3)SW A,R3                           IF      ID     x     EX         MEN      WB(把R3  的值保存到变量A)

欢迎关注作者公众号交流以及投稿

mips sw指令_指令重排的意义相关推荐

  1. MIPS指令集的常用指令分类和相关解释

    MIPS指令集的常用指令分类和相关解释 MIPS 一些基本概念 MIPS指令集的六种指令格式 R型指令: I型计算类指令 I型取数类指令: I型条件判断类指令: J型指令: MIPS指令集的常用指令 ...

  2. mips中的li_MIPS指令学习二

    1.MIPS寻址方式 MIPS架构的寻址模式有寄存器寻址.立即数寻址.寄存器相对寻址和PC相对寻址4种,其中寄存器相对寻址.PC相对寻址介绍如下: 1.1.寄存器相对寻址 这种寻址模式主要被加载/存储 ...

  3. cmd指令大全指令_汇编语言常用指令大全

    MOV 指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器 ...

  4. 【Computer Organization笔记02】指令系统、MIPS指令系统简介、THCO MIPS指令系统、THINPAD指令模拟器

    本次笔记内容: P3 计算机组成原理(03) P4 计算机组成原理(04) 文章目录 计算机的指令系统:概述 计算机程序 什么是计算机程序? 程序举例 Von Neumannan结构计算机 指令和指令 ...

  5. cmd指令大全指令_干货 | Linux 超全实用指令大全

    运行级别和找回root密码 指定运行级别 运行级别说明: 0:关机 1:单用户[找回丢失密码] 2:多用户状态没有网络服务 3:多用户状态有网络服务 4:系统未使用保留给用户 5:图形界面 6:系统重 ...

  6. 汇编语言中xor指令_汇编各类指令用法及含义分析 - 全文

    什么是汇编语言 汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指 ...

  7. python我的世界给予物品指令_我的世界给予物品指令大全 | 手游网游页游攻略大全...

    发布时间:2015-11-19 我的世界命令方块指令大全 我的世界命令方块怎么用.我的世界命令方块都有哪些攻能?我的世界命令方块怎么使用?下面99单机网小编给大家带来我的世界命令方块指令大全. /gi ...

  8. linux指令_周东海

    目录 1.基础指令语法 2.中级指令语法 3.高级指令语法 1.基础指令语法   1.ls指令 指令  #ls :列出当前目录的文件 #ls 路径 : 列出指定路径下的文件 #ls -i/la : - ...

  9. mc服务器改哪个文件让水流动,我的世界领地关闭水流动指令_我的世界让水变没指令...

    10条解答 1.我的世界领地关闭水流动指令 /res set 领地名 flow true 不行就 /res set 领地名 waterflow true 或者站在领地上 /res set flow t ...

最新文章

  1. Script:找出ASM中的Spfile参数文件
  2. ffmpeg rtmp 不清晰_知识储备:理解RTMP、HttpFlv和HLS的正确姿势
  3. torch 变量_python变量
  4. 文件过滤_jmeter(七)-BeanShell对数据过滤保存文件
  5. 《为大量出现的KPI流快速部署异常检测模型》 笔记
  6. preventDefault, stopPropagation, stopImmediatePropagation 三者的区别
  7. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第3节 综合案例_文件上传_5_综合案例_文件上传案例优化...
  8. Python html.parser库学习小结
  9. android集成sdk 马甲包,Android配置马甲包
  10. 基于JAVA的校园二手交易平台(附:源码 论文 数据库文件)
  11. 有什么高效的Windows笔记软件?3款优秀的笔记软件推荐!
  12. php配置设置时区,php如何设置时区
  13. Hi3798CV200DMD_VER.B SCH原理图
  14. CIO挂帅绩效考核 初战告捷秘诀何在?
  15. Trimble Yuma超级掌上计算机实机感受
  16. 如何进行PLC数据采集?如何进行PLC录波?如何进行PLC时序分析?看,我的工作成果PLC-Recorder!
  17. AE C# 图片标注背景透明
  18. bzoj 4349: 最小树形图 朱-刘算法
  19. 移动定位技术简述(转)
  20. 淘宝新开店铺没有流量

热门文章

  1. 开箱即用的 Prometheus 告警规则集
  2. JavaScript:对象都是这样生成的!
  3. Kubernetes 弃用 Docker !
  4. 罗永浩关联直播交易案遭“问停”;中国量子计算原型机“九章”问世;pip 20.3 发布 | 极客头条...
  5. 入行 AI,如何选个脚踏实地的高薪岗位?
  6. Python 炫技操作:花式导包的八种方法
  7. 37岁程序员被裁!120天找不到工作?不想被淘汰,这可能是你最后的机会
  8. 我们为什么用 Go 编写机器学习架构,却不用 Python?
  9. 一文了解十大 Java 开发者必备测试框架!
  10. 华米OV坐不住了!九大手机厂商围剿微信小程序