BASICの命令関係
RESERVED命令
RESERVED命令とはリザーブ、つまり予約の命令のことです。
命令は予約語とされています。ユーザは変数名などを決めるときにこの予約語とかぶらないようにしなければなりません。
このRESERVED命令というのは、その予約された命令の真の姿といえます。
これについては後ほど。
では、RESERVED命令を体験してみましょう!
まずは適当なBASICプログラムをロードしておいてください。そして、RUN MODEで以下のコマンドを入力してENTERキーを押してください。
RESERVED 10
さぁどうなりましたか?動いたでしょ?BASICプログラムが。
これがRESERVED命令です。この「RESERVED 10」というのが「RUN」 という命令として認識されたのです。どういうことでしょう・・・。
RESERVED命令は先ほども触れたように、「真の姿」なのです。いったいどういう意味での真の姿なのか・・・。
実は、ポケコンには
「RUN」という命令はRESERVED 10という命令として認識されるのです。すべての命令には番号があって、ポケコンはその番号を認識することでBASICプログラムを動作させています。この番号を中間コードと呼びます。
RESERVED XY
XYはページの下にある中間コード表を参照。Xは縦,Yが横です。
たとえば、RESERVED 50 とすると、CLSという命令になります。他にも、RESERVED 6F (50,20),15と入力すれば、CIRCLE(50,20),15と認識されます。
どうしてこんなことをしているのか・・・それは簡単です。
たとえば、BASICのプログラムを組んでいるとき、「10 PRINT "HELLO"」と入力すると、プログラムが入っているメモリには「10 RESERVED 60 "HELLO"」という意味の値が格納されます。RESERVED 60の部分はメモリ上ではFE 60となっています。(実際は、行番号も文字列ではない表現で格納されます。)
PRINTという命令をメモリ上に文字列で格納していると、「PRINT」という5文字を読み込んでからそれがPRINT命令であることを認識するので、それまでに時間がかかります。それに、保存に5バイトの容量が必要になります。
一方、FE 60と格納されていれば、FEの次の番号が示す命令はすぐに見つかりますし、容量もたった2バイトで済みます。文字列から中間コードへの変換はプログラム入力時にやってくれるから、時間がかからないのです。
つまり、RESERVED命令はプログラムの実行速度とメモリ節約のために使われているわけです。
ちなみに、RESERVED FFなどの命令のないコードを入れても、実行時には文法エラーで何も起こりませんが、保存されているメモリを見るとFE FFとなっています。
まとめ
- RESERVEDは命令の真の姿
- 事実上の真の姿であるメモリ上ではFE
- BASICの命令は中間コードで保存されている
- 実行速度アップとメモリ節約のため
- プログラム入力時に中間コードに変換
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | × | × | × | × | × | × | × | × | × | × | × | × | × | × | × | MON |
1 | RUN | NEW | CONT | PASS | LIST | LLIST | CLOAD | RENUM | LOAD | × | × | DELETE | FILES | × | × | LCOPY |
2 | CSAVE | OPEN | CLOSE | SAVE | × | RANDOMIZE | DEGREE | RADIAN | GRAD | BEEP | WAIT | GOTO | TRON | TROFF | CLEAR | USING |
3 | DIM | CALL | POKE | GPRINT | PSET | PRESET | × | × | × | × | ERASE | LFILES | KILL | × | × | × |
4 | × | × | × | × | × | OUT | × | × | PIOSET | POIPUT | SPOUT | SPINP | HDCOPY | ENDIF | REPEAT | UNTIL |
5 | CLS | LOCATE | TO | STEP | THEN | ON | IF | FOR | LET | REM | END | NEXT | STOP | READ | DATA | × |
6 | INPUT | GOSUB | LNINPUT | LPRINT | RETURN | RESTORE | × | GCURSOR | LINE | × | × | × | × | × | CIRCLE | |
7 | PAINT | OUTPUT | APPEND | AS | × | × | ELSE | × | × | × | WHILE | WEND | SWITCH | CASE | DEFAULT | ENDSWITCH |
8 | MDF | REC | POL | × | × | × | TEN | RCP | SQU | CUR | HSN | HCS | HTN | AHS | AHC | AHT |
9 | FACT | LN | LOG | EXP | SQR | SIN | COS | TAN | INT | ABS | SGN | DEG | DMS | ASN | ACS | ATN |
A | RND | AND | OR | NOT | PEEK | XOR | INP | × | PIOGET | × | × | × | × | POINT | PI | FRE |
B | EOF | × | LOF | × | × | × | NCR | NPR | × | × | × | × | × | × | × | CUB |
C | × | × | × | × | × | × | MOD | FIX | × | × | × | × | × | × | × | × |
D | ASC | VAL | LEN | VDEG | × | × | × | × | × | × | × | × | × | × | × | × |
E | × | × | × | × | × | × | × | × | × | INKEY$ | MID$ | LEFT$ | RIGHT$ | × | × | × |
F | CHR$ | STR$ | HEX$ | DMS$ | × | × | × | × | × | × | × | × | × | × | × | × |
E-Mail:
Weblog: Tosikの雑記