[翻译]汇编器和加载器简史
来源:Assembler and loader
渣翻译啊,先来无事做。
A Short History of Assemblers and Loaders
汇编器和加载器简史
One of the first stored program computers was the EDSAC (Electronic Delay Storage Automatic Calculator) developed at Cambridge University in 1949 by Maurice Wilkes and W. Renwick [4, 8 & 97]. From its very first days the EDSAC had an assembler, called Initial Orders. It was implemented in a read-only memory formed from a set of rotary telephone selectors, and it accepted symbolic instructions. Each instruction consisted of a one letter mnemonic, a decimal address, and a third field that was a letter. The third field caused one of 12 constants preset by
the programmer to be added to the address at assembly time.
历史上第一台程序存储的计算机是剑桥大学的Maurice Wilkes和W.Renwick在1949年制造的EDSAC (Electronic Delay Storage Automatic Calculator) ,自从EDSAC被创建的第一天起,EDSAC就有一个叫Initial Orders的汇编器,它由一组旋转的电话选择器组成的只读存储器实现,汇编器接受符号指令,每一个指令包含一个单字母的助记符,一个十进制地址,第三个域也是一个字母,第三个由程序员在汇编时把预先设置的十二个常量之一添加到地址上。
It is interesting to note that Wilkes was also the first to propose the use of labels (which he called floating addresses), the first to use an early form of macros (which he called synthetic orders), and the first to develop a subroutine library [4].
非常有趣的是,Wilkes也是第一个简易使用标号(他称之为浮点地址)的人,第一个使用早期格式的宏(他称之为)的人,并且也是第一个开发子例程库的人。
Reference [65] is a very early description of the use of labels in an assembler The IBM 650 computer was first delivered around 1953 and had an assembler very similar to present day assemblers. SOAP (Symbolic Optimizer and Assembly Program) did symbolic assembly in the conventional way, and was perhaps the first assembler to do so. However, its main feature was the optimized calculation of the address of the next instruction. The IBM 650 (a decimal computer, incidentally), was based on a magnetic drum memory and the program was stored in that memory. Each instruction had to be fetched from the drum and had to contain the address of its successor. For maximum speed, an instruction had to be placed on the drum in a location that would be under the read head as soon as its predecessor was completed. SOAP calculated those addresses, based on the execution times of the individual instructions. Chapter 7 has more details, and a programming project, on this process.
参考书目[65]是一个使用标号的汇编器的早期描述,这个汇编器运行1953年首次发布的IBM 650计算机上,并且十分类似于今天的汇编器。SOAP(Symbolic Optimizer and Assembly Program)进行现在常见的符号汇编,有可能也是第一个支持这种特性的汇编器。然后这个汇编器最主要的特性是计算下一条指令的地址有极大的优化。IBM 650(顺带说明,是十进制计算机)的程序存储在磁鼓存储器中。每个指令从磁鼓中取出,并且包含下一条指令的地址。为了达到最快的速度,每条指令要前面一条指令完成的同时放到磁鼓的读磁头的下面。SOAP在每条指令运行时刻计算下条指令的地址。第七章有更多的细节描述,并且有一个编程项目。
One of the first commercially successful computers was the IBM 704. It had features such as floating-point hardware and index registers. It was first delivered in 1956 and its first assembler, the UASAP-1, was written in the same year by Roy Nutt of United Aircraft Corp. (hence the name UASAP—United Aircraft Symbolic Assembly Program). It was a simple binary assembler, did practically nothing but one-to-one translation, and left the programmer in complete control over the program. SHARE, the IBM users’ organization, adopted a later version of that assembler [9] and distributed it to its members together with routines produced and contributed by members. UASAP has pointed the way to early assembler writers, and many of its design principles are used by assemblers to this day. The UASAP was later modified to support macros [62]. In the same year another assembler, the IBM Auto coder was developed by R. Gold finger [10] for use on the IBM 702/705 computers. This assembler (actually several different Autocoder assemblers) was apparently the first to use macros. The Autocoder assemblers were used extensively and were eventually developed into large systems with large macro libraries used by many installations. Another pioneering early assembler was the UNISAP, [47] for the UNIVAC I & II computers, developed in 1958 by M. E. Conway. It was a one-and-a-half pass assembler, and was the first one to use local labels. Both concepts are covered in chapter 1.
第一个商业上取得成功的计算机型号是IBM 704,它有一些特性比如浮点硬件运算和变址寄存器,它于1956年发布,它的第一个汇编器UASAP-1,由联合飞机公司Roy Nutt编写的也于同年发布(所以那个名字UASAP是指United Aircraft Symbolic Assembly Program)。它是一个简单的二进制汇编器,除了一对一的翻译之外并不做设么特别的事情,并且不需要程序员的完全控制。IBM的用户组织SHARE,采纳了一个稍后的版本,并且集中了一些例程库给它的成员和一些贡献者。UASAP给早期的汇编器的编写者指出了关键的几点,许多设计原则到今天仍然在使用,UASAP后来被修改用来支持宏。在同一年,另一个汇编器,由R.Gold 编写的IBM自动编码器使用在IBM 702/705机型上。这个汇编器(事实上由几个不同的自动编码的汇编器组成)似乎是第一个使用宏的汇编器。自动编码汇编器带有一个巨大的宏库,被广泛的运用在许多开发大型系统的设备之中。
By the late fifties, IBM had released the 7000 series of computers. These came with a macro assembler, SCAT, that had all the features of modern assemblers. It had many directives (pseudo instructions in the IBM terminology), an extensive macro facility, and it generated relocatable object files. The SCAT assembler (Symbolic Coder And Translator) was originally written for the IBM 709 [56] and was modified to work on the IBM 7090. The GAS (Gen-eralized Assembly System) assembler was another powerful 7090 assembler [58]. The idea of macros originated with several people. McIlroy [22] was probably the first to propose the modern form of macros and the idea of conditional assembly. He implemented these ideas in the GAS assembler mentioned above. Reference [60] is a short early paper presenting some details of macro definition table handling.
One of the first full-feature loaders, the linking loader for the IBM 704–709–7090 computers [59], is an example of an early loader supporting both relocation and linking.
在50年代末期,IBM发布了7000系列的计算机。这些计算机统一使用一个叫SCAT的宏汇编器,SCAT有所有现代汇编器的特性。它支持很多伪指令directives (IBM的术语称之为伪指令pseudo instructions),广泛运用的宏,并且产生可重定位的目标文件。SCAT(Symbolic Coder And Translator)汇编器最初是写给709使用,后来经过修改使用在7090上。有几个人同时想到面向宏的汇编器,McIlroy恐怕是第一个建议使用现代的宏格式和条件汇编的人。他在GAS里实现了他所有的想法。参考书目【60】是一个短的早起论文,展现了宏定义处理的一些细节。
The earliest work discussing meta-assemblers seems to be Ferguson [24]. The idea of high-level assemblers originated with Wirth [61] and had been extended, a few years later, by an anonymous software designer at NCR, who proposed the main ideas of the NEAT/3 language [85,86]. The diagram summarizes the main phases in the historical development of assemblers and loaders.
看起来Ferguson开展了元汇编器的早期工作。Wirth提出了面向高层级并且带有扩展的汇编器的想法。许多年后,一位NCR的匿名软件设计者提出了关于NEAT/3语言主要思想。下图展示了汇编器和加载器主要的历史发展阶段。
I would like to present a brief historical background as a preface to the language specification contained in this manual.
— John Warnock Postscript Language Reference Manual, 1985.
我想介绍一下这个语言规范的简短历史背景作为这个手册的前言。
-John Warnock PostScript语言参考手册,1985
65. IBM 7090 Data Processing System, Reference Manual, IBM Form No. A22-6528.