本篇只是初略介绍X86的逻辑运行原理,并不涉及物理层面和汇编层面的知识。
一、冯洛伊曼体系的运作过程:
1、CPU的历史就不扯了,有兴趣的朋友可以网上搜一下。
2、X86CPU是基于冯洛伊曼架构体系,所以大致上无非就这几点:
①、指令集和数据都用二进制来表示,且混在一个存储器。
②、计算机由运算器、控制器、存储器(cache)、输入设备、输出设备所组成。PS:cache不同于寄存器,寄存器是分布在控制器和运算器里面的。
③、指令是一条接着一条顺序的执行。
如下图所示:
二、下面分别讨论几个主要组件:
寄存器:处于CPU存储金字塔的最顶层,容量最小,速度最快(1-10个指令周期)。主要作用是用来存储数据供运算器运算的。各自都有不同的功能。
控制器:数据寄存器,指令寄存器,程序计数器,指令译码器,时序产生器,操作控制器所组成。
运算器:运算器由算术逻辑单元(ALU)、累加寄存器、数据缓冲寄存器和状态条件寄存器组成。
三、执行过程:
当执行一条指令时,程序计数器先记录当前的地址,把他放到地址记录器,程序计数器再加一(指向下一条指令的地址),
然后就从内存读取指令放到指令寄存器(IR)。然后在传到指令译码器,具体功能如下:
指令译码器:
(1)译码分析。确定指令应完成的操作,产生相应操作的控制电位。去参与形成该指令功能所需要的全部控制命令(微操作控制信号)。
(2)根据寻址方式(8086是采用段地址+偏移地址合成一个20bit的寻址范围,从32bit开始淘汰)的分析和指令功能要求,形成操作数的有效地址,并按此地址取出操作数(运算型指令)或形成转移地址(转移类指令),以实现程序转移。
指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码后,即可向操作控制器发出具体操作的特定信号。
时序发生器: 时序信号发生器是产生指令周期控制时序信号的部件,当CPU开始取指令并执行指令时,操作控制器利用时序信号发生器产生的定时脉冲的顺序和不同的脉冲间隔,提供计算机各部分工作时所需的各种微操作定时控制信号,有条理、有节奏地指挥机器各个部件按规定时间动作。(区分数据和指令的一种方法。详细可看我CPU架构的区别一文)
然后把指令传到运算器。寄存器得到译码后的结果,通过数据总线,去数据cache获取数据。然后根据需求进行逻辑运算(与或非)算术运算,然后在通过数据缓冲寄存器通往IO端口传输到外界。
操作控制器:常用的控制方式有同步控制、异步控制、联合控制。
1.同步控制方式:任何指令的运行或指令中各个微操作的执行,均由确定的,具有统一基准时标的时序信号所控制。即所有的操作均由统一的时钟控制,在标准时间内完成。(在同步控制下,每个时序信号的结束就意味着安排完成的工作已经完成,随即开始执行后续的微操作或自动转向下条指令的运行。)
2.异步控制方式:没有统一的同步信号,采用问答方式进行时序协调,将前一操作的回答作为下一操作的启动信号。
3.联合控制方式:将同步控制和异步控制相结合。其通常设计思想为:在功能部件内部采用同步方式或以同步方式为主的控制方式;在功能部件间采用异步方式。
而运算器又大致上分为逻辑运算(与或非)和数值运算(用加法的形式转变成加减乘除)。
如下图所示:
附上一个小动画: http://218.5.241.24:8018/C35/Course/ZCYL-HB/WLKJ/jy/Chap05/flash-htm/5.6.swf