【计算机组成原理】1.2.2(补充)各个硬件的工作原理

1.2.2(补充)_各个硬件的工作原理
00:00
好的,上个小节我们学习了现代计算机的基本构成,都是基于冯诺依曼结构的思想来设计的。主要有五个硬件部件。这个小节我们要做的事情是来看一看我们主机内部的这三个硬件部件,它们的一些内部细节,以及它们之间是如何协调着来工作的那我们先看主存储器,之后看运算器,最后是控制器。
00:28
好,首先来看主存储器的基本组成。主存储器里边用于存放数据的东西叫做存储体。存储体就是由一系列的存储元件来构成的,可以存放二进制0或者一。除了存储体之外,还有两个重要的寄存器,一个叫MAR一个叫MDR。它们分别是存储地址寄存器,还有存储数据寄存器的一个英文缩写。
00:56
很多跨考的同学不知道寄存器是什么意思,寄存器其实也是用来存放数据的,存放二进制数据。只不过这两个寄存器它们存放的数据各不相同。从名字可以看出,MAR它应该是存放和地址相关的一些二进制数据,而MDR是用于存放实际的数据的。这个我们一会儿会用一个具体的例子带大家再来理解。
01:22
好,主存储器里的这三个重要部件,它们分别有什么用呢?刚好今天早上我到菜鸟驿站去取了一个包裹。我发现菜鸟驿站它的一个基本组成,其实和我们主存储器是有很多异曲同工的地方。每一个菜鸟驿站里面都会有一个货架,大概长这个样子。他们会给这个货架进行一个编号,什么十一号货架,然后一层、二层、三层。然后我去的这家菜鸟驿站,他们的包裹编号就是根据货架号,然后在货架里的第几层,这一层的第几个包裹,用这样的规则来给我的快递编号的。所以这家店这些一个一个的包裹货物其实是有规律的,按照取件号摆放到货架上的那我去取包裹的时候,我得告诉前台的店员,我的取件号是多少。
02:21
好,店员知道了取件号之后,他就可以知道我的这个包裹是存放在11号货架的第一层的第42个包裹。于是这个店员会告诉后台的小哥,让他去这个位置帮我找。于是在取件号所对应的位置就找到了我想要的包裹。找到之后他们会把我的包裹放到柜台上,我就可以从柜台上拿走我的包裹。因此菜鸟驿站的这个模型当中,货架、电源、柜台与我们主存储的这三个部分都是一一对应的。
03:02
菜鸟驿站的货架是用来存放货物的一个一个的包裹,然后主存储器里的存储体是用来存放数据的那数据不就是计算机想要的货物吗?好,另外我会告诉店员我的取件号是多少,同时我的取件号也反映出了我想要的货物,它在货架上的存放位置。而对于主存储器来说,CPU想要从里边取得一个数据,那么它会把它想要的数据存放在什么位置?这个存放地址写到MAR这个寄存器当中。那接下来主存储器是不是就可以根据MAR这接收到的地址信息,去存储体里边拿出CPU想要的数据。好,再回到菜鸟驿站,我想要的包裹从货架上找到之后会被放到柜台上,然后最终我是从柜台上取走这个包裹的那对于存储器来说也是一样,刚才CPU给它提供了一个他想要的数据的存放地址。主存储器里边的一些控制逻辑会根据这个地址找到他想要的数据,并把他想要的数据先写到MDR这个寄存器当中。最后CPU就可以通过数据线路从MDR当中取走他想要的数据。
04:30
好,所以主存储器和菜鸟驿站的这个模型是有很多相通的地方的。当然也有不一样的地方。对于菜鸟驿站来说,我们通常只能从它的货架上取走我们的包裹。而对于存储器来说,CPU既可以从其中读出数据,同时也可以写入数据。写入数据的过程其实和读入数据是很类似的。
04:56
CPU会指明它想要写入到哪位置,然后它想要写入的具体数据会放在MDR当中,最后CPU会通过控制总线告诉主存储器说,这次我想要执行的操作是写操作,而不是读操作。那么主存储器根据CPU发出的这三个信息,就可以往对应的位置写入CPU想要写的数据了。好,通过这个例子,相信大家就能够理解MAR和MDR这两个寄存器的一个作用。
05:28
好,接下来我们把注意力放到存储体上。存储体是什么一个原理呢?我们刚才说过数据,我们要的二进制数据是存放在存储体当中的,并且是按地址来存储。什么意思呢?就是说我们的一整个存储体,它会被分成一个的存储单元,每一个存储单元会存放一串二进制代码。那每一个单元里边存储的这一串二进制代码,我们就把它称为一个存储字,英文的话就是word,而每一个存储字包含多少个二进制位,这个信息我们把它称为存储字长,也就是每一个存储单元里边可以放得下多少个二进制位。通常每一个存储单元可以存放的二进制数都是八个比特的整数倍,也就是8比特或者16比特,或者32,或者64,这是比较常见的一些存储字长。好,每一个这样的存储单元会对应一个地址信息,地址是从零开始的那这个地址信息就是刚才我们所说的MAR这里边应该指明的一个信息。如果我要读取的是第二号的存储单元,那么CPU就应该往MAR这个寄存器里边写入二这个信息。
06:56
好,最后还有一个概念叫做存储元,也就是用于存储二进制数据的电子元件。这样的电子元件其实是用电容的原理来制造的。不知道大家还有没有印象,我们高中里边学过电容相关的知识。电容可以用来存储电荷,因此我们可以用一个电容来存放一个二进制的比特位。由多个存储元件还有相应的线路就构成了一个存储单元。好,关于存储元件的物理特性我们不需要过多的深究,我们只需要知道每一个存储元件,每一个存储元可以存放一个比特就可以了。好,之前我们说过MAR是指明了我此次要访问哪一个存储单元,是指明了存储单元的地址。所以MAR这个寄存器它的位数,它到底有几个比特位,这个信息就直接的反映了我们的存储体里边到底有多少个存储单元。
07:58
另一个方面,我能从存储单元里边取出来的数据是要放到MDR当中的。所以MDR它的二进制位数应该和存储单元是保持一致的,也就是要等于存储字长。比如这个主存储器,它的MAR地址寄存器只有四个比特位,那么也就意味着它的存储体里边总共只有2的4次方这么多个存储单元,因为四个二进制位最多也就只能表示这么多个数字,也就是对应2的4次方这么多个地址。另外如果它的MDR这个数据寄存器总共有16位16个比特位,那么就说明在这个主存储器当中一个字的大小就是16个比特。换一个角度说,每一个存储单元可以存放16个2进制位,16个比特的信息。这一点也是比较容易作为考题来考察的,大家需要注意。
08:57
这还要给大家补充一个比较容易混淆的点,就是这儿我们给出了所谓一个字的概念,用英文说的话就是一个word,很多同学容易把字和字节混为一谈。如果看英文的话,其实他们是很不一样的。但是中文的翻译确实很像,一个字节指的是八个比特位。而一个字到底有多少个比特?这个具体得看我们的计算机它的结构是怎么样的。也就是说一个字的大小有可能是16个比特有可能是八个比特,也有可能是32或者64个比特。具体要看我们计算机硬件是怎么设计的,那除了字和字节之外,还有一个需要强调的点就是我们在描述一个字节的时候,经常会用一然后加一个大B大写的B来表示。但是当我们在描述一个比特,一个二进制位的时候,一般是用一个小b来表示,所以很多初学者会忽略这个细节,大B和小b其实是不一样的。
10:01
说一个大家都会有体会的生活经验。当我们去办那个宽带的时候,你会跟业务员说我要办一个一百兆的一个宽带。你会发现它的这个B是小写的B所以它的这100兆的宽带其实指的是每秒钟per second,每秒钟可以传送100兆个比特位,是这样的一个速率。当你用100兆的宽带来下载东西的时候,我们的迅雷之类的下载器一般是以大B也就是字节作为这种计量单位的。所以你会发现你用100兆的宽带来下载东西的话,那最多就是十兆多一点的这种速度。因为你的下载器里边用的是大B也就是字节。其实并不是运营商骗了你,他承诺你的理论峰值100兆,你把它换算成大B的话,应该是用100再除以一个8,这才是你有可能获得的最快的一个下载速度。
11:04
好,扯了一堆东西,也是为了加深大家的印象,注意字和字节,还有大B和小b的一个区别,到此为止我们了解了主存储器的基本组成。接下来我们进入下一个硬件部件,就是运算器的基本组成。我们先用大家最讨厌的念PPT的方式来简单的聊一下,之后我们再用一个具体的例子带大家来理解我们这儿给出的这些文字性的描述。那一个运算器最主要的部件有这样的四个,ACC,MQ,还有一个叫X。还有一个你看它形状不太一样,叫ALU。
11:42
上小节我们说过运算器就是要来实现算术运算,加减乘除,还有逻辑运算的。其中ACC它其实是一个寄存器,翻译为中文一般叫做累加器。这是它的英文全称。累加器可以用来存放我们进行加减乘除或者逻辑运算的那些操作数,同时也会用于存放运算的结果。
12:07
第二个寄存器叫MQ就是乘商寄存器,乘和商其实也就对应着乘法和除法。所以顾名思义,这个寄存器只会在乘法、除法这样的运算的时候才会用得到。同样的会用来存放乘法除法的操作数或者运算的一个结果。
12:25
好,第三个寄存器X它叫通用的操作数寄存器,或者我们可以把它简称为通用寄存器。其实这种通用寄存器一般在运算器里边是可能会有多个,但理论上我们只需要有一个通用寄存器,就可以实现我们想要的那些算算术运算。大家如果看看王道书给的运算器的结构的话,那你会发现它里面就画了多个这种通用寄存器。通用寄存器的作用就是用来存放一些操作数。
12:57
好,最后这个长相很不一样的家伙ALU它叫算术逻辑单元。ALU才是运算器的核心部件,它里边集成了一些复杂的电路,用这些复杂的电路可以实现算术运算或者逻辑运算。前边我们说的这三个寄存器,其实就是用来存放一些数据的。这些寄存器的硬件构造并不复杂,而ALU的硬件构造就很复杂了。所以运算器里边制造成本最高的一个部件就是ALU。刚才说的这三个寄存器在进行加减乘除不同的运算的时候,它们的作用会各不相同,这个我们一会儿结合具体的例子来理解。
13:40
好,这是运算器的一个基本组成,有三个不可或缺的寄存器,另外还有一个核心部件ALU来实现算术运算和逻辑运算。
接下来我们再来看控制器,控制器里边有三个必不可少的部件,一个叫CU就是控制单元。控制单元是控制器里边最核心的一个部件,它里边也集成了很复杂的一系列的电路,可以完成分析指令,并且可以给其他的部件发出一些控制信号,所以上个小节我们把控制器比喻成霸道总裁,他会控制其他的部件,但是对于这个霸道总裁来说,CU才是他真正的核心,就相当于CU是霸道总裁的老婆,其实总裁还是得听老婆的。
14:28
除了CU之外,还有另外的两个寄存器,IR是指令寄存器,就是用来存放当前执行的指令的。PC是程序计数器,它是program的一个缩写。我们平时说的PC一般是个人电脑,不要和这里的PC混为一谈。这个寄存器的作用是用来存放下一条指令的地址,并且有自动加一的功能。好,我们的计算机最主要的工作就是执行代码,而我们的所谓的代码其实就是一条一条的指令,对吧。
15:01
那每完成一条指令需要分为这样的三个阶段。第一个阶段是取指令,会根据PC也就是程序计数器里边所记录的这个指令地址,根据这个地址从内存里边取出那一条指令,那取出的指令会被放在IR也就是指令寄存器当中。然后CU这个部件就可以分析这条指令到底是要干什么的,那当他分析完了之后,CU这个部件就会控制着其他部件来配合着完成指令的具体执行。好,这是完成一条指令的三个阶段。当然很多地方也会把前边的这两个阶段统一的称为取指的阶段,然后最后的这个阶段把它称为执行的阶段。
15:47
好,运算器和控制器的功能都是很抽象的,要把抽象的知识变具体,最好的方法是让它们跑起来,所以接下来我们用一个具体的例子来看一下我们熟悉的一段代码是怎么执行的。比如我们可以用C语言写这样的一段程序定义,ABCY这样的四个变量。然后这个程序里边只是执行了一句简单的代码,Y = A * B + C,这是我们高级语言程序员看到的一个视角,但事实上我们的CPU不可能一次性完成这样的一个复合运算,它只能先进行乘法,然后再进行加法,分为这样的两大步骤。所以我们这段程序在经过编译链接一系列的骚操作之后,可以把这个高级语言翻译成机器能读得懂的机器语言。
16:36
同时会把这段程序装入主存。它在主存里的样子就是这样的,最左边的这一溜是指明了主存的地址,这是0号存储单元,这是1号存储单元,好以此类推,一直到8号。
16:50
我们定义了ABCY这样的四个变量。我们A这个变量它是存放在地址为5的这个存储单元当中的,当然在主存当中是以二进制的形式来存放,B这个数据是存放在6,C存放在7,然后最后我们要计算的这个Y它是存放在八这个存储单元当中。除了这些数据之外,前边0到4这几个存储单元存储的就是我们这一段程序它所对应的机器指令。
17:27
你看我们用高级语言写的短短的一行代码,经过编译之后丢给计算机的其实是这么多条复杂的指令。那每一条指令会分为操作码和地址码这样的两个部分。对了,大家可以数一下,我们这儿每一个存储单元是16个比特,也就是存储字长为16个比特。然后每一条指令它的两个部分总共也是占16个比特,只不过在执行这些指令的时候,CPU会自动的把它们拆解成操作码和地址码这样的两个部分。
18:00
好,下面来看一下这个程序的运行。接下来的这段演示希望大家认真的听,这有助于大家理解各个硬件部件的作用,还有他们之间是怎么配合着工作的,能帮助大家形成一个对计算机运行原理的一个全局观。好,我们把刚才的这个图补上。主存,还有运算器、控制器,然后运算器和控制器共同集成在CPU里面,另外还有一些IO设备,当然这个例子当中IO设备不重要。
18:31
首先我们的这些指令,还有变量的数据都是存放在存储体当中的。这个程序要执行的第一个指令应该是存放在0号位置的这条指令。所以在程序运行之前,PC它会指向0这个位置。接下来我们应该把这个位置存放的这条指令给取出来执行。首先PC存放的内容需要通过地址总线把它传送到MAR这个地址寄存器当中。刚才我们说了,此时PC是0,那这个操作就会导致MAR这个寄存器的值变为了0。也就是说控制器向主存指明了我接下来要访问的是0号地址所对应的这一串数据,同时控制器会通过控制总线告诉主存储器说,我这次要进行的是读操作。
19:29
好,接下来主存储器会根据MAR记录的这个地址信息,去存储体里边找出0号地址所对应的这些二进制数据,并且把这些二进制数据放到MDR,也就是这个数据寄存器当中,这就导致了MDR这个寄存器当中,现在里边存放的就是我们想要读取的第一条指令。对了,这儿解释一下,我们把一个寄存器的名字外面打一个括号,指的是这个寄存器里边的内容。然后这儿一个M表示的是memory,也就是主存储器,主存储器里边MAR这个地址所指明的存储单元里边的数据放到MDR这个寄存器当中,是这样的一个意思。
20:20
好,我们继续。现在CPU想要的货物已经放到MDR这寄存器当中了,那接下来它就可以取走这些货物。这一次要取走的货物其实就是一条指令,所以这条指令会通过数据总线把它放到IR也就是指令寄存器当中,这就导致控制器的IR这个寄存器里边已经存放了此次要执行的指令。
20:46
好,接下来这条指令的前边六个比特,也就是操作码,这六个比特会被送到CU控制单元里边,CU会分析这个操作码,它就可以知道00001它对应的是一条取数的指令,所以接下来要把这个地址码所指明的内存单元里的这个数据把它给取出来,并且放到ACC这个寄存器当中,这是取数指令要做的事情。那既然要读取主存的这个地址的信息,于是就需要把这个地址码放到主存的MAR当中,这就导致此时MAR是等于5,因为这个二进制数转换成十进制就是5,那5号存储单元所指向的刚好就是A这个变量它所存放的位置。
21:40
好,接下来主存储器根据MAR指明的这些地址,去存储体当中找出5号单元的这些数据,并且把这些数据放到MDR当中,也就是把A这个变量的值现在放到了MDR里,那A的值是2。好,最后在控制单元的指挥下,MDR里的数据会被传送到ACC,也就累加寄存器当中。到此为止我们就完成了一个取数的指令,最终导致A这个变量的值已经被我们放到ACC这个寄存器当中了。
22:18
这个图里边画的1234这几步,其实就是对应了我们之前说的取指令的一个过程。然后第5步是对应了分析指令的过程,后边的6到9步才是实际执行这个取数指令的一个过程。所以你看虽然我们只是给出了这样的一条机器语言描述的指令,但是我们的硬件确实还挺忙的。他要完成这条指令背后其实还是需要做很多很多事情。
22:50
好,之前我们说过程序计数器PC它有自动加一的功能。其实在取指令这个动作完成之后,PC的值就会自自动的加1了。它以前是零,那自动加1它就会指向1,也就是指明了下一条我们要执行的指令应该是在1这个单元这儿。好,所以之前这条指令执行之后导致的效果就是PC此时等于1,让ACC等于2,也就是等于A的值。
23:20
接下来根据程序计数器PC所指向的位置取得第二条指令。取指令的过程和之前是类似的,通过这样的四个步骤把第二条指令放到IR寄存器当中。取完指令之后就需要分析指令,和之前一样,会把操作码这个部分送到CU控制单元,然后经过CU分析之后,他可以知道000100这个操作码对应的是一个乘法操作,所以这是一条乘法指令。因此接下来CU会指挥其他他部件来协调的完成这个乘法操作。
24:01
还记不记得我们写的程序Y = A * B + C现在这一步我们要完成的是A乘以B的操作,而A这个变量之前已经被我们送到ACC这个寄存器里边了,所以现在这条乘法指令它的地址码指明那是另一个乘数B它的存放位置,那B存放在6这个位置,刚好这个地址码把它翻译成十进制数也是等于6。所以这条指令的地址码会被送到MAR当中,指明我要取出的是6号存储单元里边的数据。所以接下来主存会根据MAR所指明的这些地址取出相应的这个数据,也就是把B这个变量的值放到了MDR当中。接下来B的值会从MDR再通过数据总线送到MQ,也就是乘商寄存器当中。所以现在B的值已经放到MQ里边了。
25:06
好,接下来还需要把A的值先放到通用寄存器X当中。也就是说当这个CPU执行乘法操作的时候,它会把被乘数放到X这个通用寄存器里边,然后把乘数放到MQ这个乘商寄存器里边。接下来CU会通过控制线告诉ALU算术逻辑单元,让它进行乘法运算。ALU会把X和MQ里边存储的这两个数,把它们进行一个相乘的操作,然后把最终乘得的结果放到ACC里边。这个操作导致ACC里边得到了A乘以B的值,二三得六。在我们这个例子当中进行相乘的这两个数很小,但是如果说这两个数很大的话,那么有可能ACC这个寄存器里边是存不下的。这种情况下就需要MQ乘商寄存器的一个辅助存储,MQ里边会用来存放乘法运算结果的低位。好,这样我们就完成了第二条指令,也就是乘法指令。
26:17
大家会发现和前边那条指令相比,其实第一步到第五步这几个步骤,每一步要做的事情都是一模一样的。只有当CU控制单元分析出这条指令是乘法指令的时候,接下来的操作就会产生一些区别。另外和之前说的一样,当取指令结束之后,PC的值也会自动加1,所以这条指令执行结束之后,得到的效果就是PC指向了2,也就指向了下一条要执行的指令,然后ACC里边此时存放了我们上一个运算的结果,也就是A乘以B的值,A乘以B等于6。
27:02
好,接下来执行2这个地址存放的这条指令。前边的几个步骤都是一样的,通过五个步骤可以完成取指令和分析指令的操作。CU发现这次要执行的操作码应该是000011,这个操作码对应的是一个加法操作,所以这是一条加法指令。接下来CU会根据加法指令的这个执行步骤来指挥着其他部件协调工作。
27:35
好,这次要计算的是A乘以B加C,而A乘以B的结果我们是已经存放在ACC当中,所以这个加法指令的地址码指明的是C这个变量它的存放地址,那C是存放在7这个位置的,刚好把这个二进制数转换成十进制就是7。因此接下来要取出7这个地址所存放的数据,那么就需要把这个地址码,把它放到MAR地址寄存器当中。接下来主存根据MAR指明的地址取出相应的这个数据,也就是把C的值放到了MDR当中。然后接下来这一步会把MDR的值再传送到通用寄存器X当中。也就是说当我们进行加法运算的时候,ACC里边会先存入被加数,然后通用寄存器X当中会存放加数,也就是C的值。
28:32
好,接下来控制单元会向ALU发送一个信号,告诉它你此次要执行的是加法操作。那么ALU算术逻辑单元就会把ACC和X里边存放的值进行一个相加,并且把加得的结果再次存回ACC当中。因此这就导致了ACC等于7,也就是把A乘以B加C的值存放到了ACC里边。好,到此为止我们完成了第三条指令,也就是这个加法指令。同样的前边的五个步骤其实和之前的两条指令没有任何区别。另外在取完指令之后,同样的也会自动进行PC加一的操作,也就是PC会指向下一条我们应该执行的指令。
29:21
好,接下来这条指令的执行,前边的这些步骤都是一样的。根据PC记录的这个地址取出这条指令,并且放到IR指令寄存器当中。然后第五个步骤会把这个指令的操作码,把它送到CU当中进行分析。然后CU分析之后发现000010这是一条存数的指令,也就是要把ACC里边的数据把它存到地址码所指明的存储单元当中。那这个地址码转换成十进制应该是8,而八这个存储单元刚好对应的是Y这个变量的存储位置。现在ACC里边存的是7,也就是A乘以B加C的值。
30:10
好,接下来来执行这个存数指令,首先会把这个指令的地址码部分把它送到MAR里边,用来指明此次我要存入的是哪一个存储单元。另外还需要把ACC里边的运算结果,通过数据总线把它送到MDR当中。也就是说此时MDR里边保存了A乘以B加C的值,并且此时MAR里边指明了这个值是要存到内存地址为8的这个地方。然后接下来CU控制单元会通过控制总线告诉主存储器说,我此次要进行的是一个存一个写的操作。于是主存储器会根据MAR所指明的地址,把MDR当中的这个数据放到相应的位置当中,这就导致了八号存储单元它的值变为了7,也就是我们最终想要得到的这个结果,Y=A*B+C。那同样的存储指令的执行取指和分析指令的阶段做的事情和前面那些指令没有什么区别。只有分析出了指令之后,才会在CU控制单元的控制之下执行不一样的一些操作。同样此时PC会加一指向下一条应该执行的指令,那么接下来执行这条指令和之前一样,首先需要取出指令,把这个指令把它取到IR指令寄存器当中。然后接下来要把操作码部分送到CU里边,然后CU分析发现000110这个操作对应的是停机指令。所以执行到这一步就知道我们的这段程序去运行结束了。
32:01
学过操作系统的同学知道,要停止一个进程的运行,需要通过系统调用,或者说通过中断机制来通知操作系统来终止这个进程。于是接下来执行的指令就不是这一系列指令,而是操作系统相关的那些指令。后续的部分我们就不需要再关心了。好,到此为止我们就一步一步模拟了这个程序的执行过程。同时相信通过这个例子,大家就能够真正的理解运算器、控制器和主存储器它们的各个部件分别有什么作用。另外他们之间是如何相互协调着来工作的。
32:40
好的,我们再来进行一个小小的总结,这是我们的第一条,也就是取数指令的一个执行过程,分为取指令、分析指令和执行指令这样的三个阶段。任何一条指令的执行一定都是这样的三个阶段。无论我们执行的是什么指令,前边取指令和分析指令的这些步骤其实都是一模一样的。只有分析完指令之后,CU才可以知道这条指令到底是要做什么。于是接下来的这些步骤,对于不同的指令来说就有可能不一样。
33:16
在取指令的阶段,MDR里的数据肯定是要传送到IR指令寄存器当中。而在执行指令的阶段,CU会根据具体的这条指令来决定MDR里的数据应该是放到ACC还是放到MQ,还是放到其他的通用寄存器里边。所以根据指令执行周期的不同,它处于不同的阶段,CPU就可以区分出我们这次从内存里取出的到底是指令还是数据了。这个大家可以好好体会一下。
33:49
好的,这个小节当中我们介绍了很多很硬核的东西。主存、运算器、控制器这三大部件构成了主机。这三大部件的内部又分别有一些细分的小的部件,每一个部件完成了不一样的功能。但是相信通过之前的那个程序运行的例子,大家能够体会到每一个部件的具体作用。运算器的核心部件是ALU,控制器的核心部件是CU,在CPU里边这两个部件的制造成本也是最高的。另外关于存储体里边所涉及的这些概念,大家也一定要捋清楚,这些都是选择题的高频考点,需要注意字和字节的区别,也需要注意大B和小b的一个区别。好,具体的各个部件做了什么事,我们就不再赘述,大家可以自己暂停来消化一下。
34:46
这个小节的后半部分,我们用一个程序的执行来说明了计算机的一个工作过程。刚开始我们需要把指令和数据把它们存到主存里边,然后PC程序计数器会指向第一条指令在内存中的存放地址。接下来就是对一条指令的执行。首先需要从主存中取出一条指令放到IR指令寄存器当中,同时PC加一指向下一条应该执行的指令。接下来CU会分析指令,根据指令的操作码来确定这条指令应该做一些什么具体的事情。最后CPU会指挥其他的部件来共同的配合着完成这条指令的执行。这就是我们计算机的一个工作过程。
35:36
对了,再补充一点,MAR和MDR这两个寄存器它逻辑上是属于主存的。但是其实现代的计算机当中,这两个寄存器通常会被集成到CPU里边。所以如果接下来的学习当中,大家看到了MAR和MDR这两个寄存器被我们划到了CPU这个部件里边,那也不要觉得奇怪。好的,以上就是这个小节的全部内容。在学习了这一小节之后,大家可以再回头看一下我们上一小节提到的冯诺依曼计算机的这几个特点。
36:14
第二个特点,指令和数据以同等的地位存入存储器,这个可以理解了。刚才我们给的那个例题,就是把指令和数据无差别的以同等的地位放到了存储器里面,只不过存储的位置不一样而已。对于指令和数据我们都可以按照地址来寻找和访问,无论我们是要读出一条指令,还是要读出一个数据,我们肯定都需要给出它在内存里边的地址,所以这是按地址寻访的意思。
36:47
第三个特点,指令和数据用二进制表示,这个不用说。第四个特点,指令由操作码和地址码组成,这个肯定也能理解了,只不过我们这个小节给的例子当中,每一条指令只有一个操作码,一个地址码,但是有的计算机它所支持的指令可能是有多个地址码的,比如说一条指令包含两个地址,那这种指令就称为二地址指令。具体的我们会在之后的章节当中再遇到。
37:18
好,第五个特点,存储程序。在程序运行之前,指令和数据都会被提前存到主存里面,这是存储程序。好,所以经过这个小节的学习,相信大家对冯诺依曼计算机的这些特点就有了更深的认识。好的,这个小节的内容有点多,比较硬核,还是有点难消化的。大家今天可以多吃一点健胃消食片,希望大家可以好好的消化吸收。

*文章整理自B站公开课程《王道计算机考研 计算机组成原理》,仅作学习交流使用。
公众号:玄默冲虚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值