随着我们的解读,计算机的结构已经越来越清晰,我们知道将计算机指令组合在一起成为程序来控制硬件工作,这样巧妙的通过编写不同的软件来控制相同的硬件以完成不同的任务,以增强系统灵活性。我们也知道计算机指令无非也就是传传数据,作作运算。但是我们仍不知道对于每一条指令的执行,计算机是如何控制的。
cpu内部控制
和pc体系机构一样,cpu内部也是一个有机整体,分成很多部件来一起完成cpu的功能。与外部总线相连的有地址缓冲器MAR,数据缓冲器MAR。内部功能部件有运算器ALU,与运算器相关的是累加器 ACC,与指令相关的是指令计数器pc, 指令寄存器 IR等。与外部cpu指令控制pc接口之间的数据交互一样,在cpu内部,通过微指令来控制数据在cpu内部以及与外部总线的数据流向开关。我们可以为cpu构筑一个简单的模型,如下图。
MRD和MAR与外部的总线相连,分别用来缓存总线数据和发送地址给总线。pc是程序计数器用来存放下一条指令的地址。IR是指令寄存器用来存放从内存中取出的地址。AC是累加器,与外部总线相连,同时作为ALU运算器的一个操作数以及运算结果。CU是控制器,他根据IR中指令中的操作码,结合时钟信号,发出一系列的控制信号。现在我们来看看cpu是如何从内存中取出指令来执行的。
1,控制信号C(0)有效,打开PC送往MAR的控制门,pc中的地址达到MAR中。
2,控制信号C(1)有效,打开MAR送往地址总线的输出门。
3,通过控制总线向主存发读信号。
4,控制信号C(2)有效,打开数据总线送至MDR的输入门。
5,C(3)有效,打开MDR和IR之间的控制门,至此,指令送至IR
6,C(4)有效,打开指令操作码送至CU的输出门,CU在操作码和时钟的控制下产生该指令的各种控制信号。
7,使PC 内容加1。
指令译码
真的是很简单,cpu执行指令其实就只需要针对每个指令,记住它的时序控制序列,知道每个指令在执行的时候,每个时钟周期应该发特定的控制信号来联通两个元件,使数据从一个元件进入另一个元件,或者与总线进行交互。显然,每个指令的执行,都是发一些不变的控制信号,每一条指令其实就是对应于一系列的开关动作,每一个开关动作就是所谓的微操作,而且我们还可以把这些微操作写在固件里,只要升级固件,就可以完成对指令操作的修改或者升级。
上图中的cpu模型没有考虑到cpu的内部总线,cpu内部元件之间是直接连在一起的,我们也可以改进这个模型,用内部总线将各部件连在一起,然后再设置每个元件进出总线的开关,这样我们同样可以通过控制信号,来控制数据从一个元件通向另一个元件,图下图所示。
在这种高超的设计下,计算机得以智能的的运行,同时我们看到,计算机其实就是一个普通的自动控制系统而已。只是由于设计的巧妙,他看起来是那么的智能,那么的不可思议。