命令
仮想コンピュータ の命令
以下、
IN
(input) 〔IN〕
(Input port → Acc)
等は、 順に
ニーモニック
(名称) 〔書式〕
(動作)
を表しています。
1. 入出力命令
IN
(input) 〔IN〕
(Input port → Acc)
入力ポートのデータをアキュムレータに読み込みます。
OUT
(output) 〔OUT〕
(Acc → Output port)
アキュムレータのデータを出力ポートに出力します。
2. アキュムレータ操作命令
CLR
(clear) 〔CLR〕
(0 → Acc)
アキュムレータをクリアします。
INC
(increment) 〔INC〕
(Acc + 1 → Acc)
アキュムレータの値に 1 を加えます。
DEC
(decrement) 〔DEC〕
(Acc − 1 → Acc)
アキュムレータの値を 1 だけ減少させます。
SFT_L
(shift left) 〔SFT_L〕
(C ←[7 Acc 0]← 0)
アキュムレータのデータを左に 1 ビットシフトさせます。 最下位ビットには 0 が入り、 最上位ビットのデータはキャリーフラグに入ります。
SFT_R
(shift right) 〔SFT_R〕
(0 →[7 Acc 0]→ C)
アキュムレータのデータを右に 1 ビットシフトさせます。 最上位ビットには 0 が入り、 最下位ビットのデータはキャリーフラグに入ります。
3. インデックスレジスタ操作命令
SET_X
(set index register) 〔SETX adr〕
(adr → Ix)
インデックスレジスタに数値
(adr)
を代入します。 例えば、“SETX 10” でインデックスレジスタは‘10’
(2 進数では‘1010’)
になります。 “SET X 1010 ”、“SETX A”でも同じです。
INC_X
(increment index register) 〔INC_X〕
(Ix + 1 → Ix)
インデックスレジスタの値に 1 を加えます。
DEC_X
(decrement index register) 〔DEC_X〕
(Ix − 1 → Ix)
インデックスレジスタの値を 1 だけ減少させます。
4. リード・ライト命令
>READ
(read) 〔READ adr, READ IX〕
(M → Acc)
メモリのデータをアキュムレータに読み込みます。 例えば、“READ %10 ” で 10 番地のメモリのデータが、 “READ IX” ではインデックスレジスタにセットされている値の番地のメモリのデータが読み込まれます。
>WRITE
(write) 〔WRITE adr, WRITE IX〕
(Acc → M)
アキュムレータのデータをメモリに書き込みます。 例えば、“WRITE 10” では 10 番地に、 “WRITE IX” ではインデックスレジスタにセットされている値の番地のメモリにデータが書き込まれます。
5. メモリ操作命令
INC_M
(increment memory) 〔INC_M adr, INC_M IX〕
(M + 1 → M)
メモリの値に 1 を加えます。 例えば、“INC_M $A”では 10 番地、 “ INC_M IX”ではインデックスレジスタにセットされている値の番地のメモリの値に 1 が加えられます。
DEC_M
(decrement memory) 〔DEC_M adr, DEC_M IX〕
(M − 1 → M)
メモリの値から 1 を引きます。 例えば、“DEC_M A”では 10 番地、 “DEC_M IX”ではインデックスレジスタにセットされている値の番地のメモリの値から 1 が引かれます。
6. 算術演算命令
ADD
(aadr) 〔ADD adr, ADD IX〕
(Acc + M → Acc)
アキュムレータの値とメモリのデータを加算し、 その結果をアキュムレータに書き込みます。 例えば、“ADD #1010 ” では 10 番地、 “ADD IX” ではインデックスレジスタにセットされている値の番地のメモリの値と、 アキュムレータの値が加算されます。
SUB
(subtract) 〔SUB adr, SUB IX〕
(Acc − M → Acc)
アキュムレータの値からメモリのデータを減算し、 その結果をアキュムレータに書き込みます。 例えば、“SUB 1010 ” では 10 番地、 “SUB IX” ではインデックスレジスタにセットされている値の番地のメモリの値が、 アキュムレータの値から減算され、 結果がアキュムレータに残ります。
7. 比較演算命令
CMP
(compare) 〔CMP adr, CMP IX〕
(Acc − M)
アキュムレータの値からメモリのデータを減算しますが、 アキュムレータは更新されません。 演算結果によって Z、C フラグが変化します。
8. 論理演算命令
AND
(and) 〔AND adr, AND IX〕
(Acc・M → Acc)
アキュムレータの値とメモリのデータの論理積がアキュムレータに書き込まれます。 例えば、“AND %9” ではアキュムレータと 9 番地、 “AND IX” ではアキュムレータとインデックスレジスタにセットされている値の番地のメモリとの論理積になります。
OR
(or) 〔OR adr, OR IX〕
(Acc+M → Acc)
アキュムレータの値とメモリのデータの論理和がアキュムレータに書き込まれます。 例えば、“OR $9” ではアキュムレータと 9 番地、 “OR IX” ではアキュムレータとインデックスレジスタにセットされている値の番地のメモリとの論理和になります。
>NOT
(not) 〔NOT〕
(Acc → Acc)
アキュムレータの値の論理否定がアキュムレータに書き込まれます。 例えば、アキュムレータの値が “10001110” のときにNOT 命令を実行すると、“01110001” になります。
9. 分岐命令
JMP
(jump) 〔JMP adr〕
(adr → PC)
無条件にプログラムカウンタの値を変更します。 例えば、“JMP 9 ” 命令を実行すると、 プログラムカウンタは“1001” になり、 次には 9 番地の命令を実行します。
10. 条件分岐命令
JEZ
(jump on equal zero) 〔JEZ adr〕
(Z=1: adr → PC)
処理の結果が 0 の場合
(Z=1)
にプログラムカウンタの値が adr になり、 分岐します。 処理結果が 0 でない場合
(Z=0) は次の命令を実行します。
JNZ
(jump on not equal zero) 〔JNZ adr〕
(Z=0: adr → PC)
処理の結果が 0 でない場合
(Z=0)
にプログラムカウンタの値が adr になり、 分岐します。 処理結果が 0 の場合
(Z=1)
は次の命令を実行します。
JCS
(jump on carry set) 〔JCS adr〕
(C=1: adr → PC)
処理によってキャリーフラグが 1 になった場合
(加算の結果が 255 を越えた、 減算・比較の結果がマイナスになった、 あるいはシフト命令によって、 など)
にプログラムカウンタの値が adr になり、 分岐します。 キャリーフラグが 1 でない場合
(C=0)
は次の命令を実行します。
JCC
(jump on carry clear) 〔JCC adr〕
(C=0: adr → PC)
キャリーフラグが 0 の場合にプログラムカウンタの値が adr になり、 分岐します。 キャリーフラグが 0 でない場合
(C=1)
は次の命令を実行します。
11. その他
NOP
(no opration) 〔NOP〕
(no operation)
コンピュータは何もしません。 プログラムカウンタだけがインクリメントされて、 次の命令に進みます。 命令コードは “00000000” ですから、“CLR” ボタンをクリックしてメモリが全てクリアされた直後は、 すべて NOP 命令が書き込まれていることになります。
12. 疑似命令
STORE
(store) 〔STORE adr, n〕
(n → M)
疑似命令はコンピュータの命令ではなく、 アセンブラプログラムがアセンブル時に実行する命令です。 STORE は、 指定した番地 adr に値 n を書き込みます。 例えば、“ STORE 10, 100” は、“LOAD” ボタンをクリックしたときに、 メモリ 10 番地に値 100、 2 進数で “01100100” が書き込まれます。
STORE 命令で指定する番地や値は、 識別子をつけなければ 10 進数と見なされます。 16 進数や 2 進数を使用する場合は、 識別子“$”、“#” が必要です。 10 進数であることを明示する場合は識別子“%” を使用します。
END
(end) 〔END〕
(Stop)
プログラムの終了を表す疑似命令です。 プログラムの最後に必ず記入しなければなりません。
関連事項:
仮想コンピュータ
仮想コンピュータの使い方
アセンブラ仕様
命令セット
プログラム例
資料 (PDF)