目录

计算机组成学习笔记(一)

摘要
计算机组成学习笔记(一)。

1 计算机基本结构

1.1 电子计算机的兴起

  1. 现代电子计算机之父——冯·诺伊曼。

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/%E5%86%AF%C2%B7%E8%AF%BA%E4%BC%8A%E6%9B%BC.png
    冯·诺伊曼
  2. 二战的弹道计算,人力已经不能满足需求,人们转向更为强大的计算设备。

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/%E5%AF%B9%E8%AE%A1%E7%AE%97%E8%83%BD%E5%8A%9B%E7%9A%84%E9%9C%80%E6%B1%82.png
    对计算能力的需求
  3. ENIAC出现,世界上第一台通用电子计算机。

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/ENIAC1.png
    ENIAC1
    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/ENIAC2.png
    ENIAC2
  4. 世界上第一台电子计算机是ABC。

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/ABC.png
    ABC
  5. 冯·诺伊曼对ENIAC提出改进想法,但ENIAC已经开始制造,不能大规模改动,人们开始设计下一款改进版计算机。

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/%E5%86%AF%C2%B7%E8%AF%BA%E4%BC%8A%E6%9B%BC%E7%9A%84%E5%88%86%E6%9E%90.png
    冯·诺伊曼的分析
  6. 冯·诺伊曼关于EDVAC的报告,独吞所有功劳。

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/%E5%86%AF%C2%B7%E8%AF%BA%E4%BC%8A%E6%9B%BC%E7%9A%84%E6%8A%A5%E5%91%8A.png
    冯·诺伊曼的报告
  7. EDVAC。

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/EDVAC.png
    EDVAC
  8. EDSAC是世界上第一台实用的冯·诺伊曼结构计算机。

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/EDSAC.png
    EDSAC
  9. ENIAC创始人单干,制造出UNIVAC,UNIVAC在选票计算中一夜成名。

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/UNIVAC1.png
    UNIVAC1
    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/UNIVAC2.png
    UNIVAC2
  10. UNIVAC出名后,计算机的商业价值被发现,大量公司进入计算机领域。

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/%E5%95%86%E7%94%A8%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%97%B6%E4%BB%A3.png
    商用计算机时代
  11. 一些著名计算机。

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/IBM%20S360.png
    IBM S/360
    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/CDC6600.png
    CDC6600
    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/PDP-8.png
    PDP-8
    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/Altair%208800.png
    Altair 8800
    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/Apple%20II.png
    Apple II
    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.1%E7%94%B5%E5%AD%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%85%B4%E8%B5%B7/IBM%20PC%205150.png
    IBM PC 5150

1.2 冯·诺依曼结构的要点

/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.2%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E8%A6%81%E7%82%B9/EDVAC%E6%8A%A5%E5%91%8A%E8%8D%89%E6%A1%88.png
  1. 重要思想:
    1. 控制计算机的程序,应该存放在存储设备中。
    2. 使用二进制。
  2. 五个部分:
    1. 运算器
    2. 控制器
    3. 存储器
    4. 输入设备
    5. 输出设备

/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.2%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E8%A6%81%E7%82%B9/Intel4004.png
Intel4004
/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.2%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E8%A6%81%E7%82%B9/4004%E8%8A%AF%E7%89%87%E7%BB%841.png
4004芯片组1
/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.2%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E8%A6%81%E7%82%B9/4004%E8%8A%AF%E7%89%87%E7%BB%842.png
4004芯片组2
  1. 冯·诺依曼结构的要点

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.2%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E8%A6%81%E7%82%B9/%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E8%A6%81%E7%82%B91.png /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.2%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E8%A6%81%E7%82%B9/%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E8%A6%81%E7%82%B92.png
  2. 冯·诺依曼结构的核心

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.2%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E8%A6%81%E7%82%B9/%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E6%A0%B8%E5%BF%83.png
  3. CPU与主存

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.2%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E8%A6%81%E7%82%B9/CPU%E4%B8%8E%E4%B8%BB%E5%AD%98.png
  4. 主存的组织形式

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.2%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E8%A6%81%E7%82%B9/%E4%B8%BB%E5%AD%98%E7%9A%84%E7%BB%84%E7%BB%87%E5%BD%A2%E5%BC%8F.png
  5. 冯·诺依曼计算机类比

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.2%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E8%A6%81%E7%82%B9/%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B1%BB%E6%AF%94.png
    1. ENIAC的方式,是指存储数据在内存,单独向CPU发送指令,非常符合直觉。
    2. 但是CPU处理的速度太快,发送指令相对太慢,CPU大部分时间都在等待。
    3. 因此,需要把指令与数据,不加区分的都放在主存,CPU自己调度执行。

  6. 冯·诺依曼结构的要点

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.2%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E8%A6%81%E7%82%B9/%E5%86%AF%C2%B7%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E7%9A%84%E8%A6%81%E7%82%B93.png

1.3 计算机运行过程的类比

/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.3%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BF%90%E8%A1%8C%E8%BF%87%E7%A8%8B%E7%9A%84%E7%B1%BB%E6%AF%94/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BF%90%E8%A1%8C%E8%BF%87%E7%A8%8B%E7%9A%84%E7%B1%BB%E6%AF%94.png
计算机运行过程的类比
/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.3%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BF%90%E8%A1%8C%E8%BF%87%E7%A8%8B%E7%9A%84%E7%B1%BB%E6%AF%94/CPU%E6%89%A7%E8%A1%8C%E6%8C%87%E4%BB%A4%E7%9A%84%E6%AD%A5%E9%AA%A4.png
CPU执行指令的步骤
  1. 取指

    1. CPU向主存发出请求,需要第一格的物品。

    2. 主存把第一格物品交给CPU。

    3. CPU发现这个东西是任务单(指令),就把它放在用于存放任务单(指令)的位置。

    4. 取回后,更新下一次取的物品的位置,即第一格变成第二格。

      /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.3%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BF%90%E8%A1%8C%E8%BF%87%E7%A8%8B%E7%9A%84%E7%B1%BB%E6%AF%94/%E5%8F%96%E6%8C%87.png
      取指
  2. 译码:把指令拆分为几个可执行的步骤。

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.3%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BF%90%E8%A1%8C%E8%BF%87%E7%A8%8B%E7%9A%84%E7%B1%BB%E6%AF%94/%E8%AF%91%E7%A0%81.png
    译码
  3. 执行

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.3%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BF%90%E8%A1%8C%E8%BF%87%E7%A8%8B%E7%9A%84%E7%B1%BB%E6%AF%94/%E6%89%A7%E8%A1%8C1.png
    执行1
    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.3%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BF%90%E8%A1%8C%E8%BF%87%E7%A8%8B%E7%9A%84%E7%B1%BB%E6%AF%94/%E6%89%A7%E8%A1%8C2.png
    执行2
    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.3%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BF%90%E8%A1%8C%E8%BF%87%E7%A8%8B%E7%9A%84%E7%B1%BB%E6%AF%94/%E6%89%A7%E8%A1%8C3.png
    执行3
  4. 回写

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.3%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BF%90%E8%A1%8C%E8%BF%87%E7%A8%8B%E7%9A%84%E7%B1%BB%E6%AF%94/%E5%9B%9E%E5%86%99.png
    回写
  5. 计算机执行指令的过程

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.3%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BF%90%E8%A1%8C%E8%BF%87%E7%A8%8B%E7%9A%84%E7%B1%BB%E6%AF%94/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%89%A7%E8%A1%8C%E6%8C%87%E4%BB%A4%E7%9A%84%E8%BF%87%E7%A8%8B.png
    计算机执行指令的过程

1.4 计算机结构的简化模型

  1. 模型机

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.4%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%93%E6%9E%84%E7%9A%84%E7%AE%80%E5%8C%96%E6%A8%A1%E5%9E%8B/%E6%A8%A1%E5%9E%8B%E6%9C%BA.png
    模型机
  2. 存储器

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.4%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%93%E6%9E%84%E7%9A%84%E7%AE%80%E5%8C%96%E6%A8%A1%E5%9E%8B/%E5%AD%98%E5%82%A8%E5%99%A8.png
    存储器
    1. 逻辑控制:读、写、完成等控制信号。
    2. 地址译码器.
    3. 地址寄存器MAR(Memory Address Register):存放CPU正在读出或即将写入写的存储单元的地址。
    4. 数据寄存器MDR(Memory Data Register):存放CPU正在读出或即将写入写的存储单元的数据。

  3. 控制器

    1. 控制器结构

      /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.4%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%93%E6%9E%84%E7%9A%84%E7%AE%80%E5%8C%96%E6%A8%A1%E5%9E%8B/%E6%8E%A7%E5%88%B6%E5%99%A8.png
      控制器
    2. 控制器基本组成

      /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.4%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%93%E6%9E%84%E7%9A%84%E7%AE%80%E5%8C%96%E6%A8%A1%E5%9E%8B/%E6%8E%A7%E5%88%B6%E5%99%A8%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%BB%84%E6%88%901.png
      控制器的基本组成1
      /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.4%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%93%E6%9E%84%E7%9A%84%E7%AE%80%E5%8C%96%E6%A8%A1%E5%9E%8B/%E6%8E%A7%E5%88%B6%E5%99%A8%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%BB%84%E6%88%902.png
      控制器的基本组成2
      1. 指令寄存器(Instruction Register):存放正在执行或即将执行的指令。
      2. 程序计数器(Program Counter):下一条指令的存储单元地址,具有自动增量计数的功能。
      3. 地址寄存器MAR(Memory Address Register):存放CPU正在读出或即将写入写的存储单元的地址。
      4. 数据寄存器MDR(Memory Data Register):存放CPU正在读出或即将写入写的存储单元的数据。
      5. 指令译码:对指令寄存器(Instruction Register)中的指令进行译码,确定指令寄存器(Instruction Register)中存放的是哪一条指令。
      6. 控制电路:产生控制信号,在时序脉冲的同步下,控制各个部件的动作。

  4. 运算器

    1. 运算器结构

      /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.4%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%93%E6%9E%84%E7%9A%84%E7%AE%80%E5%8C%96%E6%A8%A1%E5%9E%8B/%E8%BF%90%E7%AE%97%E5%99%A8.png
      运算器
    2. 运算器基本组成

      /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.4%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%93%E6%9E%84%E7%9A%84%E7%AE%80%E5%8C%96%E6%A8%A1%E5%9E%8B/%E8%BF%90%E7%AE%97%E5%99%A8%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%BB%84%E6%88%90.png
      运算器的基本组成
      1. 运算逻辑单元(ALU):完成算术运算与逻辑运算。
      2. 数据暂存器:ALU取数据与存储结果的部分。
      3. 标志寄存器(F):存放运算结果状态。
      4. 通用寄存器:临时存放数据。

  5. CPU内部总线:在CPU内部各个部件之间,传输数据。

    /images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.4%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%93%E6%9E%84%E7%9A%84%E7%AE%80%E5%8C%96%E6%A8%A1%E5%9E%8B/CPU%E5%86%85%E9%83%A8%E6%80%BB%E7%BA%BF.png
    CPU内部总线

1.5 计算机执行指令的过程

/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.5%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%89%A7%E8%A1%8C%E6%8C%87%E4%BB%A4%E7%9A%84%E8%BF%87%E7%A8%8B/%E6%89%A7%E8%A1%8C%E6%8C%87%E4%BB%A4%E7%9A%84%E7%A4%BA%E4%BE%8B.png
执行指令的示例
/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.5%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%89%A7%E8%A1%8C%E6%8C%87%E4%BB%A4%E7%9A%84%E8%BF%87%E7%A8%8B/%E6%A8%A1%E5%9E%8B%E6%9C%BA%E5%BD%93%E5%89%8D%E7%8A%B6%E6%80%81.png
模型机当前状态
  1. 取指:
    1. 控制器发出控制信号,将PC中的指令地址,通过内部总线,送到MAR中。
    2. MAR把数据发送到地址总线上。同时,控制电路对控制总线发出信号,表示这一次访问存储器的操作为读数据。
    3. 存储器的MAR,收到CPU的MAR发到地址总线的数据,发给地址译码器。
    4. 存储器的控制逻辑,收到控制总线上的读信号。
    5. 存储器通过地址译码器,找到对应地址的存储单元所存储的数据。
    6. 数据被送到存储器的MDR中保存。
    7. 存储器的控制逻辑,通过控制总线,向CPU发出准备好的信号。
    8. 同时,存储器的MDR中的数据,被发送到数据总线上。
    9. CPU收到控制总线上发过来的准备好的信号,就知道数据总线上,已经有了需要的数据。
    10. CPU的MDR,把数据总线上的数据保存起来。
    11. MDR中的指令,被发送到IR中。
    12. PC中的指令地址加1。
  2. 译码:
    1. IR把指令数据,发给指令译码部件。
    2. 得出指令内容。此处为加法,把R0寄存器中的数据,与地址为6的数据相加。
    3. 控制电路发出信号。
  3. 执行:
    1. 地址6发送到CPU的MAR中。
    2. 类似于取指,取到对应数据。
    3. 把两个需要相加的数,存入ALU的输入寄存器中。
    4. ALU进行计算。
  4. 回写:
    1. 控制电路发出控制信号,ALU的输入寄存器中的结果,写入R0寄存器。

1.6 计算机的输入与输出

/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.6%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E8%BE%93%E5%85%A5%E4%B8%8E%E8%BE%93%E5%87%BA/%E8%BE%93%E5%85%A5%E4%B8%8E%E8%BE%93%E5%87%BA.png
输入与输出
/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.6%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E8%BE%93%E5%85%A5%E4%B8%8E%E8%BE%93%E5%87%BA/%E7%BB%99%E6%A8%A1%E5%9E%8B%E6%9C%BA%E5%8A%A0%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA.png
给模型机加输入输出
/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.6%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E8%BE%93%E5%85%A5%E4%B8%8E%E8%BE%93%E5%87%BA/%E8%AF%BB%E5%8F%96%E8%BE%93%E5%85%A5.png
读取输入
/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.6%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E8%BE%93%E5%85%A5%E4%B8%8E%E8%BE%93%E5%87%BA/%E5%86%99%E5%87%BA%E8%BE%93%E5%87%BA.png
写出输出

1.7 冯诺依曼结构和具体实现

/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.7%E5%86%AF%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E5%92%8C%E5%85%B7%E4%BD%93%E5%AE%9E%E7%8E%B0/%E5%86%AF%C2%B7%E8%AF%BA%E4%BC%8A%E6%9B%BC%E7%BB%93%E6%9E%84%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E7%8E%B0.png
冯·诺伊曼结构原理与实现
  • CPU通过北桥,再到南桥,访问到BIOS里存储的指令,进行基本操作。
/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.7%E5%86%AF%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E5%92%8C%E5%85%B7%E4%BD%93%E5%AE%9E%E7%8E%B0/%E5%8D%97%E5%8C%97%E6%A1%A5%E6%9E%B6%E6%9E%84%E6%BC%94%E5%8F%981.png
南北桥架构演变1
  • 主存频繁访问,北桥与主存之间的传输压力很大,成为性能瓶颈。
/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.7%E5%86%AF%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E5%92%8C%E5%85%B7%E4%BD%93%E5%AE%9E%E7%8E%B0/%E5%8D%97%E5%8C%97%E6%A1%A5%E6%9E%B6%E6%9E%84%E6%BC%94%E5%8F%982.png
南北桥架构演变2
  • 因此,北桥中的主存控制器,移入CPU中,CPU与主存直接通信。但是,显示需求高时,通过北桥连接显卡性能依旧很低。
/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.7%E5%86%AF%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E5%92%8C%E5%85%B7%E4%BD%93%E5%AE%9E%E7%8E%B0/%E5%8D%97%E5%8C%97%E6%A1%A5%E6%9E%B6%E6%9E%84%E6%BC%94%E5%8F%983.png
南北桥架构演变3
  • 于是乎,又把北桥里连接显卡的PCIe控制器,再移入CPU中,北桥里只剩一些无足轻重的部分,可以直接移除,北桥退出历史舞台。CPU与主存、显卡、南桥(PCH)直接相连。
/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.7%E5%86%AF%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E5%92%8C%E5%85%B7%E4%BD%93%E5%AE%9E%E7%8E%B0/%E7%B3%BB%E7%BB%9F%E8%8A%AF%E7%89%87.png
系统芯片
  • 再把南桥里的部分,也移入CPU中,系统芯片诞生。
/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.7%E5%86%AF%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E5%92%8C%E5%85%B7%E4%BD%93%E5%AE%9E%E7%8E%B0/%E6%91%A9%E5%B0%94%E5%AE%9A%E5%BE%8B.png
摩尔定律
/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.7%E5%86%AF%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E5%92%8C%E5%85%B7%E4%BD%93%E5%AE%9E%E7%8E%B0/%E6%91%A9%E5%B0%94%E5%AE%9A%E5%BE%8B%E6%BC%94%E5%8F%98.png
摩尔定律演变
/images/Computer_Organization/1%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84/1.7%E5%86%AF%E8%AF%BA%E4%BE%9D%E6%9B%BC%E7%BB%93%E6%9E%84%E5%92%8C%E5%85%B7%E4%BD%93%E5%AE%9E%E7%8E%B0/%E6%99%B6%E4%BD%93%E7%AE%A1%E5%A2%9E%E9%95%BF.png
晶体管增长

2 指令系统体系结构

2.1 设计自己的计算机

/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.1%E8%AE%BE%E8%AE%A1%E8%87%AA%E5%B7%B1%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA/%E7%AE%80%E5%8D%95%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F.png
简单的计算机指令系统
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.1%E8%AE%BE%E8%AE%A1%E8%87%AA%E5%B7%B1%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA/%E6%8C%87%E4%BB%A4%E7%9A%84%E6%A0%BC%E5%BC%8F.png
指令的格式
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.1%E8%AE%BE%E8%AE%A1%E8%87%AA%E5%B7%B1%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA/%E8%BF%90%E7%AE%97%E4%BB%BB%E5%8A%A1%E7%A4%BA%E4%BE%8B.png
运算任务示例
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.1%E8%AE%BE%E8%AE%A1%E8%87%AA%E5%B7%B1%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA/%E8%BF%90%E7%AE%97%E4%BB%BB%E5%8A%A1%E5%AF%B9%E5%BA%94%E7%9A%84%E7%A8%8B%E5%BA%8F.png
运算任务对应的程序
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.1%E8%AE%BE%E8%AE%A1%E8%87%AA%E5%B7%B1%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%AD%98%E5%82%A8%E5%99%A8%E7%9A%84%E6%9C%BA%E5%99%A8%E8%AF%AD%E8%A8%80.png
存储器的机器语言
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.1%E8%AE%BE%E8%AE%A1%E8%87%AA%E5%B7%B1%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA/%E6%A8%A1%E6%8B%9F%E8%BF%90%E8%A1%8C.png
模拟运行

2.2 x86体系结构

/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%841.png
x86体系结构1
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/8086.png
8086
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/8086%E7%9A%84%E5%AF%84%E5%AD%98%E5%99%A8%E6%A8%A1%E5%9E%8B.png
8086的寄存器模型
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/8086%E7%9A%84%E9%80%9A%E7%94%A8%E5%AF%84%E5%AD%98%E5%99%A8.png
8086的通用寄存器
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/8086%E7%9A%84%E6%A0%87%E5%BF%97%E5%AF%84%E5%AD%98%E5%99%A81.png
8086的标志寄存器1
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/8086%E7%9A%84%E6%A0%87%E5%BF%97%E5%AF%84%E5%AD%98%E5%99%A82.png
8086的标志寄存器2
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/8086%E7%9A%84%E6%8C%87%E4%BB%A4%E6%8C%87%E9%92%88%E5%AF%84%E5%AD%98%E5%99%A8.png
8086的指令指针寄存器
  • 8086只有16位,寻址能力不能满足需求,所以通过4个段寄存器扩展到20位。
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/8086%E7%9A%84%E6%AE%B5%E5%AF%84%E5%AD%98%E5%99%A8.png
8086的段寄存器
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/8086%E7%89%A9%E7%90%86%E5%9C%B0%E5%9D%80%E7%9A%84%E7%94%9F%E6%88%901.png
8086物理地址的生成1
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/8086%E7%89%A9%E7%90%86%E5%9C%B0%E5%9D%80%E7%9A%84%E7%94%9F%E6%88%902.png
8086物理地址的生成2
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%842.png
x86体系结构2
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/80386.png
80386
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/IA-32%E7%9A%84%E5%AF%84%E5%AD%98%E5%99%A8%E6%A8%A1%E5%9E%8B.png
IA-32的寄存器模型
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%843.png
x86体系结构3
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.2x86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/x86-64%E7%9A%84%E5%AF%84%E5%AD%98%E5%99%A8%E6%A8%A1%E5%9E%8B.png
x86-64的寄存器模型

2.3 x86指令简介

/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E6%8C%87%E4%BB%A4%E7%9A%84%E4%B8%BB%E8%A6%81%E7%B1%BB%E5%88%AB.png
指令的主要类别
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E6%8C%87%E4%BB%A4%E7%9A%84%E8%BF%90%E8%A1%8C%E7%BB%93%E6%9E%9C.png
指令的运行结果
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E7%A8%8B%E5%BA%8F%E7%A4%BA%E4%BE%8B1.png
程序示例

指令分类举例:

  1. 传送类指令

    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E4%BC%A0%E9%80%81%E6%8C%87%E4%BB%A4.png
    传送指令
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/MOV%E6%8C%87%E4%BB%A4.png
    MOV指令
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/MOV%E6%8C%87%E4%BB%A4%E5%AF%BB%E5%9D%80%E6%96%B9%E5%BC%8F.png
    MOV指令寻址方式
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/MOV%E6%8C%87%E4%BB%A4%E7%BC%96%E7%A0%81%E7%A4%BA%E4%BE%8B.png
    MOV指令编码示例
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E7%A8%8B%E5%BA%8F%E7%A4%BA%E4%BE%8B2.png
    程序示例2
  2. 运算类指令

    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E9%80%BB%E8%BE%91%E8%BF%90%E7%AE%97%E6%8C%87%E4%BB%A4%E4%B8%8E%E7%A7%BB%E4%BD%8D%E6%8C%87%E4%BB%A4.png
    逻辑运算指令与移位指令
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E7%AE%97%E6%95%B0%E8%BF%90%E7%AE%97%E6%8C%87%E4%BB%A4.png
    算数运算指令
    1. ADC指令,会把标志寄存器(F)中的CF标志位的值,也送到ALU中进行运算,之前计算的结果,会影响现在的计算结果。
    2. 同样,ADC指令的计算,也会影响标志寄存器(F)中的CF标志位的值。
    3. ADD指令与ADC指令,都会根据计算结果,改变标志寄存器(F)中的CF标志位的值。
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E7%A8%8B%E5%BA%8F%E7%A4%BA%E4%BE%8B3.png
    程序示例3
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E7%A8%8B%E5%BA%8F%E7%A4%BA%E4%BE%8B4.png
    程序示例4
  3. 转移类指令

    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E8%BD%AC%E7%A7%BB%E6%8C%87%E4%BB%A4.png
    转移指令
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E7%A8%8B%E5%BA%8F%E7%A4%BA%E4%BE%8B5.png
    程序示例5
    1. DEC指令,将CL寄存器中的值减1。
    2. JNZ(jump if not zero)为条件转移指令,检查上一条指令的结果是否为0,即检查标志寄存器(F)中的ZF标志位是否为0。
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E6%9D%A1%E4%BB%B6%E8%BD%AC%E7%A7%BB%E6%8C%87%E4%BB%A41.png
    条件转移指令1
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E6%9D%A1%E4%BB%B6%E8%BD%AC%E7%A7%BB%E6%8C%87%E4%BB%A42.png
    条件转移指令2
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E7%A8%8B%E5%BA%8F%E7%A4%BA%E4%BE%8B6.png
    程序示例6
  4. 控制类指令

    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E6%8E%A7%E5%88%B6%E7%B1%BB%E6%8C%87%E4%BB%A4.png
    控制类指令
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.3x86%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E7%A8%8B%E5%BA%8F%E7%A4%BA%E4%BE%8B7.png
    程序示例7

2.4 复杂的x86指令举例

/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.4%E5%A4%8D%E6%9D%82%E7%9A%84x86%E6%8C%87%E4%BB%A4%E4%B8%BE%E4%BE%8B/%E4%B8%B2%E6%93%8D%E4%BD%9C%E6%8C%87%E4%BB%A41.png
串操作指令1
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.4%E5%A4%8D%E6%9D%82%E7%9A%84x86%E6%8C%87%E4%BB%A4%E4%B8%BE%E4%BE%8B/%E4%B8%B2%E6%93%8D%E4%BD%9C%E6%8C%87%E4%BB%A42.png
串操作指令2
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.4%E5%A4%8D%E6%9D%82%E7%9A%84x86%E6%8C%87%E4%BB%A4%E4%B8%BE%E4%BE%8B/%E4%B8%B2%E4%BC%A0%E9%80%81%E6%8C%87%E4%BB%A4.png
串传送指令
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.4%E5%A4%8D%E6%9D%82%E7%9A%84x86%E6%8C%87%E4%BB%A4%E4%B8%BE%E4%BE%8B/%E4%B8%B2%E4%BC%A0%E9%80%81%E6%8C%87%E4%BB%A4%E7%9A%84%E7%89%B9%E6%80%A7.png
串传送指令的特性
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.4%E5%A4%8D%E6%9D%82%E7%9A%84x86%E6%8C%87%E4%BB%A4%E4%B8%BE%E4%BE%8B/MOVSB%E6%8C%87%E4%BB%A4%E7%A4%BA%E4%BE%8B.png
MOVSB指令示例
  1. 假设事先已配置好了数据段寄存器DS为1000H。
  2. 这个程序的前两条指令实际是将数据段寄存器的内容传送到 附加段寄存器当中。只不过段寄存器之间不能直接传送,所以借用了AX。
  3. 然后在SI寄存器当中保存源串的偏移地址, 在DI寄存器当中放入目的串的偏移地址, 这样DS和SI这组寄存器就指向了源串。
  4. 而ES和DI这组寄存器就指向了目的串。
  5. 下一条指令CLD,这是确定传送的方向。
  6. 然后在CX寄存器当中存入3,然后才是这条串传送指令。
  7. 前面加上了重复前缀,这样的配置就相当于 连续执行了三次这条串传送指令。
  8. 传送即先读再写操作。
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.4%E5%A4%8D%E6%9D%82%E7%9A%84x86%E6%8C%87%E4%BB%A4%E4%B8%BE%E4%BE%8B/%E4%B8%B2%E4%BC%A0%E9%80%81%E6%96%B9%E5%90%91.png
串传送方向
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.4%E5%A4%8D%E6%9D%82%E7%9A%84x86%E6%8C%87%E4%BB%A4%E4%B8%BE%E4%BE%8B/%E6%96%B9%E5%90%91%E6%A0%87%E5%BF%97%E7%9A%84%E4%BD%9C%E7%94%A8.png
方向标志的作用
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.4%E5%A4%8D%E6%9D%82%E7%9A%84x86%E6%8C%87%E4%BB%A4%E4%B8%BE%E4%BE%8B/%E6%9C%80%E9%95%BF%E7%9A%84%E6%8C%87%E4%BB%A4.png
最长的指令

2.5 MIPS体系结构

  • 复杂指令系统计算机:CISC(Complex Instruction Set Computer)—— 代表:x86。
  • 精简指令系统计算机:RISC(Reduced Instruction Set Computer)—— 代表:MIPS。
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.5MIPS%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/MIPS%E8%AE%BE%E8%AE%A1%E8%80%85.png
MIPS设计者
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.5MIPS%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/MIPS%E5%85%AC%E5%8F%B8.png
MIPS公司
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.5MIPS%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/MIPS%E6%8C%87%E4%BB%A4%E7%9A%84%E5%8F%91%E5%B1%95.png
MIPS指令的发展
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.5MIPS%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/MIPS%E8%AE%BE%E8%AE%A1%E6%8C%87%E5%AF%BC%E6%80%9D%E6%83%B3.png
MIPS设计指导思想
  • 流水线不会互锁的微处理器。
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.5MIPS%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/MIPS%E6%8C%87%E4%BB%A4%E7%9A%84%E4%B8%BB%E8%A6%81%E7%89%B9%E7%82%B9.png
MIPS指令的主要特点
  1. MIPS固定了指令的长度,都是32个比特, 也就说MIPS中的一个word,我们要注意这和x86中一个word是16位是不同的。 固定的指令长度,大大简化了CPU从存储器中取指令的工作。 不用像x86 CPU那样需要判断每条指令的长度。
  2. MIPS采用了非常简单的寻址模式,相比于x86提供的复杂多样的寻址模式, 虽然给编程带来了不变,但是大大简化了CPU访问存储器的控制逻辑。
  3. MIPS指令的数量比较少,每条指令的工作也很简单, 基本上一条指令只完成一个操作,不像x86的指令,一条指令往往完成丰富的功能, 这样可以简化指令的执行过程。不但简化了CPU的控制逻辑,而且可以方便的实现各种让指令并行执行的技术,从而提高CPU的性能。
  4. 在MIPS指令系统中只允许LOADSTORE这两种指令访问存储器, 而不支持x86指令中这些让算术指令访问存储器的操作。 因为访存是一个相对复杂的工作, 这种限制就可以让运算指令的实现变得非常的简单.
  5. 但是我们要注意,MIPS 的这些特点让直接使用MIPS指令进行编程变得非常的困难, 因此,想要有高效率的MIPS程序, 必须要有优秀的编译器的支持。
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.5MIPS%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/MIPS%E8%BF%90%E7%AE%97%E6%8C%87%E4%BB%A4.png
MIPS运算指令
  • 这些指令的操作数都不可以是存储器操作数。 要访问存储器,就必须使用专门的访存指令。
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.5MIPS%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/MIPS%E8%AE%BF%E5%AD%98%E6%8C%87%E4%BB%A4.png
MIPS访存指令
  1. MIPS的寄存器编号用$符进行标记。

  2. 首先要用LOAD指令 将19号寄存器对应的地址加上偏移量12,因为MIPS当中一个字是32位,所以第三个元素与首地址之间的偏移是12, 将存储器中的这个字装入到8号寄存器中, 这就相当于将数组A中的第三个元素赋给了一个临时变量。

  3. 第二句是一个加法指令,将8号寄存器与18号寄存器相加, 并将结果存放在8号寄存器。这就

    相当于将数组A的第三个元素与变量H相加,还存在这个临时变量中。

  4. 第三条指令是将8号寄存器中的数,也就是运算的结果存到以19号寄存器为首地址,偏移量为40的内存单元, 这就是数组A的第十个元素的位置。

/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.5MIPS%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/MIPS%E9%80%9A%E7%94%A8%E5%AF%84%E5%AD%98%E5%99%A8.png
MIPS通用寄存器
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.5MIPS%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/%E9%80%9A%E7%94%A8%E5%AF%84%E5%AD%98%E5%99%A8%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B.png
通用寄存器使用示例

2.6 MIPS指令简介

/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/MIPS%E6%8C%87%E4%BB%A4.png
MIPS指令
  • 相比于X86指令所提供的动辄上千页的指令说明,MIPS指令 只用两页即可。
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/MIPS%E6%8C%87%E4%BB%A4%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%A0%BC%E5%BC%8F.png
MIPS指令的基本格式
/images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/MIPS%E6%8C%87%E4%BB%A4%E5%88%86%E7%B1%BB.png
MIPS指令分类

MIPS指令:

  1. R型运算指令:

    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/R%E5%9E%8B%E6%8C%87%E4%BB%A41.png
    R型指令1
    1. R型指令总共包含六个域,其中最高位的opcode域是六个比特,最低位的funct域也是六个比特,中间的四个域,均为五个比特。
    2. 对于所有的R型指令,opcode域的值,均为零, 但这并不是说明R型指令只有一种,它还需要用funct域来更为精确的指定指令的类型。
    3. 所以说, 对于R型指令,实际上一共有12个比特操作码。
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/R%E5%9E%8B%E6%8C%87%E4%BB%A42.png
    R型指令2
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/R%E5%9E%8B%E6%8C%87%E4%BB%A43.png
    R型指令3
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/R%E5%9E%8B%E6%8C%87%E4%BB%A4%E7%A4%BA%E4%BE%8B.png
    R型指令示例
  2. I型运算访存指令:

    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/I%E5%9E%8B%E6%8C%87%E4%BB%A41.png
    I型指令1
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/I%E5%9E%8B%E6%8C%87%E4%BB%A42.png
    I型指令2
    1. I型指令的第一个域,也是opcode域,用于指定指令的类型,但它没有funct域,所以不同的I型指令,及opcode域是不一样的。
    2. I型指令与R型指令不同,它只有两个寄存器数域。
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/I%E5%9E%8B%E6%8C%87%E4%BB%A43.png
    I型指令3
    1. 剩下的16位被整合成了一个完整的域,可以存放16位的立即数, 可以表示2的十六次方个不同的数值。
    2. 对一般的访存指令,我们需要 用一个寄存器,加上一个立即数来指示一个内存单元,那么这个立即数就是访存地址的偏移量,16位的立即数,可以访问正负32K的空间,对于一般的访存指令来说,就可以满足了。
    3. 而对于运算指令,虽然无法满足全部的需求,但是大多数情况下, 16位也可以使用了。
    4. 在这一点上, 就可以体现出x86这样的CISC指令系统的优势,对于x86指令来说, 如果它想使用更大宽度的立即数,它可以很容易的扩展,因为它的指令本来就没有限制长度,但是MIPS指令就不行。它的指令总长度就是32位的,再加上各个寄存器位域的使用, 所以I型指令最多只能使用十六位的立即数。
    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/I%E5%9E%8B%E6%8C%87%E4%BB%A4%E7%A4%BA%E4%BE%8B.png
    I型指令示例
    1. 对于加法,如果我们想让其中的 源操作数是一个立即数的话,就可以用addi这个指令, 注意它和add指令是不一样的。add指令的操作数必须都是寄存器。
    2. addiadd虽然只有一个字母的差别,但是他们指令格式是完全不一样的。
  3. 分支指令:

    /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E5%88%86%E6%94%AF%E6%8C%87%E4%BB%A4%E7%9A%84%E5%88%86%E7%B1%BB.png
    分支指令的分类
    • 分支指令是用于改变控制流的指令,其实就相当于x86当中的转移指令。


    1. 条件分支指令

      /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E6%9D%A1%E4%BB%B6%E5%88%86%E6%94%AF%E6%8C%87%E4%BB%A4.png
      条件分支指令
      1. 以beq指令为例,它共有三个操作数,前两个是寄存器操作数, 第三个操作数是存储器地址,也就说一个立即数,CPU会判断第一个寄存器当中的数,和第二个寄存器当中的数是否相等。如果相等就跳转到 LE所指向的寄存器单元取出下一条指令,否则, 顺序执行deq之后的那条指令。
      2. 需要注意,这里和X86的条件转移指令有很大的不同。MIPS没有标志寄存器,它就在一条指令当中即进行了比较,又完成了转移。我们还记得MIPS的全称,就是为了减少指令流水线的互锁,也就说要尽量避免不同指令之间相互的影响。而标志位这件事,很明显就是前一条指令运行的结果,可能会对后面的某一条指令产生影响,这是MIPS指令设计时 要尽量避免的。所以BEQ指令也很好的体现了MIPS的这一设计理念。
      /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E6%9D%A1%E4%BB%B6%E5%88%86%E6%94%AF%E6%8C%87%E4%BB%A4%E7%A4%BA%E4%BE%8B.png
      条件分支指令示例
      /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E6%9D%A1%E4%BB%B6%E5%88%86%E6%94%AF%E6%8C%87%E4%BB%A4%E7%9A%84%E7%9B%AE%E6%A0%87%E5%9C%B0%E5%9D%80%E8%8C%83%E5%9B%B4.png
      条件分支指令的目标地址范围
      1. 从条件分支指令的格式可以看出,目标地址只能使用十六位的位移量, 这是一个很大的局限,但是我们还得考虑如何充分发挥这十六位的作用。

      2. 如果以当前的PC寄存器 为基准,在MIPS中,指向下一条指令地址的寄存器称为PC,类似于x86中的IP寄存器。这个寄存器,是指向32位寄存地址的。 如果以它为基准,十六位位移量可以表示出,当前指令前后2的15次方字节这么一个范围。

      3. 但是我们要注意一点,MIPS的指令长度固定位32个比特,因此每条指令的位置, 一定会在四个字节对齐的地方,这样地址,最低两位肯定为0。

      4. 所以我们实际上可以用十六位的位移量去指示每四个字节为一个单位的地址。 这样就可以把目标地址的范围扩大四倍,可以达到前后128kB。

      5. 在这样的条件下,目标地址应该这么计算:

        1. 当分支条件不成立时,下一条指令的地址就等于当前的pc+4。
        2. 如果分支条件成立,那下一条指令的地址就等于已经加了4的pc, 再加上这个立即数乘以四。

    2. 非条件分支指令(J型)

      /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E9%9D%9E%E6%9D%A1%E4%BB%B6%E5%88%86%E6%94%AF%E6%8C%87%E4%BB%A4%EF%BC%88J%E5%9E%8B%EF%BC%89.png
      非条件分支指令(J型)
      1. 相比于条件分支指令,有两个寄存器域用于比较条件,那如果我们不需要判断条件,我们就可以想办法扩大目标地址的范围。
      2. 想情况下是直接使用32位的地址, 但还是因为MIPS的指令长度固定为32位,而每条指令至少需要有opcode域,指示它指令类型。 这就占用了6个bit。那我们把剩下的26个bit全都用于目标地址,这就是J型指令。
      3. 在考虑到MIPS指令是四字节对齐的这个情况,对于这一行指令,下一条指令的地址的计算方法可以是将当前的pc加四之后, 取最高的四位,再加上J型指令编码中的26位, 然后在末尾填上两个零,虽然目标地址的范围还不能达到整个 4G的空间,但比之前的条件分支指令已经扩大了很多。
    3. 两种分支指令示例

      /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E4%B8%A4%E7%A7%8D%E5%88%86%E6%94%AF%E6%8C%87%E4%BB%A4%E7%A4%BA%E4%BE%8B.png
      两种分支指令示例
    4. 非条件分支指令(R型)

      /images/Computer_Organization/2%E6%8C%87%E4%BB%A4%E7%B3%BB%E7%BB%9F%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/2.6MIPS%E6%8C%87%E4%BB%A4%E7%AE%80%E4%BB%8B/%E9%9D%9E%E6%9D%A1%E4%BB%B6%E5%88%86%E6%94%AF%E6%8C%87%E4%BB%A4%EF%BC%88R%E5%9E%8B%EF%BC%89.png
      非条件分支指令(R型)
      1. J型指令的目标地址可以是当前指令前后256MB的范围,那如果我们还想跳转到更远的地址, 应该怎么办呢?
      2. 有一个很简单的方法,就是两次调用J指令,第一条J指令尽可能跳到最远的地方, 然后在那个目标地址再放一条J指令,像接力一样再跳一次。 这个方法很简单,但是用起来不算太方便。
      3. 间接转移指令,MIPS中也可以用同样的方法, 这就是jr指令。
      4. jr指令有一个寄存器操作数, 可以把要转移的目标地址放到寄存器当中,这样就可以使用32位的目标地址了, 但是这样的指令显然无法用J型指令来实现, 那么需要新增一种指令类行吗?其实也不需要,我们就用原来的r型指令就可以很好的实现。 只用占用其中的一个寄存器位域,然后新增一种function的编码就可以了。