web-dev-qa-db-ja.com

このTMGのアセンブリコードをバージョン6Unixから理解するにはどうすればよいですか?

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を実行しています。)

6
Andriy Makukha

.1..1には特別な意味はありません。それらは単純な識別子(ラベル、変数など)です。 .globlで宣言されていない限り、デフォルトではローカルになります。

それが当時のことであり、今でもそうです。たとえば、gcc.を使用して、 静的変数 がユーザーによって定義されたシンボルと競合しないようにしています。

.3=.とは

.3というローカルシンボルにロケーションカウンターの値(現在のセグメント内のオフセット)を割り当てます。

2
mosvy