CPU由运算器和控制器这样的两大部件来组成,
那么运算器由ACC累加寄存器,乘商寄存器,还有若干个通用寄存器以及算术逻辑单元alu来组成。
那除了这些寄存器,还有alu之外,还会有一些其他的重要的寄存器,我们在之前没有介绍过。
运算器主要负责对数据进行处理,也就是算术运算和逻辑运算,
那CPU的另一个重要的部件叫控制器。控制器由控制单元cu还有指令寄存器IR和程序计数器PC由这样的三个部分组成,那同样的,除了这三个部分之外。还会有一些其他的重要的寄存器。
在控制单元的指挥之下CPU会执行一系列的指令序列,每一条指令的执行可以分为取指令,
分析指令和执行指令这样的三个部分。
CPU工作的过程就是在执行一条一条指令的过程,
那程序计数器PC会指向下一条应该执行的指令。因此。每一次要执行一条指令之前CPU会把PC程序计数器所存储的指令存放地址把它传送到mar地址寄存器当中,然后主存会根据mar所指明的地址取出这一次要执行的指令。那么,这条指令会首先被放到mdr当中,接下来又从mdr传到指令寄存器IR当中。
经过这样的四个步骤就完成了取指令的一个过程。
并且每取出一条指令之后,PC都会自动的加一,指向下一条应该执行的指令,而当前需要执行的这条指令此时已经被放到IR指令寄存器当中了。
接下来,我们会把这个指令的操作码送到CU控制单元当中,然后控制单元可以根据操作码来判断这条指令是什么样的一条指令,接下来应该执行什么样的一些操作,那对于我们这儿的第一条指令来说,我们要执行的是一个取数的操作,因此接下来在控制单元的协调之下我们会从地址码所指向的这个地址当中取出相应的数据,
把它放到ACC累加寄存器当中。
具体的做法就是我们会把当前这条指令的地址码部分送到mar地址寄存器当中,接下来根据地址寄存器指明的地址去存储体当中找到相应的数据把它放到mdr当中。
现在已经取出我们想要的这个数了,然后再把这个数通过一个数据通路,把它从mdr放到ACC累加寄存器当中,这样就完成了一条指令的执行。
也就是这儿的六到九这几步。
那这是第一条指令取数指令的执行。我们把变量a放到了ACC累加寄存器当中,
而第二条要执行的是一个乘法指令。那前面几个步骤取指令和分析指令所需要做的事情都是一样的,
当控制单元CU检测到当前要执行的指令操作码是是一个乘法的操作码,那接下来要做的一些动作就和上一条取数指令不太一样。
总之,控制单元CU会根据当前要执行的是一条什么样的指令。根据这个操作码来决定接下来要完成的一系列微操作,这些一个一个的小步骤分别要做一些什么事情,
我们可以看到这些步骤都是一步一步顺序的进行的。
有的小步骤是完成了寄存器之间的一个数据的流动,有的步骤又需要把当前寄存器里已经存放好的操作数把它送给ALU和累加寄存器。
现在问题来了,控制单元cu是如何控制着这些部件之间的数据流动的呢?
除了数据在各个部件之间的流动之外CU又是如何确定我们每一步应该做一些什么事情的呢?
这一章内容的学习,分为这样的五个部分,
第一个部分介绍CPU的功能与结构。通过这个小部分的学习,我们也能够知道各个部件之间数据流动是如何控制的。
第二个部分会介绍指令执行的过程。之前的例子中,我们只介绍了取指令,分析指令和执行指令这几个步骤,
分别需要做一些什么事。但事实上,除了这些步骤之外,指令执行的过程当中还有一些细节也需要进行补充,
所以这是第二个部分。
而第三个部分我们会着重探讨数据通路的功能和基本结构。那所谓数据通路就是各个部件之间的数据流通如何实现,它们之间应该如何进行连线?另外,控制单元CU如何通过电信号来控制这些数据在各个路径之间的传输?这是第三个部分要探讨的问题。
第四个部分,是最难的一个部分,学习控制器如何指挥整个系统的工作,像之前我们提到的所需要的这些指挥的信号是如何发出的。
这一章的最后一个部分,我们要介绍指令流水线,也就是对指令执行过程的一个优化,
采用这种技术,我们可以让CPU执行指令的速度达到一个质的飞跃。