FX-890P/Z-1 モニターについて



目次






1.導入

機械語領域を確保する。これを行わないと,ファイルにあるソースファイルのアセンブル時に, OM errorとなる。機械語領域確保には,CALモードまたはBASICモードで
  CLEAR ,確保するメモリーサイズ(byte)
と入力する。この際,DEFSEG=0で,メモリーの開始番地は2000H。
メニューで,5:ASMBLで,アセンブラに入り,ソースファイルをアセンブルする。 結果のセーブ方法としては,BASICでのBSAVE, 自作プログラムによるファイル(F0-F9)への出力, モニターのSコマンドによるファイルへの出力がある。
CALモードまたはBASICモードで,"MON"と入力してモニターに入る。
適当な操作後,"q"でモニターを終了できる。使えるコマンドは"?"で表示。






2.モニター・コマンド

表1.モニター・コマンド表
コマンド意味書式説明
B
BaseB [セグメントベースアドレス]セグメントベースアドレスの設定。
C
CompareC 開始アドレス,終了アドレス,比較先アドレスメモリ内容のブロック比較。
D
DumpD [開始アドレス [ , 終了アドレス]]メモリ内容を32バイト単位で表示。
E
EditE 開始アドレスメモリ内容を1バイトずつ修正。
F
FillB 開始アドレス,終了アドレス,データメモリーブロックにデータを書き込む。
G
Go G [実行開始アドレス][ , ブレークポイント1 [ , ブレークポイント2][ , T]] ブレークポイントを指定して,マシン語プログラムを実行。
H
HistoryH [ステップ数]ブレークポイントまでの64ステップのCS:IPを表示。
L
LoadL 格納開始アドレス [ , ファイル番号] ファイルからマシン語プログラムをロード。
M
MoveM 開始アドレス,終了アドレス,転送先アドレス メモリーブロックを転送。
Q
QuitQモニターを終了。
S
SaveS 開始アドレス,終了アドレス [ , ファイル番号] マシン語プログラムをファイルにセーブ。
T
TraceT [ステップ数]マシン語プログラムを1ステップずつ実行。
V
ViewV [デバイス名(CまたはP)]表示出力デバイスを指定。C,D,G,H,T,X,?に影響。
X
eXamineX [レジスタ名] レジスタを省略した場合,全レジスタの内容表示。レジスタを指定した場合,そのレジスタの値を変更。
?
help?モニタコマンドの書式をヘルプ表示。。


 なお,モニターで?コマンドを実行したとき出力されるメッセージは以下の通り。

B(Base) [segment base]
C(Compare) start,end,destination
D(Dump) [start[,end]]
E(Edit) start
F(Fill) start,end,data
G(Go) [start][,B1[,B2][,T]]
H(History) [steps]
L(Load) store[,file #]
M(Move) start,end,destination
Q(Quit)
S(Save) start,end[file #]
T(Trace) [steps]
V(View) [device]
X(eXamine) [register]
?(help)






3.疑似命令

 FX-890Pのアセンブラ・ソースのサンプルをリスト1に示す。


リスト1.アセンブラ・ソース・サンプル
;***********************************************
;* SAMPLE SOURCE PROGRAM for FX-890P
;***********************************************
ORG2000H
START:MOVBIN,FFH;FFH=ASCガ'0'-'9','A'-'F'イガイノトキアタイ
MOVDL,ASC
CMPDL,30H
JBRETURN;ASC<'0'
CMPDL,3AH
JNBHEXBIN;ASC>'9'
CMPDL,30H;ASCガ'0'-'9'ナノデ, 16シンニスル
JMPBINSET
HEXBIN:CMPDL,41HH
JBRETURN;ASC<'A'
CMPDL,47H
JNBRETURN;ASC>'F'
SUBDL,37H;ASCガ'A'-'F'ナノデ,16シンニスル
BINSET:MOVBIN,DL
RETURN:IRET
 
ASCDB'8';input data
BINDB1 DUP (?);ouput data
END;END OF PROGRAM



 このように,FX-890P, Z-1内蔵のアセンブラには,以下の5個の疑似命令が用意されている。

ORG: ORiGin・・・・・ローケーションカウンタの設定
END: END・・・・・ソースプログラムの終了
EQU: EQUivalent・・・・・シンボルの定義
DB: Define Byte・・・・・1バイト定数の定義
DW: Define Word・・・・・1ワード定数の定義

コマンド機能記述形式記述例
ORG
オペランドで指定される16ビット数値によって,プログラムの開始アドレスを指定する。 ORG疑似命令がないと,マシン語エリアの先頭アドレスである2000Hがプログラム開始アドレスとなる。 ORG 16ビット数値
  • ORG 2000H
END
ソース・プログラムの終了を指定する。 END
  • END
EQU
オペランドで指定した数値に名前を付ける。 名前 EQU 8ビット数値または16ビット数値
  • CR EQU 0DH
  • CRLF EQU 0D0AH
DB
1バイトデータを定義する。オペランドの指定方法によって,単にデータ領域の確保だけもできる。 変数名は省略可能。
・8ビット数値の場合
オペランドで指定した8ビット数値をそのままメモリー上に確保し,変数名で参照できるようにする。 8ビット数値は,カンマで区切って最大12個まで指定可能。数値は,10進数または16進数で記述。
変数名 DB 8ビット数値 [ , 8ビット数値 [ , [・・・]]]
  • TBL DB 0AH
  • CMD DB 0F1H,0F2H,0F3H
・文字列の場合
オペランドで指定した文字列をそのままメモリー上に確保し,変数名で参照できるようにする。 文字列は,最大12文字まで指定できる。
変数名 DB 文字列
  • TBL DB 0AH
  • MEG DB 'ABC'
・データ領域確保の場合
オペランドで指定した8ビット数値分,バイト単位でデータ領域を確保する。ただし,データの初期化はしない。
変数名 DB 8ビット数値 DUP (?)
  • WTBL DB 4 DUP (?)
DW
1ワード(2バイト)データを定義する。オペランドの指定方法によって,単にデータ領域の確保だけもできる。 変数名は省略可能。
・16ビット数値の場合
オペランドで指定した16ビット数値をそのままメモリー上に確保し,変数名で参照できるようにする。 16ビット数値は,カンマで区切って最大6個まで指定可能。数値は,10進数または16進数で記述。メモリへの配置方法は,CPUがx86系なので,リトル・エンディアン。
変数名 DW 16ビット数値 [ , 8ビット数値 [ , [・・・]]]
  • ATBL DW 0F03H
  • CMDT DW 0FB31H,00ABH
・ラベル指定の場合
オペランドで指定したラベルの存在するメモリー上のオフセットアドレスをメモリーに格納する。
変数名 DW ラベル名
  • ADDT DW BUFF
・データ領域確保の場合
オペランドで指定した16ビット数値分,ワード(2バイト)単位でデータ領域を確保する。ただし,データの初期化はしない。
変数名 DW 16ビット数値 DUP (?)
  • DTBL DW 4 DUP (?)






4.PTR,OFFEST,SEG

 アセンブラのソースコードで,メモリの間接アドレッシングを行うとき,データの型が不明瞭なとき,PTRで型指定を行う。 使用方法は,PTRの前にBYTE, WORD, DWORDを付ける。例えば,

   ADD WORD PTR[SI], 4

のように記述する。なお,ニモニックやレジスタ名でデータの型が明らかな場合は,型指定は省略可能。

 "OFFSET ラベル名"は,内臓RAMのトップアドレス(0000H)からのオフセット値を返す。

 "SEG ラベル名"は,FX-890P/Z-1の内蔵アセンブラでは必ず0000Hを返す仕様になっている。






5.アセンブラ・エラー・メッセージ一覧

エラーメッセージエラー内容対処方法
Label Syntaxラベルのエラー。
  • ラベル名はアルファベットで始める。
  • ラベルに使用できない文字を使用しない。
  • ラベル名は8文字以内にする。
  • ORG, END疑似命令にラベルは付けない。
  • DB, DW, EQU疑似命令の変数,名前には,":"を付けない。
  • ラベルの末尾には,":"を付ける。
Mnemonic Syntaxニモニックの文法エラー。
  • ニモニックの記述を確認する。
Operand Syntaxオペランドの文法エラー。
条件分岐命令の分岐先が範囲外である。
  • オペランドの記述を確認する。
  • 分岐先のアドレス位置を確認する。
Undefined Labelオペランドに未定義のラベルを使用した。
  • オペランドを確認する。
  • ラベルを確認する。
OM errorマシン語エリアがない。CALモードに戻る。
  • CLEAR文でマシン語領域を確保する。
Buffer Overflow1行の文字数が256以上になった。
  • 1行の文字数を255文字以下に抑える。
Label Redefined同じラベル名を再度定義しようとした。
  • 同じラベルは使用しない。
Label Overflow新しいラベルを登録できない。
  • 他のプログラムやテキストファイルを削除して,フリーエリアを増やす。
  • CLEAR文で,フリーエリアを増やす。
Object Overflowオブジェクトを格納できない。
  • 他のプログラムやテキストファイルを削除して,フリーエリアを増やす。
  • CLEAR文で,フリーエリアを増やす。








LF