计算机组成原理——第一章(2)

接下来我们来到我们第一章的第二部分, 这一小节我们主要来讲一下主机里面的主存储器、控制器、运算器的内部细节。u1s1,机组的内容很多,知识点很杂,建议同学们自己动手记好笔记

各个硬件的工作原理 

1.主存储器

主存储器包含存储体、MAR、MDR

为了方便大家对主存储器有个直观的影响,我们拿生活中的菜鸟驿站举个例子

 各位彭于晏们到菜鸟驿站取快递,首先把自己的取件号告诉店员,店员知道取件号之后就回去货架取出我们的快递,然后放在柜台上,我们拿走就行了。回到主存储器,我们把自己的取件号告诉店员就相当于在MAR(Memory Address Register)存入一个数据的地址,然后MAR就去存储体里面根据地址去找,找到之后数据存在MDR(Memory Data Register)

        1.1存储体

        1.1.1存储元

存储元:存储二级制的电子元件,每个存储元可存1bit(我们不用过度追究,我们只需要知道每个存储元可存1bit)

        1.1.2存储单元

存储体是由一个个的存储单元构成的,每个存储单元存放一串二进制代码,每一个二级制代码我们就叫它存储字,每一个存储单元有对应的地址,存储字和地址我们等一下会讲到

        1.1.3存储字

存储字(Word):存储单元中二进制代码的组合

        1.1.4存储字长

存储单元中二进制代码的位数,也就是每一个存储单元可以放得下多少个二级制位,通常可以存放8bit的整数倍

        1.1.5地址

每一个存储单元会对应一个地址,地址是从0开始的,我们之前提到过(联想彭于晏取快递),数据地址存放在MAR,如果我们要地址2的数据,那么就要在MAR中存入2这个地址。

另外再给大家补充易混淆的知识点:1个字节(Byte)=8bit      1B=1个字节      1b=1个bit

有些同学容易混淆字和字节的意思,1个字可能表示16个bit也可能等于32bit,具体要看我们计算机硬件怎么设计,还有一个点是,我们描述一个字节的时候,通常是用一个大B表示,但是描述一个比特的时候,是用一个小b表示。举个生活中的例子,我们去移动办理宽带,店员告诉我们流量可达100Mbps,但是我们用的时候发现只有下载速度只有10Mb/s,不是我们被骗了,而是小b转换成大B要除以8

        1.2MAR

通过上面的讲述,相信同学们可以很好理解MAR是干嘛的了,就是存放存储单元的地址

因为数据的地址需要存放在MAR中,所以MAR的位数直接反映了存储体有多少个存储单元。比如:MAR=4位----->总共有^{_{}}2^4个存储单元。

        1.3MDR

MDR就是存放一个个的存储单元的数据,所以MDR位数=存储字长。比如:MDR=16位------>每个存储单元可存放16bit

2.运算器

上个文章我们提到过,运算器实现算术运算(加减乘除)、逻辑运算(与或非),运算器分为ACC、ALU、MQ、X,其中ALU是最为核心的

        2.1ACC(Accumlator)

ACC:累加器,用于存放操作数或者运算结果

        2.2MQ(Multiple-Quotient Register)

MQ:乘商寄存器,顾名思义就是在乘法或者除法的时候会用到,同样的也是存放操作数和运算结果

        2.3X

X:通用寄存器,用于存放操作数

        2.4ALU

ALU:算术逻辑单元,作为运算器的核心,实现算数运算、逻辑运算

这三个处理不同的逻辑运算的时候会有不同的功能,我们等一下会举个例子来理解

3.控制器

        3.1 PC(Program Counter)

PC:程序计数器,存放下一条指令地址,有自动+1的功能

        3.2 IR(Instruction Register)

IR:指令寄存器,存放当前执行的指令

        3.3 CU(Control Unit)

CU:控制单元,分析指令,给出控制信号,是控制器的核心。上个文章中,我们将控制器比喻成霸道总裁,而CU就是霸道总裁的老婆,总裁也要听老婆的话

控制器总体怎么工作的呢?PC取得指令之后,拿给IR分析指令,最后交给CU执行指令

接下来我们用具体的例子来看一下计算机的工作流程 

4.工作过程

 假如我们用C语言写了这么一段代码

 那么计算机是怎么来处理运算的呢?

计算机会将一些操作数(加减乘除)和一下自变量存起来,就像这样,方便需要的时候取出来就行了

图1

   

        4.1初始

        不管是要进行什么运算,我们第一步都要取指令,然后分析指令,最后执行指令。

我们来讲一下怎么取指令

我们来看一下这个图,前面提到过初始的时候从地址0开始,指令的存放地址和需要执行的操作在图1

第一步:PC=0,指向第一条指令的地址

第二步: MAR收到地址之后就要去存储体取数据了,此时MAR=0

第三步:找到相应的数据之后就放在MDR中,MDR=000001 0000000101

第四步:货物已经放在DMDR中了,所以我们要把它取走,通过数据线把货物也就是这条指令传输到IR中,IR=000001 0000000101

第五步:IR把操作码发送给CU控制单元,让控制单元这个霸道总裁来指挥

第六步:CU霸道总裁收到操作码之后,进行分析,告诉IR这是一个取数指令,然后IR就乖乖的把地址发送给了MAR,又要取快递了,所以MAR=0000000101,也就是MAR=5

第七、八步:取快递的步骤前面提到过了,和二、三两步一样,最后MDR=2

第九步:MDR发送给ACC,所以ACC=2

所以我们上面的九步动作,只是处理地址=0的指令的过程,所以计算机在背后真的是默默付出

 我们之前说了取指令这一步不管是什么操作都会执行,上面中1~4步属于取指令,第5步属于分析指令,6~9属于执行取数指令

        4.2PC自动加1、CU分析指令、CU指挥其他部件执行指令

上一条指令之后ACC=2,PC=1;为什么PC=1?因为PC有自动+1的功能,从原来的地址0加1之后就指向了地址1的指令,所以PC=1; 

前面1~5的步骤和上面的处理地址0的步骤是一样的,MDR=000100 0000000110;IR= 000100 0000000110

 第六步:通过第5步CU霸道总裁分析出来这个一个乘法的指令,之前我们已经取到了a=2存在了ACC里面,所以这次霸道总裁CU命令取出地址码=0000000110的数据,所以MAR=0000000110=6

第七步、第八步:提到了很多次,也不过多赘述,就是通过地址码取快递的过程,MDR=3

第九步:MDR会通过数据线,发送到MQ乘商寄存器当中,所以此时MQ=3

第十步:ACC会把被乘数放到X寄存器里面,X=2

第十一步:ALU会进行乘法操作,是MQ*X=2*3=6放在ACC里面

图1

 

 同样的PC有自动+1的功能,执行之后,PC=2,指向了主存地址=2的指令

第一到第五步骤和之前都是一样的,都是取指令的操作

第六步:在第五步CU拿到操作码之后分析指令,发现这是一个加法操作,所以去主存储器里面取快递,把地址码放在MAR中,MAR=0000000111

第七~八步骤:取快递的过程,把取好的快递放在MDR中,MDR=1

第九步:MDR发送给X,使X=1

提问:为什么这次MDR是发送给X,上一个步骤是发送给MQ?

因为这一次是一个加法的操作,MDR先发送给X,然后ALU进行操作,把ACC+X得到的结果发送给ACC;而上一次操作是乘法操作,MDR发送给MQ作为乘数,然后ACC的数据发送给X作为被乘数,ALU进行操作将MQ*X得到的数据发送给ACC

第十步:上面的问题其实已经提到第十步了,就是ALU进行操作,把ACC+X得到的结果发送给ACC


 

同样PC自动+1,PC= 3

图1

前五步就不过多赘述,就是取指令给CU分析的过程

第六步:CU分析之后发现这是一个存数据的指令,然后就把需要存的地址发给了MAR

第七步:ACC把数据发给了MDR,进行存的操作,我们之前都是取快递,而这次是存快递,把地址给店员,把货物放在柜台,

第八~九步:MAR和MDR把地址和数据发送给存储体,存放在存储体中,这样就存放好了

 PC自动+1,PC=4

前五步取完指令之后,CU进行分析,发现这是停止程序操作,所以程序停止运行

 

通过上面的这个例子一步步的来模拟程序的运行,相信同学们对运算器、控制器、主存储器相互之间协调工作有了更深刻的认识 

5.思维导图

方便以后复习,我把思维导图放在下面

注意:现在计算机通常把MAR和MDR放在了CPU里面,所以以后提到CPU里面有MAR和MDR也不要觉得奇怪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值