6

私のクラスの 1 つで、コンピューター アーキテクチャとプログラミングについてゼロから学んでいます。つまり、pMOS/nMOS 回路から始め、論理ゲートに移り、論理ゲートを使用してレジスタと組み合わせ論理ユニットを作成し、小さなマイクロプロセッサ アーキテクチャ (私のクラスの場合は LC-3) を分析しました。

次に行ったのは、アセンブリでプログラムを作成することでした。ここで少し混乱しました。

たとえば ADD R0, R1, R2、レジ​​スタ 1 と 2 の内容を加算し、レジスタ 0 に格納する必要があります。機械語として (クラスで学習したアーキテクチャでは)、この命令は次のようになり0001 000 001 000 010、あるレベルでは、そのバイナリ ワードがどのように処理されるかを理解しています。次に、プロセッサ内のさまざまなマルチプレクサと制御ユニットで適切な値を設定する電圧信号に変換されます。

私の質問は、アセンブラによってどのようにADD R0, R1, R2変換されるのですか? 0001 000 001 000 010私のレベルの理解者にとって、このプロセスは高水準言語のコンパイルに似ているように思えます。ただし、コンパイラを記述するのに Assembly よりも基本的な言語はないため、ここにコンパイラはありません。

別の言い方をすれば、それ自体がアセンブリで記述できない場合、アセンブリ コードをアセンブルするプログラムをどのように作成するかということです。天才によってバイナリで直接書き込まれ、プロセッサのプログラムメモリにハードコードされていますか? マイクロプロセッサーで直接実行できるアセンブラーを作成する実際的な方法を想像するのに苦労しています。

4

2 に答える 2

13

はるか昔、遥か彼方の銀河系で、最初のアセンブラがマシンコードで直接書かれました。ただし、アセンブラがあれば、それを使用して新しいアセンブラをアセンブルしたり、コンパイラをアセンブルしたりすることもできます。

コンパイラを入手したら、それを使用して新しいアセンブラをコンパイルできます。

したがって、実際には、アセンブラは現在、高水準言語で記述されています。多くの場合、C または C++。それらがどのように機能するかというと、非常に単純なアセンブラは、基本的に単なる大きな switch ステートメントです。オペコードを認識し、対応するマシン エンコーディングに変換します。

于 2012-10-31T17:06:01.987 に答える
5

私は実際にこの正確な問題をやっています: アセンブラなしでアセンブラを組み立てます。私がやっている方法は、Excelスプレッドシートを使用することです。スプレッドシートには、オペコードなどを検索してバイナリ出力を計算するための式が含まれています。昔は、コンピューターベースのスプレッドシートの代わりに紙のスプレッドシートを使用していたことを除いて、彼らは同じことをしていました. これは私の手動アセンブラーのスクリーンショットです。強調表示された領域はマシンコードです。

手動アセンブラのスクリーンショット

右側の領域はアセンブリ コードです。左側の領域は中間計算です。ここにクローズアップがあります:

手動アセンブラーのクローズ アップ

したがって、質問に対する簡単な答えは、昔は手作業で組み立てるために、紙のスプレッドシートを使用していました。現在、手作業で組み立てるには、コンピューターのスプレッドシート (私は Excel を使用) を使用します。

私のスプレッドシートでは、「エンコード」というラベルの付いた列が実際のバイナリ コード (マシン コード) です。組み立て手順は、それらが何をしているかの説明とともに右側にあります。

于 2012-10-31T17:32:45.220 に答える