8.停止 00000001
编译器将这些指令和寄存器分配到储存器的地址中,这个操作使获得了一个地址寄存器(例如,下文程序编译结果中第1行中的“10”),寄存器获得另一名称(例如,下文程序编译结果中第1行中的“11”、“12”)。储存器中的程序编译结果
储存器中的程序编译结果,可能如下:[4]
第1行 {比较寄存器01,10}
10 00000011
111
1210
第2行{如果0跳至寄存器10101=21}
1300000100
1410101
第3行{输出字符1001111=O}
1500000101
161001111
第4行{输出字符1001011=K}
1700000101
181001011
第5行{跳至寄存器1101=25}
1900000101
201101
第6行{输出字符1001110=N}
2100000101
221001110
第7行{输出字符1001111=O}
2300000101
241001111
第8行{停止}
2500000001
每个寄存器是一列触发器,每个触发器只能出现两种状态中的一种状态:或开,或关。所以,编译程序的计算机等同于某一特定触发器构造——有些为开,有些为关。为运行程序,需要人按下一个按钮,或者等价地通过将第一个指令复制到指令寄存器中,开启物理进程。如此设计的计算机(硬连线),当指令寄存器的触发器设置成如00000011时,它便可执行一个比较过程——将寄存器1和2的内容进行比较,在匹配寄存器里产生1或者0。程序展示的下一个指令被复制到指令寄存器里,机器持续这样的提取-操作-存储循环直到停止——符合所有的物理以及电子工程法则。机器里没有虚幻的魂魄,只是程序指令的句法编译成物理触发器的不同排列。这就是我们是怎样使机器做我们命令它做事的。
冯·诺依曼机与图灵机
冯·诺依曼机克服了图灵机的许多缺点:(1)NMs的存储既允许直接(完全的、随机的)存取,也可以间接(或相对的)存取,而TM只允许间接(或相对的)存取。(2)程序作为数据也可在存储器中储存。(3)具有现实的计算元件作为算法单元(TMs没有现实的目标的环路)。有人认为,前两点是“冯·诺依曼机结构的重要突破”(haugeland,1985:143)。冯·诺依曼结构允许在全部过程中插入“子路径”,也就是说,可在计算过程中的任意一点进行调用。当子路径执行结束后,计算还会从它断掉的地方开始,就好像这个子路径只是程序的前指令。子路径的使用引起了计算系统的“模块理论”,这意味着一旦子路径能够正确运行,可以插入到程序中任何需要的地方完成运算。且不管被调用多少次,只储存一次。如果一个程序,由很多之前已经调试过的子路径组装而成,那么它运作起来功能会更好。如果有些地方出现了错误,子路径可以较快地分离出这个错误点:首先找到错误子路径,然后处理。最后,是机器如何计算它所计算的函数的问题。不同的结构有不同的“复杂特性”——运行不同算法所需步骤数量、时间以及使用内存的大小都不相同。在个别情况下,这两种不同的结构并不能直接执行相同的算法,“例如,用一台图灵机检查一个符号串需要的基本步骤数,随所储存的符号数目的平方而增长。而如果用‘寄存器结构’(通常称作随机存取存储的加工结构…)(指冯·诺依曼机)来完成这件事,在特定条件下其时间复杂性与所储存串数目无关……有些事情图灵机是不可能完成的,尽管在算法上图灵机与之弱等价……而寄存机器……却可适用于多种算法,包括二值搜索。在二值搜索过程中,寄存机器运用比较而将剩余选项组的筛选范围逐渐缩小,如‘20问题游戏’(20问题游戏(Twenty Questions Game),参加者包括回答者和提问者。首先,回答者在心里面先想好某一确定对象,如北极熊。然后,提问者开始对回答者提出回答者只能作出“是”、“不是”或者“不知道”回答的问题。例如,问“是否是一种动物”,答“是”。回答者不能说谎,是游戏得以进行的前提。提问者在提出20个问题之前,如果猜对回答者心里想的对象目标,则赢得游戏。按照信息理论,此游戏最多可确定有关某一对象的20 bit信息。也就是说,如果每一问题可消除有关某一对象的一半不确定性,那么20个问题可区分220种情形。因此,提问者的最佳提问方式是使每一问题能对所有剩余可能性中的一半得到确认或消除。文中说的“二值搜索”,就是采用这种策略,将“剩余选项组的筛选范围逐渐缩小”,最终得出最佳答案。——译者注)……这在图灵机的计算结构中不能直接执行”(pylyshyn,1984:97-9)。