Unixの初期バージョンには、初期のコンパイラコンパイラであるDougMcIlroyのツール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 および nix Assembly のマニュアルを読みましたが、説明を思い出しません。
特に:
.
は「ロケーションカウンター」を意味しますが、.3=.
とは何ですか?..
は「移転カウンター」を意味しますが、..3
とは何ですか?(さらに悪いことに、この種の構文はTMG実装でのみ発生し、Unix V6の他のソースファイルでは発生しないようです。さらに、破損したコードや段階的な構文の可能性を排除するために、TMGソースは実際に- Python PDP-11コンパイラ Unix V6を実行しています。)
.1
、..1
には特別な意味はありません。それらは単純な識別子(ラベル、変数など)です。 .globl
で宣言されていない限り、デフォルトではローカルになります。
それが当時のことであり、今でもそうです。たとえば、gcc
は.
を使用して、 静的変数 がユーザーによって定義されたシンボルと競合しないようにしています。
.3=.
とは
.3
というローカルシンボルにロケーションカウンターの値(現在のセグメント内のオフセット)を割り当てます。