Compiler

如何從版本 6 Unix 中理解這個 TMG 的彙編程式碼?

  • July 2, 2019

Unix 的早期版本包括 Doug McIlroy 的工具tmg(“transmogrifier”),一個早期的編譯器-編譯器。TMG 是用 Dennis Ritchie 的彙編語言以及 TMGL 本身(TMG 翻譯成彙編的語言)實現的。這是TMG 的手冊(1972 年)。是來自版本 6 Unix 的完整原始碼。

由於我試圖了解 McIlroy 的 TMG 實現是如何工作的,因此我正在閱讀該文件,該文件是由 TMG 完成tmgl.s的翻譯。tmgl.t我對以下摘錄感到困惑:

.1=.
1
.2=.
2
.3=.

和:

goto;..2
..3:null
..2:

我閱讀了PAL-11RUnix 彙編手冊,但不記得有任何解釋。

特別:

  • .意思是“位置計數器”,但什麼是.3=.
  • ..意思是“重定位計數器”,但什麼是..3

(更糟糕的是,這種語法似乎只在 TMG 實現中遇到,而不是在 Unix V6 的任何其他源文件中遇到。並且,為了排除損壞程式碼或逐步淘汰語法的可能性,TMG 原始碼實際上是在Python中編譯的執行 Unix V6的 PDP-11 模擬器。)

.1,..1沒有特殊含義。它們是簡單的標識符(標籤、變數等)。除非用 聲明.globl,否則預設情況下它們是本地的。

那時是這樣,現在仍然是這樣。例如,gcc用於.防止靜態變數與使用者定義的符號衝突。

什麼是.3=.

它分配給名為.3位置計數器的值的本地符號(目前段內的偏移量)。

引用自:https://unix.stackexchange.com/questions/527981