注:本文是针对Intel8086这种古老CPU来讨论的,不是因为什么X86是一个时代的开端(当然这肯定是有部分因素),而是因为X86教材的普及比较多,对于CPU和汇编的入门级学习更佳简单和易接受。而现在的奔腾,酷睿系列早已大不相同,最显然的:取址方式的不同。增加了N多指令集(如加密解密,多媒体处理)等。不过核心的运作过程大致是相同的。
*****我觉得网上所说的都很模糊和不具体,很难懂,所以特意根据自己所了解的写了一篇博客,写的不好欢迎拍砖指点。*****
具体实现可以参考本人上传的一个资源:《8086CPU执行原理动画》。CPU这玩意博大精深,本菜鸟只会保命的基本功,再深入下去只会是无止境的大坑。
1、冯洛伊曼体系的运作过程:
1、CPU的历史就不扯了,有兴趣的朋友可以网上搜一下。
2、X86CPU是基于冯洛伊曼架构体系的(在架构体系的一篇博客中有详细提到)。所以大致上无非就这几点:
①、指令集和数据都用二进制来表示,且混在一个存储器。
②、计算机由运算器、控制器、存储器(cache)、输入设备、输出设备所组成。PS:cache不同于寄存器,寄存器是分布在控制器和运算器里面的。
③、指令是一条接着一条顺序的执行。
2、CPU的大致组成:
1、把物理实现屏蔽起来,单纯的讨论逻辑结构,CPU是由运算器和控制器和cache所组成的。
图一时物理结构,通过针脚传输指令和数据。图二是逻辑实现。
寄存器:等放到说汇编的时候才讲吧。
控制器:数据寄存器,指令寄存器,程序计数器,指令译码器,时序产生器,操作控制器所组成。
运算器:运算器由算术逻辑单元(ALU)、累加寄存器、数据缓冲寄存器和状态条件寄存器组成。
如果下面分别讨论整个运作过程:
当执行一条指令时,程序计数器先记录当前的地址,把他放到地址记录器,程序计数器再加一(指向下一条指令的地址),
然后就从内存读取指令放到指令寄存器(IR)。然后在传到指令译码器,具体功能如下:
指令译码器:
(1)译码分析。确定指令应完成的操作,产生相应操作的控制电位。去参与形成该指令功能所需要的全部控制命令(微操作控制信号)。
(2)根据寻址方式(8086是采用段地址+偏移地址合成一个20bit的寻址范围,从32bi开始淘汰,我会在汇编章节详细介绍)的分析和指令功能要求,形成操作数的有效地址,并按此地址取出操作数(运算型指令)或形成转移地址(转移类指令),以实现程序转移。
指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码后,即可向操作控制器发出具体操作的特定信号。
时序发生器: 时序信号发生器是产生指令周期控制时序信号的部件,当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