私のクラスの 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 よりも基本的な言語はないため、ここにコンパイラはありません。
別の言い方をすれば、それ自体がアセンブリで記述できない場合、アセンブリ コードをアセンブルするプログラムをどのように作成するかということです。天才によってバイナリで直接書き込まれ、プロセッサのプログラムメモリにハードコードされていますか? マイクロプロセッサーで直接実行できるアセンブラーを作成する実際的な方法を想像するのに苦労しています。