我和小宇早恋了,我们家住隔壁。晚上父母会把手机没收,但我们还想继续聊天,又不敢发出声音,于是我们想到了这个办法。我们把所有的中文都用灯泡的亮灭组合来表示,同时约定好每隔一秒读取一次灯泡的状态并记录下来,这是我们的暗号。这样,我们虽然没有了手机,依然可以日以继日地聊天,虽然效率很低,但依然很快乐。我和小宇就这样在不经意间,将语言转换成为了灯泡的亮灭组合,这个过程叫做编码。
我和小宇就这样一直秘密保持着通话,直到上了大学,父母再也管不了我们用手机了。但这么多年的小灯泡通话,使我们总觉得事情没那么简单,于是我们开始了一些新的探索。我们增加了一个开关。此时当两个开关同时闭合时,灯泡才会亮。这样两个开关与灯泡之间,不再是之前简单的对应关系了,而是有了逻辑。
慢慢地,我们发现了越来越多的玩法。十进制数可以转换成二进制数,而二进制数又可以对应到门电路的输入端与输出端。
于是我和小宇有了一个大胆的想法,能不能设计一个计算加法的电路呢?经过不懈努力,终于发现这个电路可以由异或门和与门两个门电路组成。这个装置实现了二进制的一位加法,但它并不完美,因为只考虑了这两个数的进位输出,但没有考虑上一位的进位,所以只能叫半加器。如果将前一个进位考虑进来,只需再多一个半加器,并且拼接一个或门即可。此时我们已经建立好了一个完美的一位加法器,并自豪地称之为全加器。
有了可读写的内存,我们就可以事先把几个数字存储内存中了,接下来,我们能否让算术逻辑单元 ALU 自动地读取这个数字,进行加法运算呢?我们先引入一个新的组件,10 位计数器,这里的 Clk 就接入我们在第四部分讲的时钟信号,Clr 是清零端,具体效果下面动图一目了然。计数器的输出就是 0,1,2,3,4,5,可以当作内存中的地址。
我们将累加求和这个过程自动化了!之后如果想计算累加和,只需要用控制面板事先在内存里存好数据就可以了!是不是很方便?我们还想要更多的自动化!现在这个装置,只能无脑地将 RAM 中的数据从头到尾一直累加下去,无法选择加哪个不加哪个,也无法选择什么时候停止。我们可以再增加一个 RAM,这个 RAM 里存放的数据,表示指令的含义!