计算机组成原理王道笔记——基础知识

一、冯 诺依曼机(计算机硬件基本结构)

  1. 冯诺依曼提出了“存储程序”的概念:将指令以二进制代码的形式事先输入计算机的主存储器(内存)中,然后计算机按地址顺序一条一条的执行指令。
  2. 冯诺依曼计算机特点

1、计算机由五大部分组成
2、指令和数据以同等地位存放在存储器中,可以通过地址访问
3、指令和数据都是二进制表示
4、指令由操作码和地址码组成(操作码就是add这种)
5、存储程序
6、以运算器为中心:输入数据和输出数据必须经过运算器来完成

在这里插入图片描述

  1. 输入设备作用:让信息变成机器可以识别的形式
    存储器作用:存放数据和程序
    算数器:进行逻辑运算和算术运算
    输出设备:把结果变成人类熟悉的形式
    控制器:通过电信号控制协调各部件的运作;也负责解析存储器中存储的程序指令(存储器到控制器有一条数据线)
  2. 在计算机中,硬件和软件是等效的。意思是同一个功能,可以用硬件实现,亦可以用软件实现(硬件成本高效率高)
    eg. 对于乘法运算,可以做一个硬件专门做乘法,也可以在软件上通过累加实现

现代计算机对比
在这里插入图片描述

1、现代计算机以存储器为中心
2、由于运算器和控制器关系紧密,现在一般都集成在同一块芯片上,所以CPU=运算器+控制器
3、存储器包含了主存和辅存,主存是运存,辅存的硬盘
在这里插入图片描述

小结:
在这里插入图片描述

二、主存储器

1、主存储器的基本组成
在这里插入图片描述

存储体:可以存放二进制
MAR:存储地址寄存器
MDR:存储数据寄存器

2、读数据基本流程:告诉MAR数据的地址,在主存储体中寻找该地址,并把数据传递给MDR

3、写数据基本流程:告诉MAR想写到的地址,给MDR要写的数据。CPU通过控制总线告诉主存储器操作为写入。

4、存储体:数据在存储体内按地址存储,如:在这里插入图片描述

存储单元:一个存储单元存放一串二进制代码
存储字:存放的这一串二进制代码就叫一个存储字
存储字长:一个单元能存储的二进制长度(位数),通常为 k*8bit
地址:每一个地址都对应一个存储单元
存储元:可以存放二进制的存储单元(用可以存储电荷的电容的原理),每个存储单元可存1bit

注:

MAR对应的是地址,所以MAR寄存器的位数,可以反映存储体的存储单元个数。比如一个MAR有4位,所以存储体总共就有2^4个存储单元。
MDR对应的是存储内容,所以MDR的位数=存储字长。比如一个MDR是16位,即存储体存储字长为16位,即一个存储单元可以存储16bit,即1个字(word)=16bit

另:类似于1024的问题,网络运营商卖的宽带比如100兆,其实是100Mbps,自用网速一般单位是MBps,所以看到的上传下载速度只有十几兆。

三、运算器

1、运算器的基本组成
在这里插入图片描述

ACC(Accumulator):累加器。用于存放操作数或者运算结果。
MQ(Multiple-Quotient Register):乘商寄存器。同样存放操作数或者运算结果。
X:通用寄存器,用于存放操作数,可能有多个
ALU(Arithmetic and Logic Unit):算术逻辑单元。内部通过复杂的电路实现算术运算和逻辑运算。

三、控制器

1、控制器的基本组成
在这里插入图片描述

CU(Control Unit):控制单元。用于分析指令,且可以给其他部件发出控制信号。
IR(Instruction Register):指令寄存器。存放当前执行的指令。
PC(Program Counter):程序计数器。存放下一条指令的地址,有自动加一的功能。

2、工作大致流程:(完成一条指令)

第一阶段:取指令。根据PC存放的下一条指令地址,从内存中取出。取出的指令存放在IR中。
第二阶段:分析指令。CU分析存放在IR中的指令。
第三阶段:执行指令。之后CU会控制其他部件一起完成该指令的执行。
注:第一阶段和第二阶段有时统称取指阶段。

3、计算机的工作过程(具体举例):

我们用如下的一段C语言程序来举例:

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

那么这段高级语言代码将会被翻译成类似这样的机器语言代码:
在这里插入图片描述
注:这里用的是16位存储字长的存储器。CPU会自动拆解成操作码和地址码。

我们来一步一步分析这段程序的运行过程:

  1. 程序运行前,PC指向地址0,即(PC)=0。下一步应该是取地址。在这里插入图片描述

  2. PC通过地址总线将地址传给MAR,即(MAR)=0。同时CPU中的控制器通过控制总线告诉主存储器接下来是读操作。在这里插入图片描述

  3. 接下来该由主存储器根据MAR中存放的地址,去存储体中找出0号地址对应的二进制数据,并放入MDR中,即(MAR)=000001 0000000101。在这里插入图片描述

  4. 接着主存储器会将MDR中存放的数据通过地址总线传入控制器的IR中,即(IR)=000001 0000000101。在这里插入图片描述

  5. 接着IR中存放的这条指令的操作码会被放入CU中去分析。CU分析后得知000001是“取数”指令,接下来就会执行取数的操作。在这里插入图片描述

  6. 这条指令要求取出地址码对应的存储单元中的数据,并放入ACC中。所以IR中的地址码就需要放到MAR中,即(MAR)=0000000101(5)。在这里插入图片描述

  7. 接着存储体找对应MAR给的地址,找到是a变量存储的地方后,将数据传递给MDR,即(MDR)=0000000000000010。在这里插入图片描述

  8. 在控制单元CU的控制下,MDR的数据会被传入到ACC中,即ACC=2.在这里插入图片描述

至此,取数指令完成,最终导致变量a的值被放入了ACC中。
其中#1~4步骤是取指令的阶段,结束后PC++;
#5步骤是分析指令阶段;
#6~9步骤是执行指令阶段。

  1. PC现在是1,取指过程和上一条类似。此后(IR)=000100 0000000110在这里插入图片描述
  2. 接着IR把操作码给CU,CU分析后得知这是乘法指令。我们要执行的乘法是a*b,由于a已经被放入ACC中,所以这条指令的地址码指向的是变量b。接着IR把地址码给MAR。在这里插入图片描述
  3. 接着就是MAR给存储体地址,存储体给MDR对应的数据。在这里插入图片描述
  4. 接下来MDR存的数据通过数据总线传给MQ,即b的值存放入MQ中。在这里插入图片描述
  5. 接下来要把a的值放入通用寄存器X中,也就是说执行乘法操作,需要把被乘数放入X中,乘数放到MQ中。在这里插入图片描述
  6. 接着CU会通过控制总线告诉ALU进行乘法操作,结果放入ACC中。需要注意的是,如果乘出来的结果较大,需要MQ去辅助存储结果的低位。在这里插入图片描述

至此,1号乘法指令也完成了。
可以发现前5个步骤(取指+分析)是一样的。直到第5步分析之后,根据不同的操作有不同的执行过程。

  1. PC现在是2,前5个步骤一样。第六步也是将地址码从IR给MAR,然后在存储体中找到后给MDR,然后接下来会把存放在MDR中的变量c数据,传递给通用寄存器X。也就是说,进行加法操作的时候,被加数存在ACC中,加数放入X中。在这里插入图片描述

  2. 接下来还是CU告诉ALU执行加法操作,将结果存入ACC中。在这里插入图片描述
    至此,加法指令完成。

  3. 接下来下一条存数指令。前五个步骤完成后,IR将y的地址码传给MAR,此外ACC将存放的数传递给MDR。也就是说,此时MDR中存放着ab+c的数据,MAR存放着该数据要存入的地址。在这里插入图片描述

  4. 接下来CU控制存储体,进行写的操作,将MDR的数据存入MAR中的地址中。在这里插入图片描述

至此,存数指令完成。

  1. 接下来是停机指令。分析后得知要终止程序了。接下来就是操作系统的事情,通过中断机制告诉操作系统结束该进程。

小结:

  1. 不管什么指令操作,都需要经过三个阶段。
  2. 前五个步骤是必要步骤。
  3. CPU根据指令周期的不同阶段,来区分取出的到底是指令还是数据(一开始是指令,后面是数据)

总结:
在这里插入图片描述

  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值