185

鶏肉と卵とブートストラップについて聞いた。少し質問があります。

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

アセンブリはコンパイルまたはバイナリ命令に変換されますか?

...彼らがコンパイラをバイナリで書いたとは信じがたい。

4

6 に答える 6

143

アセンブリ命令は、(一般に)オペコードへの直接マッピングです。オペコードは、プロセッサが直接解釈できるマシンコードの(マルチ)バイト値です。一致するアセンブリ命令をリストしたテーブル(たとえば、6039マイクロプロセッサの場合など)からプログラムを検索し、メモリアドレス/オフセットを手動で決定することにより、オペコードでプログラムを直接作成することは非常に可能です。ジャンプのように。

最初のプログラムはまさにこの方法で行われました-手書きのオペコード。

ただし、ほとんどの場合、アセンブラを使用してアセンブリコードを「コンパイル」する方が簡単です。これにより、これらのオペコードルックアップが自動的に実行され、名前付きジャンプラベルなどのアドレス/オフセットの計算にも役立ちます。

最初のアセンブラーは手作業で作成されました。これらのアセンブラを使用して、より複雑なアセンブラをアセンブルし、高級言語用に記述されたコンパイラなどをアセンブルすることができます。次のツールセットの作成を簡素化するためにツールを繰り返し作成するこのプロセスは、ブートストラップと呼ばれます(David Rabinowitzが彼の回答で述べたように) 。

于 2009-10-31T07:02:51.470 に答える
48

コンパイラのブートストラップコンパイラの記述の歴史について読んでください

アイデアは、非常に単純なコンパイラをマシンコードで直接記述し、それを使用してより高度なコンパイラを記述し、2番目のコンパイラを使用して3番目のコンパイラを構築するというように、フル機能のコンパイラができるようになるまで続けます。

于 2009-10-31T07:02:42.843 に答える
39

卵は鶏よりずっと前にありました。ほとんどの「鶏と卵」の問題に対する答えは同じです:進化。生物学的進化を信じるのに苦労している人もいますが、不信は議論ではありません(google argumentsum adignorantiam)。

あなたの質問に直接答えるために:最初のコンパイラは(人間によって)アセンブリ言語で書かれました-アセンブラと呼ばれるプログラムはアセンブリ言語をバイナリに変換します。アセンブリ言語は、数字の代わりにオペコード名を使用し、アドレスを記号で表すなど、機械語の単なる記号形式であるため、これはコンパイルよりもはるかに単純なプロセスです。その後の多くのコンパイラもアセンブリ言語で書かれていました。しかし、最初のCコンパイラは、 Bで記述された修正Bコンパイラでした。最初のBコンパイラはTMGで書かれました。そのBコンパイラをコンパイルするために使用されるTMGコンパイラは、PDP-7アセンブリ言語で記述されていました。

于 2011-02-07T22:21:02.657 に答える
25

ウォズ氏は公開講演の1つで、彼が始めたとき、コンパイラーを買う余裕がなかったので、紙の上で手作業でバイナリーにコンパイルしたと述べました。さらにワイルドなものを見たい場合は、ビル・ゲイツとポール・アレンがAltair8800のBASICを作成した条件について読んでください。

「コンピューターをバイナリーで書く」ことに関して-プログラマーから一歩下がって、初期のコンピューターが何であったかを考えてください。高レベルのものはまだ存在していませんでした-それがすべてだったので、あなたは低レベルのすべてについて考えました。マシンコードを介して操作する基本的なロジックと算術を実行できるハードウェアがあり(これはコンパイルされたアセンブリです-琥珀はこの部分を手作業で行うのが難しい理由を説明しています)、このハードウェアに特定の数学的偉業を実行させたいと考えました。存在しないオペレーティングシステムについて心配する必要はありませんでした。ハードウェア(アセンブリ内)に、フィードする番号を操作する方法を指示しただけです。それはただの大きな計算機でした。今日のコンピューターは、一度に1つの抽象化で構築されました。

コンピュータを魔法のように感じさせる障壁を打ち破りたいのであれば、CharlesPetzoldやTheElements ofComputingSystemsのCODEを読むことを強くお勧めします。プログラミングの基本的な知識だけで、これらの素晴らしくアクセス可能な本はあなたにコンピュータを上から下まで理解させるでしょう。明らかに、コンプを取得することはできません。sci。またはたった2冊の本でEEの学位を取得しましたが、正式なトレーニングを逃した独学のプログラマーとして言えます。これらの本は私の世界を揺るがしました。

于 2010-09-20T16:45:00.570 に答える
11

最初のプログラムは(アセンブリ言語ではなく)機械語で書かれていました。実際の数字はスイッチを使用してコンピュータのメモリに接続されています。私たちは長い道のりを歩んできました...

時々、これはまだ少ししか起こりません-コードの小さなビットにパッチを当てたり、サンクを作成したりします。基本的な文字列に数字を打ち込んだことを思い出します。その後、初期のマイクロで小さくて高速なサブルーチンとして実行されました。また、PDP-11のフロントパネルのスイッチを切り替えて、大学のコースのメモリにブートローダープログラムを入力したことも覚えています。

これらのプログラムは、テキストファイルを処理して他のプログラムを作成するために使用されることがあり、出来上がりのプログラミング言語が作成されました。

于 2009-10-31T07:01:29.840 に答える
10

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

人間はそうしました。A-0システムについて読む:

1952年、グレースホッパーは、A-0として知られるスペリー用の最初のコンパイラを完成させました。A-0システムは、記号的な数学コードを機械語に変換できる一連の命令でした。A-0を作成する際に、彼女は何年にもわたって収集してきたすべてのサブルーチンを取り、それらをテープに入れました。マシンがテープ上でそれを見つけることができるように、各ルーチンには呼び出し番号が与えられました。「私がしなければならなかったのは、一連の呼び出し番号を書き留め、コンピューターにテープ上でそれらを見つけさせ、それらを持ってきて追加を行うことでした。これは最初のコンパイラーでした」とGraceは説明しました。

于 2009-10-31T07:06:22.027 に答える