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

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

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 ??」のように,戻ってきて欲しい番地へのジャンプに書き換える必要があります.