自 动 操 作
本人节选自《编码——隐匿在计算机软硬件背后的语言》一书
我们人类的创造能力与勤奋精神常常令我感叹不已,但人类的本性却是相当懒惰的。举个简单而又常见的例子,我们总是不情愿工作。我们对工作的反感是如此的强烈——当然人类也很聪明——以至于情愿花费大量的时间去设计并制造一些设备,哪怕这些设备只能将工作时间缩减几分钟。悠闲地躺在吊床上,看着自己刚发明的新奇工具自动修剪草坪,没有什么事情能比这更让我们快乐的神经为之一动了。
很可惜,我并不打算在本章中介绍自动割草机的设计。在这里我们将学会设计更加先进的机器,目标就是要使加减法的过程自动化,这听起来有些难以置信。但是,本章最终设计出的机器用途将十分广泛,因为它可以解决所有能用加、减法处理的问题,而事实上现实中的很多问题都是可以用加法与减法来解决的。
当然,随着机器变得越来越精密,其复杂程度也越来越高,因此对其构造的某些部分理解起来比较困难。因此如果你略去了某些复杂的细节,这也是在情理之中,没有人会为此责怪你。有时,我们会感到焦躁不安,甚至厌倦,发誓再也不会为了解决一个复杂的数学难题而去求助于某些电子或机械设备。但是请保持耐心,在本章的末尾我们将会设计出一种机器,我们可以称它为计算器(Computer)。
回忆我们曾在第14章讨论过的一个加法器。这个版本的加法器包括一个8位的锁存器,用于对8个开关的输入数据进行迭代求和。下面是其结构图。
从图中可以看出,8位锁存器利用触发器来保存8位数据。使用这个设备时,首先需要按下清零开关使锁存器中的内容全部都变为0,然后通过开关输入第一个数。加法器只是简单地将这个数字和锁存器输出的0进行求和,因此相加的结果与原先输入的数字是一样的。按下相加开关可以把这个数保存在锁存器中,最后会点亮某些灯泡以显示它。现在通过开关输入第二个数,加法器把它与已经存放在锁存器中的第一个数相加。再次按下相加开关,就可以把相加的结果存入锁存器中,并通过灯泡显示这个结果。通过这种方式,可以把一串数相加并显示运行结果。显然,这种设计方案存在一个缺陷:8个灯泡无法显示大于255的数。
对于第14章所介绍的这种电路,目前为止只讲到了一种锁存器,它是电平触发(level triggered)的。在电平触发的锁存器中,为了保存数据必须将时钟输入端首先置1,然后回置为0。当时钟输入端为1时,锁存器的数据输入端可以改变,而这些变化将会影响到数据输出。在第14章的后半部分还介绍了边沿触发(edge-triggered)的锁存器,这种锁存器在时钟输入从0跳变为1的瞬间保存数据。边沿触发器在很多方面更加易于使用,因此假定本章用到的所有触发器都是边沿触发的。
用来累加多个数的锁存器称做累加器(accumulator)。在本章的后面将会看到累加器不仅仅做简单的累加,它还充当着锁存器的角色,保存第一个数,并且和下一个数做加法或减法运算。
很显然,上面的加法器存在着一个很大的缺陷:假如要把100个二进制数加起来,你必须端坐于加法器前,并且耐心地输入所有的数并累加起来。但是当你终于完成时,却发现其中有两个数输错了,而你只能重复一遍所有的工作。
但是,也许并非如此。在前一章我们使用了大约500万个继电器构造了一个64 KB的RAM阵列。除此之外,我们还把一个控制面板连接到电路帮助我们工作,闭合它的控制(Takeover,有些书中也称“接管”)端开关后,就可以使用其他开关来控制RAM阵列的读写。下面是64 KB RAM阵列结构图。
如果把这100个二进制数输入到RAM阵列中而不是直接输入到加法器中,一旦需要修改一些数据,我们的工作将会变得容易得多。
因此我们所现在面临的挑战就是如何把RAM阵列和累加器连接起来。很显然,RAM阵列的输出信号可以替代加法器的开关。而你也许想不到,用一个16位的计数器(比如我们在14章构造的那种)就可以控制RAM阵列的地址信号。在这个电路中,RAM阵列的数据输入信号和写操作端信号可以省去。修改后的电路结构图如下所示。
当然,这并不是迄今发明的最易于使用的计算设备。要使用它,首先要闭合清零开关,这样做的目的是,清除锁存器中的内容并把16位计数器的输出置为0000h,然后闭合RAM控制面板的控制端开关。现在你可以从地址0000h开始输入一组你想要相加的8位数。如果有100个数,那么它们将被存放在0000h~0063h的地址空间中(也应该把RAM阵列中未使用的单元设置为00h)。然后闭合RAM控制面板的控制端开关(这样控制面板就不再控制RAM阵列了),同时断开清零开关。做完了这些,我们可以静静地坐下来,观察灯泡显示运算结果。
作者:[美]佩措尔德(Petzold,C.)著
译者:左飞,薛佟佟 译
ISBN 978-7-121-10610-1
出版日期:2010年5月
定 价:55.00元
开本:16开
页码:392页
内 容 简 介
这是一本讲述计算机工作原理的书。不过,你千万不要因为“工作原理”之类的字眼就武断地认为,它是晦涩而难懂的。作者用丰富的想象和清晰的笔墨将看似繁杂的理论阐述得通俗易懂,你丝毫不会感到枯燥和生硬。更重要的是,你会因此而获得对计算机工作原理较深刻的理解。这种理解不是抽象层面上的,而是具有一定深度的,这种深度甚至不逊于“电气工程师”和“程序员”的理解。
不管你是计算机高手,还是对这个神奇的机器充满敬畏之心的菜鸟,都不妨翻阅一下本书,读一读大师的经典作品,必然会有收获。
同类书推荐:天书夜读:从汇编语言到Windows内核编程
本书详细信息:http://www.broadview.com.cn/10610
更多图书信息:www.broadview.com.cn
想即时获取更多图书及活动资讯,赶快加入博文视点读者俱乐部 吧!