计算机的诞生
前面讲了图灵机(Turing Machine),后来人们便朝着这个方向制造出了真正意义上的计算机,究竟这是一个怎样的过程呢,不妨可以梳理一下其中的脉络。
图灵机的提出是在20世纪中叶(1936年),而在之后的1947年就诞生了世界上的第一个晶体管(和电子管区别xxx),有了晶体管诞生,人们便开始脑洞大开,制造出了很多现在我们数电书中看到的与门,非门等等。科学家们当时估计一定也很exciting,于是又开始搭出了很多电路(这里包含组合电路和时序电路),组合电路里有加法器,译码器,数据选择器,设计出了组合电路,但当需要用到这些电路到具体计算时,科学家们想计算的结果放哪呢,于是乎想到还得有存储功能的电路把,然后当前的输出和我上一步的执行也应该有关系把,于是时序电路(移位寄存器,计数器阿)又出现了,好了,电路都有了,总得弄些更有意思的东西把,于是我估计是想到了计算器(对,科学家当时估计是想创造出一个伟大的计算器),把各种运算的电路组合搭建起来一个电路,至于叫什么,他们也打算叫计算器(其实是一个概念CPU),那时可能还没有CPU这个说法呢,不多说,上图:
分析一下这个电路,输入包括A[3:0],B[3:0],C,S0,S1,S2,S3,输出就一个,没啥说的。
A[3:0],B[3:0]代表运算时候输入的数字,C代表的是进位,S0,S1的编码00,01,10,11,四个编码刚好对应四个运算单元(加减……右移),不同编码对应操作数A,B执行不同的操作,S2,S3也是编码,该编码给到数据选择器上,不同的编码选择不同的通路输出,到底是加减还是与或,这肯定是要区分的,这样当操作数固定,输入不同,S0,S1,S2,S3编码就会进行不同运算,相应的运算就会通过相应的通道输出,讲到这里就清楚了S0,S1,S2,S3其实就是指令,S0,S1,S2,S3就是CPU中的指令集,具体如下表:
看了上面这张图就恍然大悟了,S0,S1,S2,S3就组成的4位二进制数就是计算机的机器指令,平时我们为了便于人们理解,就将Add,Sub这种助记符对应每一个机器指令,这也就是我们所说的汇编程序,够清楚把,编程其实本质上就是将这些机器指令有序的集合,就实现了解决一个特定的任务。再来看一下图灵机,图灵机是在纸带子上打二进制0或1,这些数字就代表了操作数和指令,然后图灵机就根据每一个小格子上的指令和数据对应机器现在的状态进行相关操作,小格子上的指令也就是我们这个概念CPU上的S0,S1,S2,S3,小纸带子上的数据就是A[3:0],B[3:0],C,这一下就清楚了,我们看似简单的一个电路实际上就是一个概念的CPU,它也完全符合图灵机的概念。
上面谈到了概念CPU的构思,直到1974年这个神奇的年份,Motorola 6800和Intel的8080相继诞生,但当时这两个CPU价格都很昂贵,人们开始发现一旦使得CPU的降低价格将会迎来一个巨大的市场。于是人们采取了很多尝试,削掉CPU的部分功能,精简设计,进而生产更廉价的CPU,CPU的简化设计以及市场的需求也催生了片上系统的产生(SOPC),System On Programmble Computer/Chip,这样一个片上系统也就成了我们今天所说的MCU了,Motorola在1978年诞生了第一个微控制器6801,它采用了6800 CPU一样的内部结构,8位数据总线,但与CPU6800最大不同在于它在片内集成了RAM和ROM(存储器),这就构成了片上计算机系统,也就成了MCU了,当然了,也可以将MCU看作是一个计算机主板,最后总结下MCU把,麻雀虽小,五脏俱全。