マシンレベル1 | マシンレベル3 | マシンレベル3 | |
レベル1機械語 | 実行可 | 不可 | 不可 |
レベル2機械語 | 実行可 | 実行可 | 不可 |
レベル3機械語 | 実行可 | 実行可 | 実行可 |
命令コード <16進数) | ニーモニック | 機能 |
0f〜7f | システム予約 | |
10〜7f | 16bitアドレス(マシン・レベル1) | |
80〜bf | 32bitアドレス(マシン・レベル2) | |
c0〜ef | 予約 | |
f0〜7f | システム予約 |
コード (16進数) | ニーモニック | 機能 |
後報 | COLD START | |
後報 | HOT START | |
後報 | emit | ASCII文字Cをターミナルに出力 |
後報 | key | 次に入力されるASCII文字をTOSに得る |
後報 | qterm | ブレークキーを押したか否かのチェックをする |
後報 | expect | システム予約 |
後報 | setdrv | システム予約 |
後報 | setio | システム予約 |
後報 | sec_rd | システム予約 |
後報 | sec_wt | システム予約 |
コード (16進数) | 命令長 | ニーモニック | パラメータ | 機能 |
後報 | 3 | lit [n] | --- n | 命令語のオペランド(n)をTOSに積む |
後報 | 1 | dup | n --- n n | TOSをコピーする |
後報 | 1 | over | n1 n2 --- n1 n2 n1 | 2ndをコピーする |
後報 | 1 | rot | n1 n2 n3 --- n2 n3 n1 | TOS,2nd,3rdの3データを回転し 3rdがトップとなるようにする |
後報 | 1 | drop | n --- | TOSを捨てる |
後報 | 1 | r> | --- n | リターンスタックのトップをTOSにコピーし
リターンスタックの トップは捨てる。 r>は「R from」と読む |
後報 | 1 | >r | n --- | TOSをリターンスタックのトップにコピーし
TOSは捨てる。 >rは「to R」と読む |
後報 | 1 | i | --- n | リターンスタックのトップをTOSにコピーする。 リターンスタックは影響を受けない。 |
後報 | 1 | sp@ | --- n | TOSのメモリアドレス、すなわちパラメータ
スタックポインタ の値をスタック (TOS)に得る |
後報 | 1 | rp@ | --- n | リターンスタックのメモリアドレス、すなわち
リターンスタックポインタの値を スタックに得る |
後報 | 1 | sp! | --- | パラメータスタックを初期化する |
後報 | 1 | rp! | --- | リターンスタックを初期化する |
コード (16進数) | 命令長 | ニーモニック | パラメータ | 機能 |
後報 | 1 | @ | addr --- n | TOSで示される番地のメモリ2バイトの内容を
読み、 それをTOSに積む。 番地は捨てられる。 @は「fetch」と読む |
後報 | 1 | ! | n addr --- | 2ndの値をTOSで示される番地のメモリ 2バイトに格納する。 !は「store」と読む。 |
後報 | 1 | c@ | addr --- b | TOSで示される番地のメモリ1バイトの内容を
読み、 それをTOSに積む。 番地は捨てられる。 c@は「c fetch」と読む |
後報 | 1 | c! | b addr --- | 2ndの値の1バイトをTOSで示される番地のメモリ 1バイトに格納する。 c!は「c store」と読む。 |
後報 | 1 | 2@ | addr --- 2d | TOSで示される番地のメモリ4バイトの内容を
読み、 それをTOSに積む。 番地は捨てられる。 2@は「two fetch」と読む |
後報 | 1 | 2! | d addr--- | 2nd,3rdの値をTOSで示される番地のメモリ 4バイトに格納する。 2!は「two store」と読む。 |
コード (16進数) | 命令長 | ニーモニック | パラメータ | 機能 |
後報 | 1 | + | n1 n2 --- sum | 単精度(2バイト)の2整数の和を求める |
後報 | 1 | - | n1 n2 --- diff | 2ndからTOSを引いた差を求める diff=n1 - n2 。単精度 |
後報 | 1 | minus | n1 --- n2 | TOSの符号を反転する |
後報 | 1 | < | n1 n2 --- tf (n1<n2のとき) ff (n1>n2のとき) | 大小判断し結果のフラグをTOSに求める |
後報 | 1 | 0= | n --- tf (n1=0のとき) ff (n1≠0のとき) | ゼロの検査をする 「真」「偽」フラグの反転にも使用します (NOTと同じ) |
後報 | 1 | 0< | n --- tf (n1<0のとき) ff (n1≧0のとき) | 負符号の検査をする 0<はn 0 <の略記 |
後報 | 1 | 1+ | n1 --- n2 | TOSに1を加える |
後報 | 1 | 1- | n1 --- n2 | TOSから1を引く |
後報 | 1 | 2+ | n1 --- n2 | TOSに2を加える |
後報 | 1 | 2- | n1 --- n2 | TOSから2を引く |
後報 | 1 | 2* | n1 --- n2 | TOSの2倍を求める |
後報 | 1 | 2/ | n1 --- n2 | 単精度符号付き整数n1を2で除しその商n2 を求める。割り切れないときは商は 切り捨てられる |
後報 | 1 | and | n1 n2 --- n3 | n1とn2のビット毎の論理積を求める |
後報 | 1 | or | n1 n2 --- n3 | n1とn2のビット毎の論理和を求める |
後報 | 1 | xor | n1 n2 --- n3 | n1とn2のビット毎の排他的論理和を求める |
後報 | 1 | d+ | d1 d2 --- dsum | 倍精度(4バイト)の2整数の和を求める |
後報 | 1 | dminus | d1 --- d2 | 倍精度整数の符号を反転する |
後報 | 1 | u* | u1 u2 --- ud | 単精度符号なし整数u1とu2の積を 倍精度符号なし整数udに求める |
後報 | 1 | u/ | ud u1 --- u2 u3 | 倍精度符号なし整数udを単精度 符号なし整数u1で割り、単精度符号なし 整数の余りu2と商u3を求める |
後報 | 1 | s->d | n --- d | 符号付き単精度整数nを符号付き倍精度 整数dに変換する。s->dは 「singl to double」と読む |
後報 | 1 | +! | n addr --- | TOSで示される番地の2バイトの内容に 2ndを加える。+!は「plus store」と読む |
コード (16進数) | 命令長 | ニーモニック | パラメータ | 機能 |
後報 | 3 | bsr [n] | --- | 命令語のアドレスからオペランド(n)で 示される相対番地のサブルーチンに分岐する リターンアドレスはリターンスタックに積まれる |
後報 | 1 | rts | --- | サブルーチンからメインルーチンに戻る |
後報 | 1 | jmp | addr --- | TOSで示す絶対番地(addr)に分岐する |
後報 | 1 | leave | --- | do 〜 loopまたはdo 〜 +loopの間で用い リターンスタックの限界値を制御値と等しく することによりloopまたは+loopに到達したとき ループを終了する。詳細は擬似命令の do、loop、+loopを参照 |
コード (16進数) | 命令長 | ニーモニック | パラメータ | 機能 |
後報 | 3 | bran [n] | --- | 命令語のアドレスからオペランド(n)で 示される相対番地に分岐する |
後報 | 3 | 0bran [n1] | n2 --- | TOS(n2)の値が0なら 命令語のアドレスからオペランド(n1)で 示される相対番地に分岐する TOSが0でないなら0branの次の命令を実行 |
後報 | 1 | (do) | n1 n2 --- | TOSはリターンスタックのトップに 2ndはリターンスタックの2ndに移される |
後報 | 3 | (loop) [n] | --- | リターンスタックのTOS(制御値)に1を加え 加えた値がリターンスタックの2nd(限界値) 以内なら(loop)命令のアドレスからnで で示される相対番地に分岐する |
後報 | 3 | (+loop) [n1] | n2 --- | リターンスタックのTOS(制御値)にn2を加え 加えた値がリターンスタックの2nd(限界値) 以内なら(+loop)命令のアドレスからn1で で示される相対番地に分岐する |
内部処理用 擬似コード (16進数) | ニーモニック | パラメータ | 機能 |
後報 | if | f ---(実行時) |
次の形で使用する if (真の処理) endif if (真の処理) else (偽の処理) endif |
後報 | else | --- | |
後報 | endif | --- | |
後報 | do | n1 n2 ---(実行時) |
次の形で使用する do (反復実行する処理) loop do (反復実行する処理) +loop doにおいてTOSはリターンスタックのトップに 2ndはリターンスタックの2ndに移される +loopは対応するdoとの間の制御値にnを 加え、限界値と比較して限界値以内なら 反復実行する処理する。 限界値を超えていたらループから抜け、 リターンスタックに積まれた制御値と 限界値を捨てる |
後報 | loop | --- | |
後報 | +loop | n ---(実行時) | |
後報 | begin | --- |
次の形で使用する begin (反復する処理) again (無条件反復) begin (反復する処理) until (条件反復) begin (反復する処理1) while (反復する処理2) repeat(条件反復) untilに到達したときフラグfが「偽」なら beginまで戻り、フラグfが「真」なら untilの次の処理に進む whileに到達したとき、フラグfが「真」なら (反復する処理2)を実行しrepeatまで進み 対応するbeginまで無条件で戻る whileに到達したとき、フラグfが「偽」なら repeatの後ろに進みループを抜ける |
後報 | again | --- | |
後報 | until | f ---(実行時) | |
後報 | while | f ---(実行時) | |
後報 | repeat | --- |
内部処理用 擬似コード (16進数) | ニーモニック | パラメータ | 機能 | 備考 |
後報 | lit [n] | --- | 定数[n]をTOSに積む | |
後報 | lit.a | --- | ||
後報 | .org | --- n | 保留。 | |
後報 | .end | --- | 実行時、プログラムを終了する。 (仮想機械が終了する) .end命令は必須ではない。またソース中に 複数記述してもよい。 | |
後報 | db [b] | --- | メモリ上に1バイトの領域を確保しその内容を bとする。bは16進数で、2桁を超えた場合は 下2桁のみ有効となる | |
後報 | dw [w] | --- | メモリ上に2バイトの領域を確保しその内容を wとする。wは16進数で、4桁を超えた場合は 下2桁のみ有効となる | |
後報 | dd [d] | --- | メモリ上に4バイトの領域を確保しその内容を dとする。dは16進数で、8桁を超えた場合は 下2桁のみ有効となる | レベル1仕様 からは外す。 |
後報 | fca [label] | --- | メモリ上に2バイトの領域を確保し その内容を[label]で指定したアドレスの内容 とする。[label]はfcaから参照する以前に 定義されている必要がある。 | |
後報 | $+2 | --- | メモリ上に2バイトの領域を確保しその内容を メモリ領域のアドレスに2を加えた値とする これはFORTHを定義するための擬似命令なので 詳細はFORTHを参照。(後報) | |
後報 | label | --- | labelの位置にある命令のアドレスをラベルテーブルに 登録し、bsr命令、fca命令より参照出来るようにする | |
後報 | ( | --- | コメントの開始を表し、コメントの終了は)までとなる (は擬似命令なので、前後にスペースが必要で あることに注意 | |
後報 | --> | --- | "next sector"と呼ぶ。 現在アセンブル中の仮想セクタNo.の次のNo.の 仮想セクタを読み込み、アセンブルを継続する。 アセンブラ・ソースが複数セクタにまたがる とき使用する。セクタNo.は連続して いなければならない。 | |
後報 | end | bsr [n] | ソース・プログラムの終わりを示す。 この命令以降のソースはアセンブルされない。 ラベル[n]はプログラムの開始位置を示すラベルで 省略は出来ない。endはソース・プログラム中に 必ずひとつ必要。2つ以上記述した場合、最初の 記述が有効になる。 .end命令とは異なるので注意。 |