从 01 开始 从 01 开始
首页
  • 计算机简史
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • 数据库
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Node
  • Windows 使用技巧
  • 最全面的输入法教程
  • 浏览器
  • 终端软件
  • 装机
  • 笔记类软件
  • Markdown
  • 各大平台
  • 远程控制
  • RSS
  • 图片类工具
  • Office
  • 手机
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 教程简介
  • 英语学习方法论
  • 字母
  • 音标
  • 单词
  • 语法
  • 英语兔的相关视频
  • Larry 想做技术大佬的相关视频
  • 驾驶技能
  • 住房相关
  • 厨艺
  • 关于税
  • 理财
  • 睡眠
  • 皮肤
  • 口腔健康
  • 学会呼吸
  • 健身日志
  • 电影

    • 电影推荐
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 反腐
  • GFW
  • 404 内容
  • 审查与自我审查
  • 互联网
  • 2022
  • 2023
  • 2024
  • 2025
  • 关于本站
  • 关于博主
  • 网站动态
  • 公告栏
  • 友人帐
  • 从零开始搭建一个博客
  • 搭建邮件服务器
  • 本站分享
  • 文章分类
  • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 计算机简史
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • 数据库
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Node
  • Windows 使用技巧
  • 最全面的输入法教程
  • 浏览器
  • 终端软件
  • 装机
  • 笔记类软件
  • Markdown
  • 各大平台
  • 远程控制
  • RSS
  • 图片类工具
  • Office
  • 手机
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 教程简介
  • 英语学习方法论
  • 字母
  • 音标
  • 单词
  • 语法
  • 英语兔的相关视频
  • Larry 想做技术大佬的相关视频
  • 驾驶技能
  • 住房相关
  • 厨艺
  • 关于税
  • 理财
  • 睡眠
  • 皮肤
  • 口腔健康
  • 学会呼吸
  • 健身日志
  • 电影

    • 电影推荐
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 反腐
  • GFW
  • 404 内容
  • 审查与自我审查
  • 互联网
  • 2022
  • 2023
  • 2024
  • 2025
  • 关于本站
  • 关于博主
  • 网站动态
  • 公告栏
  • 友人帐
  • 从零开始搭建一个博客
  • 搭建邮件服务器
  • 本站分享
  • 文章分类
  • 文章归档
  • 计算机历史

  • 数字电路

  • 计算机组成原理

    • 网课-计算机组成原理(北大-陆俊林)

      • 概述-计算机组成原理(北大-陆俊林)
      • 第1周-计算机组成章节视频简介
      • 101-电子计算机的兴起
      • 102-冯·诺依曼结构的要点
      • 103-冯·诺依曼结构的小故事
      • 104-计算机结构的简化模型
      • 105-计算机执行指令的过程
      • 106-计算机输入和输出
      • 107-冯诺依曼结构和具体实现
      • 201-设计自己的计算机
      • 202-x86 体系结构
      • 203-x86 指令简介
      • 204-复杂的 x86 指令举例
      • 205-MIPS 体系结构
      • 206-MIPS 指令简介
      • 301-算术运算和逻辑运算
      • 302-门电路的基本原理
      • 303-寄存器的基本原理
      • 304-逻辑运算的实现
      • 305-加法和减法的实现
      • 306-加法器的优化
      • 401-乘法的运算过程
      • 402-乘法器的实现
      • 403-乘法器的优化 1
      • 404-乘法器的优化 2
      • 405-除法的运算过程
      • 406-除法器的实现
      • 407-除法器的优化
      • 501-处理器的设计步骤
      • 502-数据通路的建立
      • 503-运算指令的控制信号
      • 504-访存指令的控制信号
      • 505-分支指令的控制信号
      • 506-控制信号的集成
      • 601-流水线的基本原理
      • 602-流水线的优化
      • 603-超标量流水线
      • 604-流水线的冒险
      • 605-数据冒险的处理
      • 606-控制冒险的处理
      • 701-存储层次结构概况
      • 702-DRAM 和 SRAM
      • 703-主存的工作原理
      • 704-主存技术的发展
      • 705-高速缓存的工作原理
      • 706-高速缓存的组织结构
      • 707-存储容量的计算
      • 801-中断和异常的来源
      • 802-中断向量表的结构
      • 803-中断向量表的发展
      • 804-中断的处理过程
      • 805-内部中断分类说明
      • 806-基于中断的功能调用
      • 901-输入输出接口的基本功能
      • 902-输入输出接口的编址方式
      • 903-输入输出的控制方式
      • 904-中断控制方式
      • 905-外部中断的处理过程
      • 906-直接存储器访问方式
  • 操作系统

  • Linux

  • 计算机网络

  • Git

  • 计算机小知识

  • 数据库

  • 计算机基础
  • 计算机组成原理
  • 网课-计算机组成原理(北大-陆俊林)
2023-06-13

105-计算机执行指令的过程

# 105-计算机执行指令的过程

执行指令是计算机过程的核心, 理解了指令如何执行呢,也就把握住了计算机运行原理的关键。 在这一节,我们就一起来看这个模型机是如何执行指令的。

‍‍

现在我们已经有了这样一个模型 而且我们也知道了计算机执行一条指令的主要步骤 包括取指、译码、执行、回写。那我们就在这个模型机上尝试执行一条计算机的指令。 这里给出了一个例子,我们想执行的这条指令是 ADD R0, [6],这样的一个指令格式代表什么含义呢? 从 add,我应该能看出来这是一条加法指令。 那么这个加法应该有两个原操作数, 其中一个就是通用寄存器 R0 的内容; 另一个[6],中括号就代表是存储单元的内容。 那么,中括号里面带一个 6 说明是地址为 6 的存储单元的内容。 我们把这两个原操作数相加,就可以得到一个运算结果。 那么,在我们这种格式指令当中,默认第一个操作数即是原操作数又是目的操作数。 这个运算结果就会更新到通用寄存器 R0 中。

​

‍

现在我们就来看这条指令是如何在模型机上执行的。 假设模型机的当前状态已经有了一些初始值, 我们需要注意的是 CPU 中的 R0 所保存的值是 0000 0011,这等于 10 进制的 3。 而存储单元地址为 6 的存储单元的内容是 00000010, 相当于 10 进制的 2。 那么我们所要做的,就是把这个存储单元的数和 R0 当中的数相加,最后再放到 R0 中。 我们还看到 PC 寄存器也就是指向下一条指令地址的寄存器,保存的值是 0001,那么,他所指向的内层单元, 这里,所以这个内层单元中其实是保存了当前所需要执行的那条指令。 我就用 1010 1010 这么一个值来指代, 这仅仅是指代而已。

​

‍

‍

那我们就来看在这个模型机上是如何运行的。 指令执行的第一步,取指。 取指这一步所要做的 是控制器将指令的地址送往存储器,存储器按给定的地址读出指令内容,送回控制器。

‍

那我们来看具体的操作步骤。 首先请注意 控制器会发出控制信号将 PC 寄存器中的内容通过内部总线传送到 MAR 中。 好,现在 MAR 寄存器中也保存了 0001。

​

‍

下一步,MAR 将会把这个地址送到地址总线上, 与此同时,控制电路 会在控制总线上发出相应的控制信号,代表这次访问存储器的操作是要读数据。

​

这样存储器的 MAR 寄存器 就会收到地址总线上传送来的地址并把它保存下来。 存储器中的控制逻辑,也会受到控制总线中传送来的控制信号 得知这次仿真操作是一次读操作。

这样存储器通过地址译码器 就可以查找到对应地址 001 的存储单元的内容; 并将该存储单元的内容送到 MDR 寄存器中。

​​

‍

‍

‍

然后存储器的控制逻辑,会通过控制总线将 CPU 反馈 当前的传输已经准备好了, 同时,MDR 之中的内容也会送数据总线上。

​

‍

随后,CPU 中的控制电路检测到来自控制总线的 准备好的 ready 信号,就知道当前数据总线上已经准备好了数据。 因此 MDR 寄存器就会将当前数据总线上传送来的数值保存下来, 这就获得了我们所要取的指令。当然,仅到如此是不够的。 MDR 中的内容还不需要传送到 指令寄存器中,也就是 IR 寄存器。

​

当指令的编码已经保存到 IR 寄存器中时,取指这部分工作就已经完成了。 真的已经完成了吗?请再仔细想一想。 其实我们还需要再做一件事, 就是把 PC 寄存器 更新为下一条指令所需要访问的地址。 刚才是 0001,现在变成 0010, 也就是 10 进制的 2 。更新完以后我们才可以做下一步的工作。 那么,取指阶段到此正式完成。

‍

‍

‍

第二部是译码。 在一步控制器会分析指令的操作性质 ,并向相关的部件发出指令所需的控制信号。 当前的指令计算器 IR 中 指令编码会送到指令译码部件。

指令译码部件根据指令编码, 很快会发现这是一条加法指令。 而且,是要把 R0 和存储器中地址为 6 的单元的内容相加,并把结果存放到 R0 中。 然後,控制电路就据此产生对应的控制信号,发到相关部件中。译码阶段就到此完成了。

​

‍

第三步是执行。 控制器会从通用寄存器或者存储器中取出操作数, 并命令运算器对操作数进行指令规定的运算。 首先, 根据这条指令我们会发现,还是需要去取操作数, 其中一个操作数在存储器里中。因此, 这一步 会在 MAR 中放置要访问的存储器的地址,0110。 就是 10 进制的 6 。那么,随后的过程类似于取指阶段的操作。 MAR 将地址发到地址总线, 同时,控制电路在控制总线发出读操作的控制信号。 存储器的 MAR 控制逻辑会接收到相应的信号, 然后查找到对应的地址,这次要查找的地址是 0110,对应的内容会送到 MDR 这个存储器。 然後,控制逻辑会向 CPU 反馈当前数据已经准备好了的信号。 然後,MDR 的内容也会被放置到数据总线上, CPU 会接收数据并保存在 MDR 寄存器中。

由于这个数据要进行加法运算, 所以控制器会进一步将 MDR 中的数据传送到 ALU 的输入,目前会暂存到 Y 寄存器中。

这一个操作数现在就准备好了, 那么另一个操作数是放在 R0 中; 因此,控制器还会将 R0 中的数据 传送到 ALU 的另一个输入端,也就是 x 寄存器。

现在,两个操作数都准备好了, 在控制电路的控制下 ALU 就会进行运算 再将 x、Y 中的内容执行加法并计算出结果。 结果就是 00000101 也就是 10 进制的 5。 到此,执行阶段就完成了。

‍


第四步是回写。 也就是将运算结果写入到通用寄存器或者储存器。 现在, 运算结果还在 ALU 的输出端,也就是 Z 寄存器中, 控制电路会给出相应的控制信号将 Z 寄存器当中的内容传送到 R0 中。 R0 目前的内容是之前的原操作数, 也就是 0000 0011。随后, 会被新的结果所覆盖。 这样,我们这个加法运算的结果就已经保存到了 R0 寄存器中, 回写阶段到此完成。这条指令你就执行完毕了。 然後,CPU 就会自动执行下一条指令。 它们是和 刚才一样,先将 PC 中的内容传送到 MAR 寄存器当中, 然後 MAR 会将这个地址传送到地址总线上 依次的执行下一条指令。

‍

现在,我们通过学习计算机是如何执行指令的, 并掌握了弗洛伊曼结构的核心内容。 但是,人们是如何向计算机下达指令的呢? 计算机的运行结果又是如何让外界得知? 这是我们下一节将关注的内容。

上次更新: 2024/9/29 12:08:10
104-计算机结构的简化模型
106-计算机输入和输出

← 104-计算机结构的简化模型 106-计算机输入和输出→

最近更新
01
2025 年 2 月记
02-28
02
最全面的浏览器教程-完结撒花
02-16
03
这个工具可以轻松搞到你的浏览器账户密码!
02-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式