10

コンパイラのコースを受講し、初歩的なものを自分で作成しましたが、最初のコンパイラについてはまだ疑問が残っています。

高レベルから低レベルまで、C または C++ で実行されているコードが、そのコンパイラ (gcc としましょう) によって同等のそれぞれのアセンブリ言語に変換されます。このコードはプラットフォームに依存します (インテル x86 アーキテクチャを使用しているとしましょう)。

ハードウェアはどのようにアセンブリを実行するのでしょうか。

私のコンピューター編成クラスから、すべてのアセンブリ ステートメントが特定の形式 (プロセッサに応じて) に変換されることを覚えています。アセンブリ言語プログラムのすべてのステートメントを機械語コードに変換するとしたら、最初のアセンブラーはどのように作成されたのでしょうか?

4

3 に答える 3

11

実際、私はあなたが理解していると思います。まずタイトルの質問から、ハードウェアはどのようにアセンブリを実行しますか。ハードウェアは、機械語、機械語、またはその他の用語で実行されます。あなたが正しく説明したように、アセンブリはそのマシンコードの代表であり、常にではありませんが、1つのasm命令と1つのマシン命令の1対1の関係に近いです。これらはビット、1、および 0 であり、ハードウェアはビットが表すアクションを実行できるようになりました。

では、最初のアセンブラはどのように書かれているのでしょうか? 鉛筆と紙で。言語を完全に定義していない可能性があるため、通常、ある種の疑似アセンブリで命令を書き留めてから、アセンブラーが行うのと同じことをエンコードに基づいてビットを書き留めます。次に、何らかのメカニズムを使用して、それらのビットをコンピューターに送り込み、実行するように指示します。

最終的に、当然、これは大規模なプログラムでは面倒になるため、より簡単に記述できる言語を解析する大規模なプログラムを作成し、それをより複雑な言語やプログラムで繰り返すことにします。

今日でも、チームと彼らがどのように物事を行うか、個々のエンジニアが命令デコーダーをテストするかなどによって異なります。機械語を手作業で書くことは今でも行われています。最終的にアセンブラが作成され、それに切り替えます。時には、より高いレベルのコンパイラがあり、コーディングの大部分をそのコンパイラに切り替えることもありますが、チップ開発の世界では、依然として十分に認識されており、時々変更されます。マシンコードレベルでの命令のビット。

于 2012-08-17T14:18:04.850 に答える
5

フロントパネルで「トグルイン」されたか、紙テープから読み取られました。バイナリを作成し、スイッチを設定するか、手動で穴を開けて、頭の中でオペコードを変換できます。伝説によると、Seymour Cray は最初の Cray OS 全体にこの方法で入りました。

于 2012-08-17T14:15:56.130 に答える
2

「ハードウェア」、主に CPU とメモリは、ほぼ有限状態マシンです。その状態/出力と入力は、おおよそレジスタとメモリの内容です。

FSM が「理解する」マシンコードにコンパイルされたプログラムは、FSM を状態から状態へと駆動します。それが「ハードウェアがアセンブリを実行する」方法です。

最初のアセンブラー/コンパイラーがクロスコンパイル (別のプラットフォームで開発およびコンパイル) されていない限り、最初のアセンブラー/コンパイラーは手動で作成および機械語コードに変換され、次にそれらが入力されます。

于 2012-08-17T15:14:07.300 に答える