是一个与一通汇编机如此不同的两通汇编程序?

问题描述 投票:0回答:1

在一个通用汇编程序中,该程序逐行读取源代码。该程序以最好的能力来汇编该行,如果有远程参考,它会留下占位符并保存以后的位置。然后,当定义未定义的标签时,或者在收集所有标签时,可以解决正向引用。

在两个通行的汇编程序中,第一个通行证只是收集了所有标签及其地址。但是,要知道地址,它需要知道说明的大小。为了确定大小,它需要词汇分析行,解析并检查它是有效的代码。然后它可以计算大小。

如果您要付出所有的努力,则不妨完全组装这条线,然后将二进制文件写入输出。如果您不这样做,那么一旦我们进入第二次,就必须重复征服/解析/代码生成过程,这似乎真的很愚蠢和浪费。唯一无法组装的行是具有正向引用的行,但对于一通汇编器而言,情况也是如此。似乎两个通行的汇编程序实际上与一个通行组件的实现几乎具有相同的实现。 我只是误会了什么?

一个和两个通行的组件可能在您描述的级别上看起来相同,但是细节并不相同。两通汇编程序中的符号表只是名称和值的列表。 Pass 2确实可以重新恢复,但它也以相同的方式处理所有参考。运行时内存使用量取决于程序中的符号数量。

一通汇编器中的符号表必须存储前向引用,并且在定义符号时,您必须编写算法以解决它们。这值得只解析源一次吗?不同的现实世界汇编者的回答不同。此外,运行时内存的使用量取决于符号的数量和程序中的正向引用数量。 您可以通过一些技巧来改善一通汇编器。在许多大型机和一些微型计算机上,所有说明都是相同的。如果所有指令都可以保留一个地址,并且内存可以保留要组装的整个程序,则一通汇编器可以将正向引用存储在程序本身内的链接列表中。或者,汇编器可以写出二进制文件
assembly
1个回答
0
投票
并让加载程序修复它们。

一个通行组件的主要原因是慢速I/O设备。如果它们是磁带,则计算机必须倒带胶带之间的胶带。如果他们是打孔纸带读取器或打孔卡读取器,那么人必须倒带胶带或重新加载卡片。结束通行证节省了大量时间。

两个通行组装商的主要原因是一种复杂的输入语言,尤其是宏。 IBM大型机大量使用的宏。他们可以提出争论,并可以根据论点扩展到专业指导序列。因此,您必须扩展所有宏并组装所有代码才能找到输出的大小,因此最容易使用两个通行证。

有些示例汇编器:

(1957)对于IBM 650的SOAPII自动更改了输出程序的内存布局以加快执行。这是可能的,因为650的说明格式很重要,因为650的磁鼓内存具有可变的访问时间。 (1960)

lgpSap

对于一般精度LGP-30是一个直接的两次汇编程序,直接组装到内存中,但也键入清单。我不确定您是否可以打一个二进制纸带。有人创建了一个名为

SCOOP

的更快,更强大的一通汇编器。 Scoop还直接组装到内存中,并重复使用LGPSAP符号表格式。实际上,勺代码似乎是LGPSAP的补丁! LGP-30(从1956年起)不是一台功能强大的计算机,但您可以坐在其中,键入命令并立即得到响应 - 在1950年代和1960年很少见。

(1961)

Scat

为IBM 709具有宏,并使用压缩格式存储组装程序。您可以使用新的汇编语言卡更新已经组装的程序。 IBM 709和7090的

(1962)Fap也有宏,与Scat无关。

(1962)

Macro对于DEC PDP-1,将所有操作编码放入符号表中,因此“指令”输入实际上只是添加了符号值,或者您可以使用其他算术操作。它为宏定义使用了简短的符号名称和压缩格式,以便可以在具有4096 18位内存单词的计算机上组装自身。 (1974)Fail为DEC PDP-10具有宏和许多其他精美功能,但使用了一个速度。赞成一通票(第12页)的论点看起来与您的论点非常相似。失败将所有正向引用,包括复杂的算术表达式,包括加载器。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.