15

重複の可能性:
最初のコンパイラはどのように作成されましたか?

この質問はいつも私を悩ませてきました。プログラムをコンパイルするには、プログラムの一種でもあるコンパイラが必要ですが、コンパイラをコンパイルしたのは何ですか?最初のコンパイラはアセンブリまたはマシンコードで書かれていると誰かが私に言った。しかし、それについて考えると、それはまだ完全な話ではありません。結局のところ、オペレーティングシステムとドライバーがなくても、マシンコードはハードドライブからRAM、CPUにどのように移行するのでしょうか。ドライバーはなんらかの方法でプログラムされている必要がありました。

非常に初期のコンピューターにはスイッチがあり、スイッチを切り替えてビットを示すことができたのは知っています。私は、スイッチから、コンピュータープログラムに指示することなく、CPUにマシンコードを読み取らせる方法への飛躍がどのように行われたのか疑問に思っています。

4

3 に答える 3

16

簡単な答え:最初のプログラムは生のマシンコードで細心の注意を払って書かれ、そこからすべてが構築されました。

このアイデアはブートストラップと呼ばれます。プロセッサ、フラッシュメモリ、およびハードディスクを備えたベアマシンがあるとします。通常、プロセッサは電源投入時に、不揮発性メモリ(CMOSやフラッシュなど)の固定位置からブートローダーと呼ばれる単純なオペレーティングシステムをロードするように構成されています。このOSは非常にシンプルで、実際のOSが存在するディスク上の場所にコンピューターを向けるのに十分な機能を備えています。このOSは、最終的にOS全体が稼働するまで、ますます多くのデバイスをオンにし、ますます複雑なプログラムをロードできます。

しかし、このブートローダーは何で書かれていますか?もともと、これらは生のマシンコードで書かれ、マシンにハードコードされていました。実行するプログラムもマシンコードで記述されるため、信じられないほど遅く、操作が面倒になります。最終的に、誰かがマシンコードで最初の単純なアセンブラを作成しました。このアセンブラを入手したら、アセンブラ自体を含め、アセンブリでプログラムの記述を開始できます。実際、単純なアセンブラがあれば、マシンコードを再度記述する必要はありません。アセンブリでアセンブラを書き続けることができます!

この時点から、最初に既存のツール(アセンブラーなど)を使用してコンパイラーを作成し、コンパイラーが基本的なプログラミングを実行できるように十分な機能を利用できるようにすることで、より複雑なプログラミング言語を構築できます。次に、そのコンパイラを使用してプログラミング言語自体のコンパイラを作成し、同じトリックを使用して前の作業を基に、より大きくてクールなものを作成します。この手法は現在でも使用されています。ほとんどのコンパイラは、コンパイル先の言語で記述されています。

要約すると、過去のあるひどい時点ですべてを手作業で行わなければなりませんでしたが、これを行った人々の努力のおかげで、私たちはすでにそこにあるものから構築することができます。

于 2011-01-23T07:42:55.767 に答える
6

マイクロコンピュータ業界の初期には、トグルスイッチを使用して直接マシンコードを入力する必要がありました。これは、最初のハードコードされていないプログラムのコンピューターが行われた方法と非常に似ていました。

初期のAltairマシンの詳細については、ここを参照してください。基本的に、アドレスとデータのバイナリスイッチを設定し、コマンドスイッチを使用してそれをメモリに書き込みます。はい、一度に1バイトです。当時、私たちは「本物の男」でした:-)

その同じサイトから、サンプルプログラムを入力するために使用される詳細なプロセスがあります。

また、実際にマシンXでマシンXのプログラムをコンパイルする必要がないことにも注意してください。マシンがある程度洗練されたレベルに達すると(たとえば、マシンYはプログラムを切り替えずに実行できるようになります)、次を使用できます。クロスアセンブラとクロスコンパイラを使用して、マシンXのマシン言語を実際に作成します。

次に、そのプログラムのバイナリイメージをマシンXに取り込む方法が必要でした。それは必ずしも簡単ではありませんでしたが、スイッチを切り替えるよりも簡単でした。

于 2011-01-23T08:22:00.823 に答える
0

昔々、コンピュータを使用するために、マシンコードをバイナリで入力しました。人々はそれをするのにうんざりしていたので、彼らはアセンブリを読むプログラム(機械語を使って)を作りました。しばらくして、彼らはアセンブリで書くのが面倒だと気づいたので、アセンブリを使ってFORTRANなどの高級言語を作成しました。

完全なストーリーを入手するには、大学に入学して、CSまたはCOMPEのクラスを受講してください。

于 2011-01-23T07:42:19.417 に答える