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となっています。

まとめ

G850S 中間コード表 (手作業で調べたので間違いがあったらすみません)
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 PRINT 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$ × × × × × × × × × × × ×
Copyright(C) tosik
E-Mail:
Weblog: Tosikの雑記