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