如何从版本 6 Unix 理解这个 TMG 的汇编代码?

And*_*kha 6 compiler historical-unix assembly

Unix 的早期版本包括 Doug McIlroy 的工具tmg(“transmogrifier”),一个早期的编译器-编译器。TMG 是用 Dennis Ritchie 的汇编语言以及 TMGL 本身(TMG 翻译成汇编的语言)实现的。这是TMG 的手册(1972)。是来自第 6 版 Unix 的完整源代码。

由于我试图了解 McIlroy 对 TMG 的实施是如何工作的,因此我正在阅读该文件tmgl.s,这tmgl.t是由 TMG 完成的翻译。我对以下摘录感到困惑:

.1=.
1
.2=.
2
.3=.
Run Code Online (Sandbox Code Playgroud)

和:

goto;..2
..3:null
..2:
Run Code Online (Sandbox Code Playgroud)

我阅读了PAL-11RUnix 汇编手册,但不记得有任何解释。

特别:

  • .意思是“位置计数器”,但什么是.3=.
  • ..意思是“搬迁柜台”,但什么是..3

(更糟糕的是,这种语法似乎只在 TMG 实现中遇到,而不是 Unix V6 的任何其他源文件。而且,为了排除损坏代码或逐步淘汰语法的可能性,TMG 源实际上是在Python 中编译的运行 Unix V6 的PDP-11 模拟器。)

小智 2

.1..1没有特殊意义。它们是简单的标识符(标签、变量等)。除非用 声明.globl,否则默认情况下它们将是本地的。

当时是这样,现在仍然如此。例如,gcc用于.防止静态变量与用户定义的符号发生冲突。

什么是.3=.

.3它分配给名为位置计数器值(当前段内的偏移量)的本地符号。