BASE クリックリファレンス メイン(アセンブラ)モード : プロンプト ] E (Edit) テキストエディタモードへ移行 A (Assemble) 現在格納されているテキストをアセンブル A/ と入力すると PASS4のときにオブジェクトソースをリストアップ O (List or Calculate Label) O アセンブル後、使われたすべてのラベルとその値をリストアップ OLabel[+,-,/nn] Labelの値を含んだ加減除算を行い結果を16進4桁で表示 W ssss,eeee,aaaa,mmmm,filename (Write Obj.File with Offset) ssss:スタートアドレス eeee:エンドアドレス aaaa:オートスタートアドレス mmmm:実際にそのオブジェクトが存在しているアドレス TS-2000のD,J,L,S,Vコマンドと スクリーンエディットによるメモリ内容の変更が可能 (SuperBASE2000の場合) テキストエディタモード : プロンプト E: & (Text Buffer Initialize) テキスト格納エリアを初期化 I (Insert Line) プログラムを入力 I だけの場合はLPの指す行の前に挿入 nI LPをnの値にしてから入力 BREAKキーで終了 T (Type Line) 入力されたテキストを表示 T LPの指す行から表示 nT n行から表示 n1,n2T n1行からn2行まで表示 n1Tn2 n1行からn2行分表示 タイプ中、スペースキーで一時停止 BREAKキーで終了 LPは最後に表示した行の次を指す Pn (Pointer) LPの値をnにする +n (LP increment) LPの値をnだけ増やす -n (LP decrement) LPの値をnだけ減らす . (LP Display) LPの値を表示 E (LP End) LPの値を最終行+1にする B (LP Begin) LPの値を1にする K (Kill Line) Kn LPの指す行からn行分削除 n1Kn2 n1行からn2行分削除 n1,n2K n1行からn2行まで削除 n,*K n行以降すべて削除 C (Copy Line) C LPの指す行をその次の行にコピー n1Cn2 n1行をn2行へコピー n1,n2Cn3 n1行からn2行までをn3行からへコピー M (Move Line) n1Mn2 n1行をn2行へ移動 n1,n2Mn3 n1行からn2行までをn3行からへ移動 J (Joiint Line) LPの指す行とその次の行をつなぎ1行にします S (Search Strings) 文字列を検索します S"str" LPの指す行からstrを含む行を検索し表示 nS"str" n行からstrを含む行を検索して表示 n1Sn2"str" n1行からstrを含む行をn2個検索して表示 n1S*"str" n行からstrを含む全ての行を検索して表示 X (Exchange Strings) X"str1"str2" LPの指す行からstr1を検索してそれをstr2に変換し表示 nX"str1"str2" n行から n1Xn2"str1"str2" n1行からn2個 nX*"str1"str2" n行から最後まで $hhhh (Text Area Move) テキストエリアの開始アドレスをhhhh番地にする 要 &コマンドによる初期化 ? (Text Area Display) 現在のテキストエリアの開始アドレスと終了アドレスを表示 L filename (Load Text File) テープからテキストファイルを読み込み filenameを省略すると初めに見つかったファイルをロード W filename (Write Text File) テキストファイルをテープへセーブ A filename (Append Text File) テープからテキストファイルを読み込んで 現在格納しているテキストプログラムの最終行から追加 # (Printer Mode) #1 プリンタオン #0 プリンタオフ N (Type without Line No.) ラインナンバーを付けない Tコマンド Q (Quit) エディタモードから抜けてメイン(アセンブラ)モードへ戻る Z (Retry) 直前に実行されたコマンドを繰り返す L,W,A,I,Z,Qコマンド以外は続けて書いて実行させることができます Tコマンドで表示された行番号付きテキストはスクリーンエディットが可能 書き換えた行で必ずCRキーを押すこと スクリーンエディットを終了するにはBREAKキーを押す BASE 文法 行 1つの行には1つのラベル定義と複数のステートメントを書くことができます セパレータはコロン(:)または空白のどちらでも可 ステートメントは必ず行の先頭から1文字空けて書き始めます 行の先頭から書き始めた場合、ラベルと見なされます ステートメントは、擬似命令,一般命令, マクロ命令に分けられます [ラベル]:[ステートメント1]:[ステートメント2]: [ステートメント1]:[ステートメント2] ;[コメント] [ラベル] ラベル 下記の条件を満たす任意長の文字列 空白,コロン,正負記号,かっこ,スラッシュを含まない $マーク,セミコロン,数字が先頭にこない 数値 10進数,16進数($〜),ASCIIコード("でくくられた1文字),ラベルの値が使える ただし2バイトに収まる範囲 加減除算も記述できる(乗算は不可) 擬似命令 [1] START nn (2バイト数値) 例) START $8000 アセンブルしたいマシン語プログラムの先頭番地を指定します。 プログラムの初めに必ず宣言しなければなりません。 一般のアセンブラのORG命令に相当します。 [2] OFFSET nn (2バイト数値) 例) OFFSET $1000 アセンブルしたオブジェクトが格納されるべき番地と実際に格納される番地の差を指定します。 たとえば[1]のSTART $8000 とOFFSET $1000を宣言するとマシン語プログラムは$9000番地から 生成されますが、そのプログラムは本来$8000番地に転送しないと実行できません。 OFFSET命令は必ずSTART命令よりも前に宣言してください。START命令は複数書くことができますが、 OFFSET命令は1個しか書けません。また複数のSTART命令に対してはそのすべてにオフセット機能が 働きます。 [3] DEFW nn (2バイト数値) 例) DEFW $1200 (省略形 '$1200) 2バイトの定数を生成します。 2バイトのデータは下位バイト,上位バイトの順でメモリに格納されます。 2バイトの定数はコロンで区切って何個でも書けます。 [4] DEFB n (1バイト数値) 例) DEFB 10 (省略形 .10) 1バイトの定数を生成します。 1バイトの定数はコロンで区切って何個でも書けます。 [5] DEFS n (1バイト数値) 例) DEFS 4 nバイト分のメモリ領域を確保します。 実際には$00がn個分生成されます。 n=0を指定した場合にはn=256と解釈されます。 [6] DEFM "str" (文字列) 例) DEFM "HELLO!" ダブルクォーテーションで囲まれた文字列の並びをASCIIコードに変換して1バイトづつメモリ上に 生成していきます。 [7] ! (nまたは"str") 例) ! (0C20"ASCII"0D00) かっこで囲まれたデータを2桁の16進数の並びとみて順次メモリ上に生成します。 データの途中でダブルクォーテーションがきたら、次のダブルクォーテーションまでの文字列を ASCIIコードに変換して格納していきます。 [8] EQU nn (2バイト数値) 例) LABEL1 EQU $1200 ラベルの値を定義します。 nnがラベルを含む計算、またはラベルそのものである場合、そのラベルは既に定義されていなければ なりません。 [9] ;str (文字列) 例) ;INKEY JOB セミコロン以降の文字はコメントとして扱われます。 この命令だけは行の先頭に書いても有効です。 一般命令,マクロ命令 実際にマシン語を生成していく命令です。 ここでは表現がわかりにくい命令、特に説明が必要な命令を取り上げます。 その他はニモニック−BASE対応表を参照してください。 [1] PUSH,POP命令 大かっこの後にレジスタペアの名前を書きます。 左大かっこ、右大かっことPUSH,POPの対応がつきにくいかもしれませんが、 PUSH,POPは本来、対にして使われる物で PUSH … プログラム … POP という構造を成しています。そこでプログラムを囲むような表現 [ プログラム ] と覚えればよいでしょう。 [2] キャリーを含む演算命令 キャリーフラグを含む計算は+,-記号の後にピリオドを付けて表現します。 例) A=A+.E HL=HL-.DE [3] CY=0 OR Aと同じマシン語を生成します。 [4] A=0 XOR A と同じマシン語を生成します。 LD A,0と同じマシン語を生成させる場合は A=00のように書いてください。 [5] GOTO nn (2バイト数値) アセンブラが自動的に絶対分岐か相対分岐かを決めJR,JPのコードを生成します。 絶対ジャンプ,相対ジャンプのコードを生成したい場合は、 JMP nn JR nn と書いてください。 [6] GOSUB nn (2バイト数値) 省略形として !マークが使えます。 例) GOSUB LABEL3 (省略形 !LABEL3) [7] GOTO(HL), PC=HL JP (HL)と同じマシン語を生成します。 [8] r± (r=A,B,C,D,E,H,L,(HL),(IX+dd),(IY+dd)) レジスタのインクリメント,デクリメントを意味します。 +,-記号は2個書くことができ、その場合 INC,DECコードを2個生成します。 [9] r=r+1 (r=B,C,D,E,H,L,(HL)) [8]と同じくINC,DECのコードを生成します。 rにAを使った場合には ADD A,1と同じコードを生成します。 [10] HL<>DE, DE<>HL どちらもEX HL,DE と同じコードを生成します。 他のエクスチェンジ命令では左右入れ換えたものは使えません。 例) (SP)<>HL 使える HL<>(SP) 使えない AF<>AF' 使える AF'<>AF 使えない [11] r=(±rp±), (±rp±)=r オートインクリメント,オートデクリメント表現のメモリアクセス命令です。 rp: BC,DE,HL,IX,IY r : A,B,C,D,E,H,L が指定できますが、rpにBCとDEを使った場合 rはAしか許されません。 例) (+BC)=A (HL+)=B A=(+DE-) [12] IF〜GOTO,GOSUB,RETURN,THEN 一般形 IF (条件式) GOTO nn IF (条件式) GOSUB nn (CALL, !) IF (条件式) RETURN (RET) IF (条件式) THEN ステートメント IF〜THEN〜では条件が成立した場合 THEN以降のステートメントが実行され、 不成立の場合はステートメントを実行せずに次の行の命令へスキップします。 IF〜GOTO,GOSUB,RETURNは条件不成立の場合GOTO,GOSUB,RETURNは実行されませんが、 その後に続くステートメントは実行されるので注意してください。 (表1) IF〜,UNTIL〜で使える条件式 条件式 実行する条件の説明 -------------- --------------- --------------------------------------------------- フラグ関係 = または Z ゼロフラグが 1 <> または NZ ゼロ不ラフが 0 CY=0 または NC キャリーフラグが 0 CY=1 または CY キャリーフラグが 1 PV=0 または PO パリティーオーバーフローフラグが 0 PV=1 または PE パリティーオーバーフローフラグが 1 PLUS または + サインフラグが 0 MINUS または - サインフラグが 1 Acc関係 A=0 Accが 0 に等しい A<>0 Accが 0 でない A=n Accが n に等しい n:8ビット定数 A<>n Accが n でない A>=n Accが n 以上である Ar Accが r に等しくない A>=r Accが r 以上である A0 rが 0 でない rp=0 rpが 0 に等しい rp:BC,DE,HL,IX,IY rp<>0 rpが 0 でない DEC(r)=0 rをデクリメントした後、rが 0 に等しい DEC(r)<>0 rをデクリメントした後、rが 0 でない DEC(rp)=0 rpをデクリメントした後、rpが 0 に等しい DEC(rp)<>0 rpをデクリメントした後、rpが 0 でない 注)rpの条件式 DEC(rp)=0,DEC(rp)<>0の場合、生成したオブジェクトでAccを使用するため Accの内容が破壊されます。 DEC(r)=0,DEC(r)<>0の場合のrに(IX+dd),(IY+dd)が使えます。 [13] DO〜UNTIL DOの直後に書かれたステートメントを1回実行した後、次の命令からUNTILまでの命令を UNTILの後ろに書かれた条件が成り立つまで繰り返します。 一般形 DO [命令1] 命令2 命令3 UNTIL (条件式) UNTILの後の条件式はIF〜THENの条件式と同じものが使えます。 (表2) マクロ命令一覧 マクロ命令 ニモニック展開 -------------------- ------------------ rp1 = rp2 LD rp1H,rp2H LD rp1L,rp2L -------------------- ------------------ HL = HL - rp OR A SBC HL,rp -------------------- ------------------ HL = HL + nn PUSH DE LD DE,nn ADD HL,DE POP DE -------------------- ------------------ HL = HL +. nn 上と同様 HL = HL - nn HL = HL -. nn -------------------- ------------------ (nn) = n PUSH HL LD HL,nn LD (HL),n POP HL -------------------- ------------------ BC = (HL) LD C,(HL) INC HL LD B,(HL) DEC HL -------------------- ------------------ DE = (HL) 上と同様 -------------------- ------------------ HL = (HL) LD A,(HL) INC HL LD H,(HL) LD L,A -------------------- ------------------ BC = (HL++) LD C,(HL) INC HL LD B,(HL) INC HL -------------------- ------------------ DE = (HL++) 上と同様 -------------------- ------------------ (HL) = BC LD (HL),C INC HL LD (HL),B DEC HL -------------------- ------------------ (HL) = DE 上と同様 -------------------- ------------------ (HL++) = BC LD (HL),C INC HL LD (HL),B INC HL -------------------- ------------------ (HL++) = DE 上と同様 -------------------- ------------------ GOTO [HL] LD A,(HL) INC HL LD H,(HL) LD L,A JP (HL) エラーメッセージ ERR 1 文法のあやまり ERR 2 相対ジャンプ(JR)命令がとどかない ERR 3 未定義ラベルを使っている ERR 4 ラベル名中に使ってはいけない文字を使っている ERR 5 同じラベル名を2重定義した PRINTER ERR プリンタがオフライン状態 ニモニック−BASE対応表 (8ビット演算,16ビット演算 グループ) ザイログ BASE --------------- ------------------------- ADD A,r A=A+r ADD A,n A=A+n ADD A,(HL) A=A+(HL) ADD A,(IX+dd) A=A+(IX+dd) ADC r A=A+.r SUB r A=A-r SBC r A=A-.r AND r A=A.AND.r または A=A.&.r OR r A=A.OR.r XOR r A=A.XOR.r CP r CP(A-r) --------------- ------------------------- ADC,SUB,SBC,AND,OR,XOR,CPについてもADDに同様 --------------- ------------------------- INC r r=r+1 または r+ r++ INC (HL) (HL)=(HL)+1 または (HL)+ INC (IX+dd) (IX+dd)+ DEC r r=r-1 または r- --------------- ------------------------- DECについてもINCと同様 --------------- ------------------------- ADD HL,rp HL=HL+rp ADC HL,rp HL=HL+.rp HL=HL+nn HL=HL+.nn SBC HL,rp HL=HL-.rp HL=HL-rp HL=HL-nn HL=HL-.nn --------------- ------------------------- IXについても HLと同様 --------------- ------------------------- INC rp rp+ / rp++ INC IX IX+ / IX++ DEC rp rp- / rp-- DEC IX IX- / IX-- (ローテート,シフト,ビット グループ) ザイログ BASE --------------- ------------------------- RLC A RLC (A) RRC A RRC (A) RR A RR (A) RL A RL (A) RLC r RLC (r) RRC r RRC (r) RR r RR (r) RL r RL (r) SLA r SLA (r) SRA r SRA (r) SRL r SRL (r) RR (HL) RR ((HL)) RR (IX+dd) RR ((IX+dd)) --------------- ------------------------- ローテート,シフトの(HL),(IX)はRRに同様 --------------- ------------------------- BIT b,r BIT (b,r) BIT b,(HL) BIT (b,(HL)) BIT b,(IX+dd) BIT (b,(IX+dd)) SET b,r SET (b,r) RES b,r RES (b,r) --------------- ------------------------- セット,リセットの(HL),(IX+dd)はBITに同様 --------------- ------------------------- RRD RRD RLD RLD --------------- ------------------------- b:0〜7ビット (8ビット,16ビット ロード グループ) ザイログ BASE --------------- ------------------------- LD r,r' r=r' LD r,n r=n LD (HL),r (HL)=r LD r,(HL) r=(HL) LD A,(rp) A=(rp) LD (rp),A (rp)=A LD (HL),n (HL)=n LD (IX+dd),r (IX+dd)=r LD r,(IX+dd) r=(IX+dd) LD (IX+dd),n (IX+dd)=n LD A,(nn) A=(nn) LD (nn),A (nn)=A LD A,I A=I LD I,A I=A LD HL,(nn) HL=(nn) LD (nn),HL (nn)=HL LD rp,nn rp=nn LD IX,nn IX=nn LD (nn),rp (nn)=rp LD rp,(nn) rp=(nn) LD IX,(nn) IX=(nn) LD (nn),IX (nn)=IX LD SP,HL SP=HL LD SP,IX SP=IX PUSH AF [AF POP AF ]AF PUSH rp [rp POP rp ]rp PUSH IX [IX POP IX ]IX --------------- ------------------------- r, r' : レジスタ AF : アキュムレータとフラグ rp : レジスタペア (rp) : レジスタペアの指すメモリ (nn) : 16ビットデータの指すメモリ n : 8ビットデータ nn : 16ビットデータ (IX+dd) : IX+ddの指すメモリ (HL) : HLの指すメモリ IYについてはすべてIXに同様 (エクスチェンジ,ブロック転送,サーチ グループ) ザイログ BASE --------------- ------------------------- EX DE,HL HL<>DE または DE<>HL EX AF<>AF' AF<>AF' EXX EXX EX (SP),HL (SP)<>HL EX (SP),IX (SP)<>IX LDI LDI LDIR LDIR LDD LDD LDDR LDDR CPI CPI CPIR CPIR CPD CPD CPDR CPDR (ジャンプ,コール,リターン グループ) ザイログ BASE --------------- ------------------------- JP nn GOTO nn または JMP nn CALL nn CALL nn または GOSUB nn または !nn RET RET または RETURN JP Z,nn IF=GOTO nn または IF Z GOTO nn JP NZ,nn IF<>GOTO nn または IF NZ GOTO nn JP C,nn IF CY GOTO nn または IF CY=1 GOTO nn JP NC,nn IF NC GOTO nn または IF CY=0 GOTO nn JP PO,nn IF PO GOTO nn または IF PV=0 GOTO nn JP PE,nn IF PE GOTO nn または IF PV=1 GOTO nn JP M,nn IF MINUS GOTO nn または IF-GOTO nn JP P,nn IF PLUS GOTO nn または IF+GOTO nn JR nn JR nn --------------- ------------------------- JR Z,JR NZ,JR NC,JR Cについては JP Z,JP,NZに同様 --------------- ------------------------- DJNZ nn DJNZ nn CALL cc,nn IF cc CALL nn (GOSUB nn) RET cc,nn IF cc RET (RETURN) RST n*8 RESTART(n) RETI RETI RETN RETN JP (HL) GOTO (HL) または PC=HL JP (IX) GOTO (IX) または PC=IX --------------- ------------------------- cc: コンディションコード (補正フラグ,CPU制御 グループ) ザイログ BASE --------------- ------------------------- DAA DECIMAL CPL CMPL (A) CCF CMPL (CY) NEG NEG SCF CY=1 CY=0 NOP NOP HALT HALT DI DINT EI EINT IM 0 IMODE 0 IM 1 IMODE 1 IM 2 IMODE 2 (入出力 グループ) ザイログ BASE --------------- ------------------------- IN A,(n) A=PORT(n) IN r,(C) r=PORT(C) OUT (n),A PORT(n)=A OUT (C),r PORT(C)=r INI INI INIR INIR IND IND INDR INDR OUTI OUTI OTIR OUTIR OUTD OUTD OTDR OUTDR end of text