Little Man Computer CPUシミュレータの命令セット

詳しくは,Little Man Computer - CPU simulator - help pagehttp://en.wikipedia.org/wiki/Little_man_computerを参照.
種類命令コード意味
データ転送命令LDA A5アドレスAのデータを演算レジスタに読み込む
データ転送命令STA A3演算レジスタの値をアドレスAに書き込む
演算命令ADD A1アドレスAのデータを演算レジスタの値に加える
演算命令SUB A2アドレスAのデータを演算レジスタの値から引く
分岐命令BRA A6アドレスAにプログラムの実行を移す
分岐命令BRZ A7演算レジスタのデータが0の場合,アドレスAにプログラムの実行を移す
分岐命令BRP A8演算レジスタのデータが非負(0または正)の場合,アドレスAにプログラムの実行を移す
その他HTL0シミュレータの実行を停止する
その他OUT9演算レジスタの値をシミュレータのOUTPUTに出力する
その他OUT9演算レジスタの値を文字コードと見なして,対応する文字をシミュレータのOUTPUTに出力する
その他INP9シミュレータのINPUTに入力された値を演算レジスタに読み込む
その他DAT命令ではなくデータを表す

自分でプログラムを書く人向けのガイド

Little Man Computerの命令セットは,内部の理解を目的としているため,実際のCPUの命令セットとはかなり機能が限られています.自分でプログラミングする人向けにいくつか注意点をあげます.
表現できる数の範囲が -999から999
より大きな数を扱うためには,10進数の各桁(あるいは,2,3桁ごと)に分解して多倍長計算が必要になります.ただし,ここを頑張っても,次のアドレス空間の制限のため,できることは限られています.
アドレス空間が 0-99 の100ワード
実際のCPUと比べると 100万分の1以下なので,大きなプログラム,大きなデータを扱うことができません.
加減算以外の四則演算命令,論理演算命令がない
加減算と条件分岐で代替する必要があります
インデックスレジスタがない
配列のようなデータ構造を表現する際には,命令を書き換える(たとえば,「LDA 0」と「DAT 10」を足し合わせて,「LDA 10」という命令を作り,実行する予定の領域に書き込む)必要があります
サブルーチンジャンプがない
関数などを実装するための,「プログラムの一部にジャンプするが,return命令で戻ってくる」のような仕組みがありません.そのため,ジャンプする前に,呼び出されるプログラムの最後の命令を「BRA ??」のように,戻ってきて欲しい番地へのジャンプに書き換える必要があります