Compiler
如何從版本 6 Unix 中理解這個 TMG 的彙編程式碼?
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-11R和Unix 彙編手冊,但不記得有任何解釋。
特別:
.
意思是“位置計數器”,但什麼是.3=.
?..
意思是“重定位計數器”,但什麼是..3
?(更糟糕的是,這種語法似乎只在 TMG 實現中遇到,而不是在 Unix V6 的任何其他源文件中遇到。並且,為了排除損壞程式碼或逐步淘汰語法的可能性,TMG 原始碼實際上是在Python中編譯的執行 Unix V6的 PDP-11 模擬器。)
.1
,..1
沒有特殊含義。它們是簡單的標識符(標籤、變數等)。除非用 聲明.globl
,否則預設情況下它們是本地的。那時是這樣,現在仍然是這樣。例如,
gcc
用於.
防止靜態變數與使用者定義的符號衝突。什麼是
.3=.
?它分配給名為
.3
位置計數器的值的本地符號(目前段內的偏移量)。