24.4.9. 参考: 命令セット
命令セット一覧 #
| 種類 | 命令 | コード | 意味 |
|---|---|---|---|
| データ転送命令 | LDA n | 5 | n番地のデータをACCUMULATORに読み込む |
| データ転送命令 | STA n | 3 | ACCUMULATORの値をn番地に書き込む |
| 演算命令 | ADD n | 1 | n番地のデータをACCUMULATORの値に加える |
| 演算命令 | SUB n | 2 | n番地のデータをACCUMULATORの値から引く |
| 分岐命令 | BRA n | 6 | n番地にプログラムの実行を移す |
| 分岐命令 | BRZ n | 7 | ACCUMULATORのデータが0の場合,n番地にプログラムの実行を移す |
| 分岐命令 | BRP n | 8 | ACCUMULATORのデータが非負(0または正)の場合,n番地にプログラムの実行を移す |
| その他 | HLT | 0 | シミュレータの実行を停止する |
| その他 | OUT | 9 | ACCUMULATORの値をシミュレータのOUTPUTに出力する |
| その他 | OUT | 9 | ACCUMULATORの値を文字コードと見なして,対応する文字をシミュレータのOUTPUTに出力する |
| その他 | INP | 9 | シミュレータのINPUTに入力された値をACCUMULATORに読み込む |
| その他 | DAT | 命令ではなくデータを表す |
Little Man Computer - CPU simulator - help page http://en.wikipedia.org/wiki/Little_man_computer
Little Man Computerの制約 #
Little Man Computerの命令セットは,内部の理解を目的としているため,機能が限られています. より高度なシミュレータや,実際のCPUの命令セットとは以下のようにことなります.
表現できる数の範囲が -999から999に限られている :より大きな数を扱うためには,10進数の各桁(あるいは,2,3桁ごと)に分解して多倍長計算が必要になります.ただし,ここを頑張っても,次のアドレス空間の制限のため,できることは限られています.
:アドレス空間が 0-99 の100ワードしかない 実際のCPUと比べると 100万分の1以下なので,大きなプログラムや大きなデータを扱うことができません.
:加減算以外の四則演算命令,論理演算命令がない 加減算と条件分岐で代替する必要があります.
:インデックスレジスタがない 配列のようなデータ構造を表現する際には,命令を書き換える(たとえば「LDA 0」と「DAT 10」を組み合せて「LDA 10」という命令を作って実行する)必要があります
:サブルーチンジャンプがない 関数などを実装するための「プログラムの一部にジャンプするが,return命令で戻ってくる」のような仕組みがありません.そのため,ジャンプする前に,呼び出されるプログラムの最後の命令を「BRA ??」のように,戻ってきて欲しい番地へのジャンプに書き換える必要があります.