第5章 用寄存器机器计算

第5章 用寄存器机器计算

我的目标是展示出 heavenly天使 机器 不是 divine, live being生灵 的一种,
而是 clockwork 钟表匠(他认为时钟具有制作者赋与其的对工作的荣耀感的灵性)
的一种, 在一种最简单的和材料的力量的范围内  引起了几乎所有的 多种多样的[manifold] 运动[motion],
正如一种单独的 重力[weight] 引起了钟的所有的运动[motion]

以LISP语言写成的程序为单位,通过研究流程和描述流程,我们开始了本书的内容。
为了解释这些程序的含义,我们使用了一系列的解释模型:第一章的替代模型,
第三章的环境模型,和第四章的元循环的解释器。元循环的解释器的问答题特定了揭示出了
类LISP语言是如何被解释的大部分的奥秘。 但是即使是元循环的解释器,仍留下了重要的问题
没有回答,因为它没有做到阐明在LISP系统中的控制机制。例如,解释器没有阐明
子表达式的解释过程如何管理返回一个值到使用这个值的表达式,解释器也没有阐明一些递归程序生成了
迭代的执行过程,(也就是解释过程序使用固定大小的空间)而另一些程序生成递归的执行过程。
这些问题没有被回答,是因为元循环的解释器本身是个LISP程序,因此它继承了LISP系统的控制结构。
为了对LISP的解释器的控制结构提供一个更完整的描述,我们必须在一个比LISP本身更原生的层次上工作才行。

在这一章中,我们用一个传统的计算机的一步步地执行操作为单位,来描述流程。
这样一个计算机,或者说是寄存器机器,序列化地执行指令,这些指令操作一个
存储元素的有限的集合的内容。这个存储元素的有限的集合被叫做寄存器。一个典型的
寄存器机器指令应用一个原生的操作到一些寄存器的内容上并且把结果赋值给另外的寄存器。
我们的对于被寄存器机器执行的流程的描述看起来非常像传统计算机的机器语言的程序。
然而,取代对任何特定的计算机的机器语言的关注,我们通过对一些LISP程序的使用研究,
设计一个特定的寄存器机器,来执行任一个程序。因此,我们完成我们的任务从一个硬件的架构师
的角度而不是一个机器语言的计算机编程者的角度。在设计寄存器机器的过程中,
我们开发了为实现重要的编程的组装的机制,例如递归。我们也表示出一种语言,
为了描述寄存器机器的设计。在5.2部分,使用这些描述,我们实现了一个LISP程序,
来模拟我们设计好的机器。

我们的寄存器机器的原生操作的大部分内容都是很简单的。例如,一个操作是把从两个寄存器
取到的数相加,生成的结果存入第三个寄存器中。这样的操作能够被简单描述的硬件来执行。
为了处理列表结构,我们也使用内存的操作car,cdr,cons.它们都要求有一个 变得复杂的[elaborate]
存储分配的机制。在5.3部分中,我们用更底层的操作来实现它们。

在5.4部分中,在我们已经积累了写就寄存器机器的程序的经验以后,我们将设计一个机器,
来执行4.1部分中的元循环的解释器描述的算法。通过提供解释器的控制机器的一个隐式的模型,
这将弥补我们对SCHEME表达式如何被解释执行的理解上的空隙。
在5.5部分中,我们研究了一个简单的编译器,用来把SCHEME程序翻译成能够被寄存器机器
的寄存器和操作直接执行的指令序列。

猜你喜欢

转载自blog.csdn.net/gggwfn1982/article/details/82984357
今日推荐