変数名 | 割当機能 | 備考 |
A | ファイル用作業領域の先頭(TOP) | |
B | ファイル用作業領域の末尾(BOTM) | |
C | ポインタ(UP) | |
D | ポインタ(DN) | 未使用、予約 |
E | 上部分の行数(OVER) | 未使用、予約 |
F | 下部分の行数(UNDR) | 未使用、予約 |
G | アセンブル中のソースの行 | |
H | スタックポインタの初期値 入力バッファの先頭 | |
I | 入力テキストのポインタ | |
J | アセンブル出力のポインタ | |
K | ソースリストの行数 | |
L | ラベルテーブルのポインタ | |
M | ラベルテーブルのエントリ数 | |
P | パラメータ・スタック・ポインタ(未使用) | |
R | リターン・スタック・ポインタ | |
U | サブルーチンRDSEC、WTSEC内などで使用 | |
V | サブルーチンRDSEC、WTSEC内などで使用 | |
W | サブルーチンRDSEC、WTSEC内などで使用 | |
X | サブルーチン内で消費 | |
Y | サブルーチン内で消費 | |
Z | サブルーチン内で消費 |
行番号 | 名称 | 入力 | 出力 | 処理 | 備考 |
1000 | PSHR | X:RSに積む値 | --- | 変数Xをリターンスタックにプッシュします。 サブルーチンの冒頭で変数!に格納されたメインルーチンへ の戻りアドレスをリターンスタックに積むときに使用します。 | |
1100 | RET | --- | --- | サブルーチンからメインルーチンに戻ります。そのために リターンスタックに格納された戻りアドレスを変数「#」に 代入します。 | |
2200 | RDSEC | Y:読込むアドレス Z:セクタ番号 | --- | 仮想セクタから配列に1セクタ読み込みます。 | |
2400 | WTSEC | Y:書込むアドレス Z:セクタ番号 | --- | 配列から仮想セクタへ1セクタ書き込みます。 | |
3000 | SKPSP | I:文字列アドレス | I:文字列アドレス | 変数Iで示す文字列から、空白を読み飛ばします。 | |
3100 | GETWD | I:入力文字列アドレス | I:文字列の先頭アドレス Y:文字列の最終アドレス+1 | 入力時の変数Iのアドレスから空白、タブ、改行以外の 文字列の検索を開始し、文字列の先頭アドレス(変数I)と 文字列の最終アドレス(変数Y)を返します。 文字列が無かったときは、変数I=変数Yとなります。 入力の最終アドレスは変数Cです。 | |
3300 | MOVE | I:移動元の文字列の先頭 Y:移動元の文字列の最終+1 J:移動先の先頭アドレス | I:文字列の先頭アドレス Y:文字列の最終アドレス | 文字列を移動します。 | |
3500 | DTOB | I:文字列のアドレス | I:更新された文字列アドレス Z:変換した数値 | 変数Iからの文字列を符号なし整数に変換し 変数Zに返します。 数値に変換出来ない時は Z=0が返されます。 | |
100 | START | --- | --- | vasm1で使用する変数を初期化します。 |
行番号 | 名称 | 入力 | 出力 | 処理 | 備考 |
1000 | PSHR | X:RSに積む値 | --- | 変数Xをリターンスタックにプッシュします。 サブルーチンの冒頭で変数!に格納されたメインルーチンへ の戻りアドレスをリターンスタックに積むときに使用します。 | |
1100 | RET | --- | --- | サブルーチンからメインルーチンに戻ります。そのために リターンスタックに格納された戻りアドレスを変数「#」に 代入します。 | |
1400 | ACPT | G:文字列を格納する 配列の先頭 | X:入力した文字数 | キーボードから文字列を入力し、入力バッファ (先頭は変数G)以降の配列に格納します。 Xに文字列末尾の0x00は含みません。 | |
1500 | DISP | Y: 文字列のアドレス-1 | --- | 配列に格納された文字列を画面に出力します。 文字列の位置は変数Y+1から 区切り文字0x00までです。 | |
1600 | DISP1 | Y: 文字列のアドレス-1 | --- | 配列に格納された文字列を画面に出力します。 文字列の位置は変数Y+1から 区切り文字0x00までです。変数Yが BOTM(変数B)に達しているときは何も表示しません。 | |
2000 | DTOB | Y: 文字列のアドレス | Z: 変換した数値 | 変数Yからの文字列を符号なし整数に変換し 変数Zに返します。数値に変換出来ないときは Z=0が返されます。 | |
2200 | RDSEC | Y:読込むアドレス Z:セクタ番号 | --- | 仮想セクタから配列に1セクタ読み込みます。 | |
2400 | WTSEC | Y:書込むアドレス Z:セクタ番号 | --- | 配列から仮想セクタへ1セクタ書き込みます。 | |
3000 | SKPSP | I:文字列アドレス | I:文字列アドレス | 変数Iで示す文字列から、空白を読み飛ばします。 | |
3100 | GETWD | I:入力文字列アドレス | I:文字列の先頭アドレス Y:文字列の最終アドレス+1 | 入力時の変数Iのアドレスから空白、タブ、改行以外の 文字列の検索を開始し、文字列の先頭アドレス(変数I)と 文字列の最終アドレス(変数Y)を返します。 文字列が無かったときは、変数I=変数Yとなります。 入力の最終アドレスは変数Cです。 | |
3300 | MOVE | I:移動元の文字列の先頭 Y:移動元の文字列の最終+1 J:移動先の先頭アドレス | I:文字列の先頭アドレス Y:文字列の最終アドレス | 文字列を移動します。 | |
3500 | XASM | I:文字列のアドレス | I:更新された文字列アドレス Z:変換した数値 | 変数Iからの16進数の文字列を符号なし整数に 変換しテーブルに格納します。 数値に変換 出来ない時は0が格納されます。 | |
3700 | XTOB | I:文字列のアドレス | I:更新された文字列アドレス Z:変換した数値 | 変数Iからの16進数の文字列を符号なし整数 に変換し変数Zに返します。 数値に変換 出来ない時はZ=0が返されます。 | |
4000 | SRCHR | I:文字列のアドレス Y:文字列の最終+1 K:予約語のエントリ数 | W=1:有り、W=0:なし ・W=1のとき X:予約語のコード Z:予約語の属性 | ソースから分離した文字列が予約語にあるか 検索します。 | |
4300 | SRCHL | I:文字列のアドレス Y:文字列の最終+1 L:ラベルのアドレス | X:ラベルのアドレス | ラベルがラベルテーブルにあるか 検索します。 ラベルがテーブルにないときは、エラー・メッセージ を表示してアセンブラを終了します。 | |
5000 | PIFF | J:アセンブル出力の ポインタ S:データ・スタック のポインタ | J:アセンブル出力の ポインタ Jは3進む。 Sは2小さくなり、下記の 値がスタックに 格納される。 (S):ペアチェックの 初期値で2となる。 (S+1):0branch命令の 格納アドレス | 疑似命令ifの処理をするサブルーチンです。 疑似名whileでも使用されます。 データ・スタックに格納される出力値の詳細は 疑似命令if、whileを参照してください。 | |
5200 | PAGN | J:アセンブル出力の ポインタ S:データ・スタック 入力はデータ・スタック に格納します。 (S):ペアチェックの 値で1。 (S+1):branch命令の 格納アドレス | J:アセンブル出力の ポインタ Jは3進む。 Sの値は2小さくなる。 | 疑似命令againの処理をするサブルーチンです。 疑似名repeatでも使用されます。 データ・スタックに格納される入力値の詳細は 疑似命令のagain、repeatを参照してください。 | |
5400 | PEDIF | J:アセンブル出力の ポインタ S:データ・スタック 入力はデータ・スタック に格納します。 (S):ペアチェックの値で2。 (S+1):branch命令の 格納アドレス | J:アセンブル出力の ポインタ。Jは不変。 S:Sの値は2大きくなる | 疑似命令endifの処理をするサブルーチンです。 疑似名repeatでも使用されます。 データ・スタックに格納される入力値の詳細は 疑似命令のendif、repeatを参照してください。 | |
11600 | LIT | J:アセンブル出力の ポインタ | J:アセンブル出力の ポインタ Jは3進む。 | 疑似命令litの処理です。 | |
13200 | BSR | J:アセンブル出力の ポインタ | J:アセンブル出力の ポインタ。Jは3進む。 | 疑似命令bsrの処理です。 | |
13400 | DO | J:アセンブル出力の ポインタ S:データ・スタック のポインタ | J:アセンブル出力の ポインタ。Jは1進む。 Sは2小さくなり、 下記の値がスタック に格納される。 (S):ペアチェックの 初期値で3となる。 (S+1):do命令の 次のアドレス | 疑似命令doの処理です。 | |
13500 | LOOP | J:アセンブル出力の ポインタ S:データ・スタック のポインタ (S):ペアチェックの 初期値で3。 (S+1):do命令の 次のアドレス | J:アセンブル出力の ポインタ Jは3進む。 S:データ・スタック のポインタ Sは2大きくなる | 疑似命令loopの処理です。 | |
13600 | PLOOP | J:アセンブル出力の ポインタ S:データ・スタック のポインタ (S):ペアチェックの 初期値で3。 (S+1):do命令の 次のアドレス | J:アセンブル出力の ポインタ Jは3進む。 Sは2大きくなる | 疑似命令+loopの処理です。 | |
13700 | BEGIN | J:アセンブル出力の ポインタ S:データ・スタック のポインタ | J:アセンブル出力の ポインタ。Jは不変。 Sは2小さくなり、 下記の値がスタック に格納される。 (S):ペアチェックの 初期値で1となる。 (S+1):ループ処理 の開始アドレス | 疑似命令beginの処理です。 | |
13800 | UNTIL | J:アセンブル出力の ポインタ S:データ・スタック のポインタ (S):ペアチェックの 初期値で1 (S+1):ループ処理 の開始アドレス | J:アセンブル出力の ポインタ Jは3進む。 S:データ・スタック のポインタ ループ継続時:Sは不変 ループ終了時:Sは2 大きくなる | 疑似命令unitlの処理です。 | |
13900 | WHILE | J:アセンブル出力の ポインタ S:データ・スタック のポインタ | J:アセンブル出力の ポインタ Jは3進む。 Sは2小さくなり、下記の 値がスタックに 格納される。 (S):ペアチェックの 初期値で2となる。 (S+1):0branch命令の 格納アドレス | 疑似命令whileの処理をするサブルーチンです。 | |
14000 | REPEA | J:アセンブル出力の ポインタ S:データ・スタック 入力はデータ・スタック に格納します。 (S):ペアチェックの値で2。 (S+1):ループ処理 の開始アドレス (S+2):ペアチェック の値で3。 (S+3):branch命令の 格納アドレス | J:アセンブル出力の ポインタ。Jは不変。 S:Sの値は4大きくなる | 疑似命令repeatの処理です。 | |
14100 | IFF | J:アセンブル出力の ポインタ S:データ・スタック のポインタ | J:アセンブル出力の ポインタ。Jは3進む。 Sは2小さくなり、下記の 値がスタックに 格納される。 (S):ペアチェックの 初期値で2となる。 (S+1):0branch命令の 格納アドレス | 疑似命令ifの処理です。 サブルーチンPIFFを呼ぶだけです。 | |
14200 | ELSE | J:アセンブル出力の ポインタ S:データ・スタック 入力はデータ・スタック に格納します。 (S):ペアチェックの値で2。 (S+1):0branch命令の 格納アドレス | J:アセンブル出力の ポインタ Jは3進む。 Sの値は不変。 (S):ペアチェックの値で2。 (S+1):branch命令の 格納アドレス | 疑似命令elseの処理です。 | |
14300 | ENDIF | J:アセンブル出力の ポインタ S:データ・スタック 入力はデータ・スタック に格納します。 (S):ペアチェックの値で2。 (S+1):branch命令の 格納アドレス | J:アセンブル出力の ポインタ。Jは不変。 S:Sの値は2大きくなる | 疑似命令endifの処理です。 サブルーチンPEDIFを呼ぶだけです。 | |
14400 | AGAIN | J:アセンブル出力の ポインタ S:データ・スタック 入力はデータ・スタック に格納します。 (S):ペアチェックの値。 (S+1):branch命令の 格納アドレス | J:アセンブル出力の ポインタ Jは3進む。 Sの値は2小さくなる。 | 疑似命令againの処理です。 サブルーチンのPAGNを呼ぶだけです。 | |
34000 | DB | J:アセンブル出力の ポインタ | J:アセンブル出力の ポインタ。Jは1進む。 | 疑似命令dbの処理です。 | |
34100 | DW | J:アセンブル出力の ポインタ | J:アセンブル出力の ポインタ。Jは2進む。 | 疑似命令dwの処理です。 | |
34300 | FCA | J:アセンブル出力の ポインタ | J:アセンブル出力の ポインタ。Jは2進む。 | 疑似命令fcaの処理です。 | |
34400 | PFA | J:アセンブル出力の ポインタ | J:アセンブル出力の ポインタ。Jは2進む。 | 疑似命令$+2の処理です。 | |
34500 | LITDA | J:アセンブル出力の ポインタ | J:アセンブル出力の ポインタ。Jは3進む。 | 疑似命令lit.aの処理です。 | |
35300 | END | J:アセンブル出力の ポインタ | J:アセンブル出力の ポインタ。Jは2進む。 | 疑似命令endの処理です。 | |
35400 | LABEL | J:アセンブル出力の ポインタ | J:アセンブル出力の ポインタ。Jは3進む。 | 疑似命令labelの処理です。 | |
40000 | NEXT | J:アセンブル出力の ポインタ | J:アセンブル出力の ポインタ | 疑似命令の終わりの処理です。 この行では特に何もせず、 次のアセンブル処理に分岐するだけです。 | |
100 | START | --- | --- | vasm1で使用する変数を初期化します。 |
行番号 | 名称 | 入力 | 出力 | 処理 | 備考 |
1000 | PSHR | X:RSに積む値 | --- | 変数Xをリターンスタックにプッシュします。 サブルーチンの冒頭で変数!に格納されたメインルーチンへ の戻りアドレスをリターンスタックに積むときに使用します。 |
行番号 | 名称 | 入力 | 出力 | 処理 | 備考 |
1100 | RET | --- | --- | サブルーチンからメインルーチンに戻ります。そのために リターンスタックに格納された戻りアドレスを変数「#」に 代入します。 |
行番号 | 名称 | 入力 | 出力 | 処理 | 備考 |
1400 | ACPT | G:文字列を格納する 配列の先頭 | X:入力した文字数 | キーボードから文字列を入力し、入力バッファ (先頭は変数G)以降の配列に格納します。 Xに文字列末尾の0x00は含みません。 |
行番号 | 名称 | 入力 | 出力 | 処理 | 備考 |
1500 | DISP | Y: 文字列のアドレス-1 | --- | 配列に格納された文字列を画面に出力します。 文字列の位置は変数Y+1から 区切り文字0x00までです。 |
行番号 | 名称 | 入力 | 出力 | 処理 | 備考 |
1600 | DISP1 | 配列に格納された文字列を画面に出力します。 文字列の位置は変数Y+1から 区切り文字0x00までです。変数Yが BOTM(変数B)に達しているときは何も表示しません。 |
行番号 | 名称 | 入力 | 出力 | 処理 | 備考 |
2000 | DTOB | Y: 文字列のアドレス | Z: 変換した数値 | 変数Yからの文字列を符号なし整数に変換し 変数Zに返します。数値に変換出来ないときは Z=0が返されます。 |
2200 | RDSEC | Y:読込むアドレス Z:セクタ番号 | --- | 仮想セクタから1セクタ配列に読み込みます。 |
行番号 | 名称 | 入力 | 出力 | 処理 | 備考 |
100 | START | --- | --- | エディタで使用する変数を初期化して エディタを開始します。 |