前回作成した
- コンソール風ウィンドウ(入力・出力)
- ソースコード入力ウィンドウ
- 描画ウィンドウ
をもつシステムを使って、このシステム上で 68000 アセンブリ言語のインタープリターを動作させます。インタープリターは以下のような仕様とします。
デバッガーのコマンド
- exit
- step
- continue
- breakpoint 行番号
- output 行番号
- list 開始行番号 終了行番号
- load
- reglist レジスタリストの文字列 または #数値
- レジスタリストを転送する movem 命令のレジスタリストの解析
- プッシュ時
- 文字列または数値(パターンを表す2進数)で指定
- rreglist レジスタリストの文字列 または #数値
- レジスタリストを転送する movem 命令のレジスタリストの解析
- ポップ時
- 文字列または数値(パターンを表す2進数)で指定
- sample
- help
実行できる命令
- move, movea, moveq
- movem
- jmp
- je, jne, jg, jge, jl, jle, ja, jae, jb, jbe, js, jns, jo, jno
- dbra
- dbe, dbne, dbg, dbge, dbl, dble, dba, dbae, dbb, dbbe, dbs, dbns, dbo, dbno
- jsr
- rts
- lea, pea
- link, unlk
- add, adda, addq, addx
- sub, suba, sibq, subx
- cmp
- neg, negx
- tst
- clr
- mulu, muls
- divu, divs
- and
- or
- eor
- not
- lsl, lsr, asl, asr
- rol. ror, roxl, roxr
- *print
- *print 文字列 または *print 文字列, オペランド
疑似関数
- *lmulu, *lmuls
- *ldivu, *ldivs
- *dsin
- *dcos
- *dsqrt
- *itod
オペランドが値を表す場合のデータのサイズ
命令の後に
- .b が付く → 1 バイト
- .w が付く → 2 バイト
- .l が付く → 4 バイト
オペランドが値を表す場合(取得)
- ラベル → ラベルが表すアドレスから指定したサイズの値を取得
- #数値 → その数値を取得
- レジスタ → レジスタの値を(指定したサイズにして)取得
- (レジスタ) → レジスタが表すアドレスから指定したサイズの値を取得
- -(レジスタ) → レジスタの値を指定したサイズ減らした後、レジスタが表すアドレスから指定したサイズの値を取得
- (レジスタ)+ → レジスタが表すアドレスから指定したサイズの値を取得後、レジスタの値を指定したサイズ増やす
- 数値(レジスタ) → レジスタの値 + 数値が表すアドレスから指定したサイズの値を取得