6.3 机器语言编程

在本节中,我们将继续描述如何在TOY中实现我们在本书前面所学习的Java语言机制,并完成一些TOY计算机上有趣的编程任务。我们的主要目标是让你相信,TOY编程与Java编程一样有趣、令人满意,TOY比想象的要强大得多。

具体来说,我们会学习如何在TOY的程序中实现函数、数组、标准输入输出和链接结构,也就是我们前面学过的编程的基本构建块。理论上,这些结构表明可以开发与我们编写的任何Java程序相对应的机器语言程序。事实上也确实是这样的,因为Java编译器就是这样做的。

当然,在资源方面可能会存在限制。我们真的能用4096位的内存完成实际的计算任务吗?本节的目标之一就是说服你,我们当然可以。不过,技术的进步已经使这种限制变得很小。在6.4节中,我们将讨论TOY的扩展,使它在这方面看起来更像是一个现代计算机,但不会改变编程模型。在这样的机器上,你当然可以编写TOY程序来执行任何计算任务,就像你编写Java程序在你的计算机上执行的计算一样。

在实践层面上,你会发现用机器语言实现各种任务都是切实可行的。实际上,许多早期的应用程序就是这样实现的,而且这种状况维持了很多年,因为当时使用高级语言的性能损失太大了。事实上,大多数这样的代码是用汇编语言(assembly language)编写的,汇编语言类似于机器语言,只是它允许操作码、寄存器和内存位置使用特定的符号名称(见练习6.4.13)来表示。在20世纪70年代,用汇编语言写就的、可以扩展到数以万行计的代码并不罕见。所以我们也是在回顾历史,但即使是现在,人们也会为性能关键的应用程序编写这样的代码。

最重要的是,我们的目标是让你了解计算机在运行程序时具体做了什么。

函数 在条件和循环之后,我们在第2章中学习的下一个控制流结构就是函数(function)。TOY的跳转指令是为此目的而设计的。实现函数的方式有很多种,由于我们的主要目标是展示这个概念,所以我们选择其中最简单的一种方法来进行。要实现一个函数,我们必须: ...

Get 计算机科学导论:跨学科方法 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.