分享

计算机大佬总结出的'计算机组成原理'笔记看完惊呆了(示例将一个代码程序编译成机器码在各寄存器装载过程)

 山峰云绕 2022-03-07

  (示例将一个代码程序编译成机器码在各寄存器装载过程)


https://m.toutiao.com/is/NFf724m/?=计算机大佬总结出的 




第一章:计算机系统概述

Part1:基本概念

1、计算机系统组成

计算机系统

  • 硬件系统
    • 早期冯·诺依曼机构
    • 现代计算机结构
  • 软件系统
    • 系统软件——管理计算机
    • 应用软件——为执行任务而编制

2、三级计算机语言

  1. 三种语言
  • 机器语言:二进制代码语言,计算机可以直接执行
  • 汇编语言:面向及其的低级语言,其代码符号和及其语言一一对应
  • 高级语言:面向人类的自然语言,其代码需要翻译为机器语言
  1. 翻译过程

    翻译非机器语言非机器语言

    翻译类型
  • 编译:将源代码变为可执行文件
  • 解释:将源代码逐条变为机器语言并且执行

3、计算机的一些指标

  1. 主存容量(MM, Main Memory)
    MAR:Memory Address Register,主存地址寄存器
    MDR:Memory Data Register, 主存数据寄存器
    这两个寄存器的位数决定了主存容量,如果MAR:16bit MDR:32bit。则
    $$
    主存容量=2^{16}*32(bit)=64k*4B=512KB
    $$

  2. CPU
  • CPU的时钟周期:CPU中最小的时间单位
  • CPU的主频(Clock Speed):CPU内部时钟频率,单位Hz.(1 Hz = 1秒钟一次,时钟周期=CPU主频的倒数)
  • CPI(Clock Per Instruction):每条指令平均需要使用几个时钟周期
  1. FLOPS
    每秒可以支持的浮点运算数量级
    MFLOPS:可执行106
    GFLOPS:可执行109
    TFLOPS:可执行1012
    PFLOPS:可执行1015

Part2:计算机硬件系统

1、早期冯·诺依曼结构:以运算器为中心

冯诺依曼在研究EDVAC时,提出了“存储程序”的概念,即将指令以代码的形式事先输入存储器,从首地址开始按序执行,直到指令结束。在他的《EDVAC报告书的第一份草案》中,为现代计算机结构指明了道路

  • 采用二进制表示数据
  • 像存储数据一样的存储程序
  • 计算机由输入、输出、存储器、运算器、控制器5大模块构成

这三个原则被称为“存储程序”工作方式

2、现代计算机结构:以存储器为中心

现代计算机常将Control Unit和Arithmetic Unit和Memory中MAR、MDR整合入一个部件,并称之为CPU,如下图所示

3、三大硬件基本结构

  1. Memory
  1. Arithmetic Unit


其中ACC(Accumulator):累加器
MQ:乘商寄存器
ALU(Arithmetic logical Unit):逻辑运算单元

  1. Control Unit


其中IR(Instruction Register):存储当前执行指令的寄存器
PC(Program Counter):存储下一条指令地址的寄存器
MCU(Micro Control Unit):微控制单元,用于分析指令

4、一个例子

先看如下代码

int main(void){ int x = 2; int a = 3; int b = 1; int y = 0; y = a * x + b; }

将其编译装入后,变成这个样子

 主存 |               指令                |注释 地址 | 操作码(6bit)  |    地址码(10bit) | ---------------------------------------------------------------------------- 0   |   000 001      |   0000 00 0101   |取数x到ACC 1   |   000 010      |   0000 00 0110   |对a和x做乘法,并将结果存放于ACC中 2   |   000 011      |   0000 00 0111   |加上b,将结果存放于ACC中 3   |   000 100      |   0000 00 1000   |将结果放到y所处的主存单元中 4   |   000 101      |   0000 00 0000   |停机 ----------------------------------------------------------------------------- 以下为主存单元数据 ------------------------------------------------------------------------------ 5   |   000 000 0000 00 0010            |x=2 6   |   000 000 0000 00 0011            |a=3 7   |   000 000 0000 00 0001            |b=1 8   |   000 000 0000 00 0000            |y=0

由3可知一个完整的计算机如下图所示

则第一条指令执行过程为:

初始状态:PC=0,指向第一条指令地址

--------------------------------------------------------- step 1 : (PC)->MAR, MAR = 0; | step 2,3 : M(MAR)->MDR, MDR=000 001 0000 00 0101; |取指令阶段 setp 4 : (MDR)->IR; | --------------------------------------------------------- step 5 : op(IR)->MCU MCU分析后得知其为取数指令,pc=pc+1; | 分析指令阶段 --------------------------------------------------------- step 6 : Ad(IR)->MAR, (MAR)=0000 00 0101 = 5; | step 7,8 : M(MAR)->MDR, MDR = 000 000 0000 00 0010 = 2; |执行指令阶段 step 9 : (MDR)->ACC | ----------------------------------------------------------

(pc)表示pc中的值,->表示数据流动方向,M(MAR)表示主存(Main Memory)中地址为MAR的主存单元的值

op(IR)表示IR中指令的操作码(operator),Ad(IR)表示IR中指令的地址码

Part end:参考文献和一些说明

可以从pc自增的情况来看出计算机的是按照字节编制还是按照字编制。如果计算机指令长度16位,而pc=pc+2。那么说明该计算机按照字节编制。原因是如果计算机按照字母编制的话pc=pc+1.

(示例将一个代码程序编译成机器码在各寄存器装载过程)。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多