接下来我们讨论下一个话题
在冯诺依曼式计算机中 命令,到底是如何被执行的?
OK, 我们先整理我们的思路。通过刚才的学习,我們已经知道的东西是这样的
CPU的电路是能够进行计算的,对这一点我们是确定无疑的。
第二个呢我们也知道,冯诺依曼式计算机
不需要通过插电那种方式去组合那些线路
它是通过讀取存儲好的程序,來完成不能的功能的
这就是冯诺依曼式计算机程序存储式计算机基本的一个道理
那这时候我就有一个问题 那是不是不管什么样的程序
CPU都能够识别并且执行呢? 我猜好像不行
怎么可能呢? 不管什么样的程序,CPU都能执行,我猜应该不是的
那如果不是的话,CPU能执行哪些程序呢?
然后这些程序的执行过程,到底又是怎样呢?
接下来,我们就来讲述一下这几个小问题,首先我们可以肯定
CPU绝对不是什么程序都可以运行的,它只能执行指令集里面有的指令
所谓指令集呢,就是CPU能够执行的一套指令的集合
那这样的一套指令集呢,是在CPU设计的时候就已经设定好的
也是CPU性能的重要的一个标式
那么目前常见的指令集有两种,一种是Intel
X86指令集 另一种很常见的就是ARM指令集,ARM是一个公司
他们有一套自己的CPU的设计框架,所以他们有自己的指令集 这套指令集倍受关注,很常用
那在指令集里头都包含一些什么样的指令呢? 比方说在这呢,我给出了
Intel X86基本指令集的一个简单的目录
它包含了像整数运算,逻辑运算,位运算等等
一系列的一些基本的指令,那么随着Intel CPU产品
的不断革新,那它的指令集呢,也不断完善和发展
这个图就给出来了从1996年到2003年 Intel 指令集的发展变化的一张图
当然,不需要特别了解,感兴趣的同学可以去看一下
那指令集里的指令到底长什麽样子呢?
我们来看一下,首先所有的指令都是一个长长的二进制chart
在这个二进制的chart里头包含两个部分
第一部分是表示这个指令是干什么的,叫做指令码
第二部分是执行这条指令要参与操作的操作数,这是两大部分
那我们曾经举过的一个例子就是,第二个,比方说这条指令它是用来执行加法运算的
前面这个指令码就表示要做一个加法
后面的这两个绿色的呢,就是操作数,合起来形成一条指令
根据指令所完成功能的不同呢,指令可以有一个操作数
也可以有两个,甚至三个,当然也可以没有操作数,都是可以的
Ok,稍微做一个总结 我们可以知道,CPU不是什么程序都能够执行的
它能够执行规定的指令集中的指令
而且所有的指令都是二进制编码的。这就要求我们,当你想让CPU去做一些事情的时候
你要先把这些事情写下来,然後把它转换成CPU能够接受的指令集中的指令
然后提交给CPU,让CPU去运行
那么在了解CPU的指令集之后呢,接下来我们看一下
CPU中的指令到底是怎么被执行的,需要告诉大家的是这部分的内容是属于扩展内容
我们不要求掌握,只要了解就可以了 那么在介绍CPU指令的执行过程之前
我们先来看一下CPU有哪些核心的部件
我们先来了解一下运算器中所包含的一些部件
运算器中包含最核心的部件就是算数逻辑单元
简称ALU,它是专门进行算数和逻辑运算的电路
这是运算器的核心了 为了辅助ALU发挥作用,还有几个重要的寄存器
一个呢,缓冲寄存器 它用於存放準備進入ALU進行運算的一些數據
累加寄存器AC,它用来暂时存放运算结果
还有一个状态寄存器,它用来存放系统工作的状态信息
在我们例子中用不到这个寄存器
我们再来看一下控制器中所包含的一些部分。首先,程序计数器 程序计数器是一个非常重要的东西
在程序计数器中保存着将要执行的下一个指令的地址
程序计数器会把这个地址放到地址寄存器中
地址寄存器的作用就是来缓存这个地址的,除此之外还有指令寄存器
指令寄存器,是用来缓存从存储器中取出的指令的
拿到这个指令之后呢,指令寄存器会把它交给指令密码器
指令密码器的主要作用就是对指令的语意进行解析
根据这个解析的结果呢,交给操做控制器和逻辑产生器
來產生相應的控制信號 这些我们只需要知道大致的作用就可以了,不必做特别详细的了解
在了解了这些步件之後呢,我们通过一个例子来看一下
CPU的执行过程。在这个例子中,我们要执行这样一条指令
我先来解释这一条指令,这个指令跟普通CPU指令是一样的
它包含两个部分 一个是指令码,一个是操作数。这个操作数在这里是一个地址
这个地址指向这片地址区域
这片地址区域里头放了相应的数据,是一个数
这个指令要做的事情,就是对这个数,进行加一的操作,把它加一
这就是这指令要完成的内容,那么这个指令是如何被执行的呢?
指令的执行从程序计数器开始,因为程序计数器中保存着指令的地址
首先程序计数器把指令的地址发送给地址寄存器 地址寄存器
到相应的存储单元中去把这条指令取出来,放入指令寄存器
指令寄存器拿到指令之后呢
交回指令密码器,对指令进行解码
看看这个指令要完成什么样的操作,经过分析发现
这个指令的操作数是一个地址,是一个地址,在这里
于是,控制器将这个地址传回地址寄存器
然后
在控制器的协调之下到相应的存储器空间中
取出这个数字,被操作数,将它送入
运算器的缓冲寄存器,第七步,而后,由缓冲寄存器送入ALU
由操作控制器,发送一个进行加一
操作的信号给算术逻辑单元ALU
由ALU完成运算,并把运算结果
放入累加器,运算结束 这就是这一条指令的执行过程
我们来回顾一下这条指令的执行过程,在这条指令的执行过程中
经历了按照地址取指令 然后按照地址再取数据,发送运算讯号,完成运算
这就是刚刚经历的主要过程
这就是一条指令大致的执行过程
这个部分我们仅仅给同学们参考 而不做任何要求,不需要你们掌握