Little Computer 3(LC-3 )は、コンピュータ教育用プログラミング言語の一種であり、アセンブリ言語であり、低レベルプログラミング言語の一種です。
比較的単純な命令セットを備えていますが、中程度に複雑なアセンブリ プログラムの作成に使用でき、C コンパイラの実行可能なターゲットです。この言語はx86アセンブリほど複雑ではありませんが、より複雑な言語に似た多くの機能を備えています。これらの機能により、初心者向けの指導に便利なため、コンピュータ サイエンスやコンピュータ エンジニアリングの学生にプログラミングとコンピュータ アーキテクチャの基礎を教えるために最もよく使用されます。
LC-3は、テキサス大学オースティン校のYale N. Pattとイリノイ大学アーバナ・シャンペーン校のSanjay J. Patelによって開発されました。命令セットの仕様、LC-3の全体的なアーキテクチャ、およびハードウェア実装は、教科書の第2版に記載されています。[1] LC-3とPattとPatelの本に基づいたコースは、多くのコンピュータ工学およびコンピュータサイエンスの学部で提供されています。
建築仕様
LC-3 はレジスタのワード サイズを 16 ビットに指定し、2 16ロケーションのアドレス空間を持つ 16 ビットのアドレス指定可能なメモリを使用します。レジスタ ファイルには、R0 から R7 までの番号で示される 8 つのレジスタが含まれています。すべてのレジスタは汎用であり、レジスタ ファイルに書き込むことができるすべての命令で自由に使用できますが、一部のコンテキスト (C コードから LC-3 アセンブリへの変換など) では、一部のレジスタが特別な目的で使用されます。
命令は 16 ビット幅で、4 ビットのオペコードを持ちます。命令セットは 16 個の可能なオペコードのうち 15 個の命令を定義しますが、一部の命令には複数の動作モードがあります。個々の命令の実行は、制御ROMとマイクロシーケンス ユニットで実装されたステート マシンによって制御されます。
このアーキテクチャは、キーボードとモニターを使用して入出力を制御することをサポートしています。このサポートは、メモリ マップされた I/O抽象化によって提供されます。シミュレーションでは、これらのレジスタに直接アクセスでき、その内容はアーキテクチャ仕様で説明されています。高レベルの I/O サポートも、TRAP 命令と基本的なオペレーティング システムの使用によって提供されます。オペレーティング システムには、キーボードから文字を読み取ってエコーする機能、個々の文字をモニターに印刷する機能、パック形式とアンパック形式の両方で文字列全体を印刷する機能、およびマシンを停止する機能が用意されています。
LC-3 内のすべてのデータは2 の補数表現で保存されると想定されており、符号なし演算は個別にサポートされていません。I/O デバイスはASCII文字で動作します。LC-3 には浮動小数点数のネイティブ サポートはありません。
Patt と Patel のテキストに記載されているハードウェア実装はパイプライン化されておらず、最適化もされていませんが、コンピューター アーキテクチャのより高度な概念を使用して高速な実装を作成することは確かに可能です。
命令セット
LC-3 命令セットは 15 種類の命令を実装し、16 番目のオペコードは後で使用するために予約されています。アーキテクチャはロード ストア アーキテクチャです。メモリ内の値は、操作する前にレジスタ ファイルに取り込む必要があります。
使用可能な算術命令には、加算、ビット AND、ビット NOT があり、最初の 2 つはレジスタと符号拡張された即値の両方をオペランドとして使用できます。これらの操作は、減算 (値を否定する) やビット左シフト (加算命令を使用して値を 2 倍する) など、いくつかの基本的な算術演算を実装するのに十分です。LC-3 は、NOT と AND を組み合わせると論理的に完全になるため、任意のビット論理関数を実装することもできます。
メモリ アクセスは、プログラム カウンタ(PC)の現在の値またはレジスタ ファイル内のレジスタに基づいてアドレスを計算することによって実行できます。さらに、LC-3 は間接ロードおよびストアを提供します。間接ロードおよびストアでは、メモリ内のデータの一部をアドレスとして使用して、データのロード元またはデータのストア先として使用できます。メモリ内の値は、算術演算または論理演算の一部として使用する前に、レジスタ ファイルに取り込む必要があります。
LC-3 は、無条件および条件付きの制御フロー命令の両方を提供します。無条件分岐は、レジスタ値または PC 相対オフセットで指定された場所に実行を移動します。3 つの命令 (JSR、JSRR、および TRAP) は、プログラム カウンタの値を変更する前に、サブルーチンを呼び出すコードのアドレスをレジスタに格納することにより、サブルーチン呼び出しの概念をサポートします。LC-3 は、2 つの値の直接的な算術比較をサポートしていません。条件分岐は、レジスタ ファイルに書き込まれた最後のデータの算術符号 (負、ゼロ、または正) に基づきます。2 つのレジスタ値の差を計算するには、1 つのレジスタ値の負の等価性を見つけ、次に、負の数を 2 番目のレジスタの正の値に追加する必要があります。2 つのレジスタの差は、ユーザーが使用できる 8 つのレジスタの 1 つに格納されます。この格納された値の符号は、条件分岐に使用されます。
LC-3命令セットには専用のポートマップI/O命令のためのスペースが残っていないため、ハードウェア実装では通常、メモリマップの一部をメモリマップI/O用に予約します。[2]
プログラミング言語のサポート
LC-3 は物理チップ上に実装されていないが、Linux/Unix、Mac OS X、Windows 環境でのシミュレーションに使用できる。シミュレーション ツールには、ラベル付きのコンピューターによるオフセット計算と、アセンブリ コードのブロックへの定数、文字列、空のメモリ位置の挿入をサポートするアセンブラが含まれている。LC-3 で C 言語を使用するための規則もある。サンプルのアセンブラ、コンパイラ、シミュレータは McGraw-Hill から提供されている。[1]
CとLC-3
LC-3 上の C 関数の呼び出し規約は、x86 ISA などの他のシステムで実装されているものと似ています。C プログラムを実行すると、アーキテクチャは、呼び出しスタックと動的メモリ割り当て用のスペースを含むメモリモデルを維持します。このモデルでは、プロセッサの 8 つの汎用レジスタのうち 4 つが特別な役割を果たします。R4 はグローバル データの読み込みと格納のベース レジスタとして使用され、R5 は呼び出しスタック上の現在の関数の領域を指すために使用され、R6 はスタック ポインタとして使用されます。さらに、R7 は通常、関数呼び出しからの戻りアドレスの格納用に予約されています。JSR、JSRR、および TRAP 命令は、実行中に戻りアドレスをこのレジスタに自動的に格納します。
このモデルで C 関数が呼び出されると、関数のパラメータがスタックに右から左にプッシュされます。次に、呼び出される関数の戻り値、呼び出し元の戻り先命令のアドレス、および呼び出し元の R5 の値のためのスペースがスタック上に確保されます。呼び出される関数のローカル変数は、宣言された順序でスタックにプッシュされます。LC-3 にはネイティブの PUSH 命令と POP 命令がないため、スタックを実装するには、加算命令とメモリ格納命令を別々に使用する必要があることに注意してください。
LC-3b
LC-3b ISA は、次の変更を含む LC-3 の修正バージョンについて説明します。
- マシンのワード サイズは 16 ビットのままですが、メモリは同じアドレス空間でバイト アドレス指定可能になりました。
- LD 命令と ST 命令 (PC 相対アドレス指定を使用してデータをロードおよび保存する) は削除されました。
- LDI および STI 命令 (間接ロードおよびストア) は、PC 相対アドレス指定ではなく、レジスタ ベースのアドレス指定を使用します。
- メモリの個々のバイトを操作するために、LDB と STB の 2 つの命令が追加されました。その他のロード命令とストア命令は、引き続きワード全体に対して動作します。
- 予約済みのオペコードは、両方向の任意のサイズの算術シフトと論理シフトをサポートするシフト命令 SHF に変換されました。
これらの変更により、LC-3b のハードウェアは LC-3 よりも若干複雑になります。たとえば、LC-3b では、さまざまなサイズのデータの読み込みと保存を適切に処理するために、シフター (LC-3 には必要ありません) とメモリ ユニット内の追加ロジックが必要になります。
参照
参考文献
- ^ ab Patt, Yale N. ; Patel, Sanjay (2003). コンピューティングシステム入門: ビットとゲートから C まで、そしてその先へ。ニューヨーク、NY: McGraw-Hill Higher Education。ISBN 0-07-246750-9. 2010年10月6日閲覧。
- ^ Yuan-Jhang Liao および Wing-Kwong Wong。「マイクロプロセッサ ラボ向け FPGA 開発ボードでの LC-3 ソフト コアの使用」。2013 年、「Intelligent Technologies and Engineering Systems」612-613 ページ。
- ^ Patel, Sanjay; Patt, Yale N. (2019年8月15日)。コンピューティングシステム入門: ビットとゲートからC/C++までとその先へ(第3版)。McGraw Hill。656ページ。ISBN 978-1-260-15053-7。
外部リンク
- HERA: Haverford 教育用 RISC アーキテクチャ[リンク切れ ]
