你是否想过,计算机为何会加减乘除?或者更直接一点,计算机的原理究竟是什么?设计
Waitingforfriday有一篇详细的教程,讲解了如何本身动手,制做一台四位计算机。从中能够看到,二进制、数理逻辑、电子学怎样融合在一块儿,构成了现代计算机的基础。3d
什么是二进制blog
首先,从最简单的讲起。教程
计算机内部采用二进制,每个数位只有两种可能"0"和"1",运算规则是"逢二进一"。举例来讲,有两个位A和B,它们相加的结果只可能有四种。ci
这张表就叫作"真值表"(truth table),其中的sum表示"和位",carry表示"进位"。若是A和B都是0,和就是0,所以"和位"和"进位"都是0;若是A和B有一个为1,另外一个为0,和就是1,不须要进位;若是A和B都是1,和就是10,所以"和位"为0,"进位"为1。input
逻辑门it
布尔运算(Boolean operation)的规则,能够套用在二进制加法上。布尔运算有三个基本运算符:AND,OR,NOT,又称"与门"、"或门"、"非门",合称"逻辑门"。它们的运算规则是:两个输入(A和B)都为1,AND(与门)就输出1;只要有任意一个输入(A或B)为1,OR(或门)就输出1;NOT(非门)的做用,则是输出一个输入值的相反值。它们的图形表示以下:io
真值表的逻辑门表示table
如今把"真值表"的运算规则,改写为逻辑门的形式:先看sum(和位),咱们须要的是这样一种逻辑:当两个输入不相同时,输出为1,所以运算符应该是OR;当两个输入相同时,输出为0,这能够用两组AND和NOT的组合实现。最后的逻辑组合图以下:基础
再看carry(进位)。它比较简单,两个输入A和B都为1就输出1,不然就输出0,所以用一个AND运算符就好了。
如今把sum和carry组合起来,就能获得整张真值表了。这被称为"半加器"(half-adder),由于它只考虑了单独两个位的相加,没有考虑可能还存在低位进上来的位。
扩展的真值表和全加器
若是把低位进上来的位,当作第三个输入(input),也就是说,除了两个输入值A和B之外,还存在一个输入(input)的carry,那么问题就变成了如何在三个输入的状况下,获得输出(output)的sum(和位)和carry(进位)。
这时,真值表被扩展成下面的形式:
若是你理解了半加器的设计思路,就不难把它扩展到新的真值表,这就是"全加器"(full-adder)了。
全加器的串联
多个全加器串联起来,就能进行二进制的多位运算了。
先把全加器简写成方块形式,注明三个输入(A、B、Cin)和两个输出(S和Cout)。
而后,将四个全加器串联起来,就获得了四位加法器的逻辑图。
逻辑门的晶体管实现
下一步,就是用晶体管作出逻辑门的电路。
先看NOT。晶体管的基极(Base)做为输入,集电极(collector)做为输出,发射极(emitter)接地。当输入为1(高电平),电流流向发射极,所以输出为0;当输入为0(低电平),电流从集电极流出,所以输出为1。
接着是AND。这须要两个晶体管,只有当两个基极的输入都为1(高电平),电流才会流向输出端,获得1。
最后是OR。这也须要两个晶体管,只要两个基极中有一个为1(高电平),电流就会流向输出端,获得1。
全加器的电路实现
将三种逻辑门的晶体管实现,代入全加器的设计图,就能够画出电路图了。
按照电路图,用晶体管和电路板组装出全加器的集成电路。
左边的三根黄线,分别表明三个输入A、B、Cin;右边的两根绿线,分别表明输出S和Cout。
制做计算机
将四块全加器的电路串联起来,就是一台货真价实的四位晶体管计算机了,能够计算0000~1111之间的加法。
电路板的下方有两组各四个开关,标注着"A"和"B",表明两个输入数。从上图能够看到,A组开关是"上下上上",表明1011(11);B组开关是"上下下下",表明1000(8)。它们的相加结果用五个LED灯表示,上图中是"亮暗暗亮亮",表明10011(19),正是1011与1000的和。
虽然这个四位计算机很是简陋,可是从中不难体会到现代计算机的原理。完成上面的四位加法,须要用到88个晶体管。虽然当代处理器包含的晶体管数以亿计,可是本质上都是上面这样简单电路的累加。