为什么Apollo任务的软件是用汇编而不是高级编程语言编写的?

时间:2017-06-24 20:52:45

标签: assembly lisp programming-languages

根据this articlethis question的答案,用于阿波罗11号任务的软件是第一个登上月球的人,用汇编语言

我觉得这很令人震惊,因为该项目始于1960年,任务发生在1969年。此时已有几种高级编程语言可供使用。例如Lisp,这是一种相当高级的语言,即使使用垃圾收集,现在仍在使用。

假设垃圾收集的高级语言减少了编程中人为错误的可能性以及当局的高风险规避,为什么管理者允许这么大的危险呢?

2 个答案:

答案 0 :(得分:10)

如果你看一下硬件规格(2 K RAM,36 K硬连线内存),只有手工制作的汇编语言才能有效地完成任何有用的工作。高级语言编译器通常会生成大量多余的代码和低效的内存处理,因为它是通用的。 Apollo 11中的软件非常具体,考虑到准备时间,应该可以正确地测试几千字节的代码。

答案 1 :(得分:6)

维基文章:

https://en.wikipedia.org/wiki/Apollo_Guidance_Computer

大多数(但不是全部)程序被硬编码到只读核心内存中。在计算机中使用所有NOR门的原因之一是它们具有抗辐射性。虽然wiki文章后来提到了RAM和ROM,但RAM实际上意味着读取和写入核心内存,而ROM意味着只读核心内存。

所有登陆月球的阿波罗任务,包括Apollo 11,都使用了AGC的Block II版本,该程序具有36千字(72千字节)的只读核心内存,以及2千字节(4096字节)的读写核心存储器(其中一些用于程序的某些部分以允许一些在飞行中的变化)。

回到OP的问题,AGC(阿波罗指导计算机)上使用的指令集不是高级语言友好的。这是一个多线程(单核)程序。考虑到代码的相对较小,少于36,000个指令字,并且多年来对代码所做的改动相对较少,创建和测试某种类型的编译器需要花费更长的时间。

在8位家用电脑和游戏机的早期,几乎所有为这些系统编写的游戏和其他程序都是用汇编语言编写的,通常大小在16KB到64KB之间。