1. ホーム
  2. compiler-construction

[解決済み] 最初のコンパイラはどのように書かれたのですか?

2022-04-16 04:48:33

質問

鶏と卵、ブートストラップについて聞いたのですが。いくつか質問があります。

何かをバイナリ命令に変換する最初のコンパイラは、何を書いたのでしょうか?

アセンブリはコンパイルされているのか、それともバイナリ命令に変換されているのか?

...バイナリでコンパイラを書いたとは考えにくいですね。

解決方法は?

アセンブリ命令は、(一般に)オペコードに直接マッピングされます。オペコードは、プロセッサが直接解釈できる機械コードの(マルチ)バイト値です。オペコードを表(たとえば 6039マイクロプロセッサはこちら 例えば、アセンブリ命令と一緒にリストアップされたものを、ジャンプなどのためにメモリのアドレスやオフセットを手で決定するのです。

最初のプログラムは、まさにこの方法で作られたのです。

しかし、ほとんどの場合、アセンブラを使ってアセンブリコードをコンパイルする方が簡単です。アセンブリコードは自動的にオペコードの検索を行い、名前付きジャンプラベルのアドレスやオフセットなどを計算するのにも便利です。

最初のアセンブラは手書きでした。そのアセンブラを使って、さらに複雑なアセンブラを組み立て、そのアセンブラを使って、さらに高度な言語用のコンパイラを組み立てる、というように。このように、次のツールの作成を簡単にするために、繰り返しツールを書いていくプロセスを、David Rabinowitzは次のように呼んでいます(彼の回答で言及されています)。 ブートストラップ .