CaslBuilderを使ってみましょう。
ここでは、DATA1番地の内容からDATA2番地の内容までの和を求め、ANS番地に格納するプログラム(subwa.cas) を実行してみます。また、デバッガの一機能であるアニメート実行,トレース実行,ステップ実行,ブレークポイントの設定, レジスタの内容の変更,メモリの内容の変更,スタックの追跡を学びます。
なおデバッグウィンドウは以下のようになっています。
;機能 DATA1番地の内容からDATA2番地の内容までの和を求め、ANS番地に格納する。 ; ただし,DATA1番地の内容 <= DATA2番地の内容とする。 MAIN START LD GR1,DATA1 LD GR2,DATA2 CALL SUBWA ST GR0,ANS RET DATA1 DC 1 DATA2 DC 10 ANS DS 1 END ; SUBWA START PUSH 0,GR1 LAD GR0,0 LOOP CPA GR1,GR2 JPL EXIT ADDA GR0,GR1 ADDA GR1,=1 JUMP LOOP EXIT POP GR1 RET END
([ファイル]‐[新規])をクリックして新しいエディタを開き, 上記のプログラムをコピーして貼り付けます。
([ファイル]‐[全て保存])をクリックし、「subwa.cas」 というファイル名で保存します。
([実行]‐[実行])をクリックします。リスティングファイルウインドウにリスティングファイルが表示され、メッセージウインドウにアセンブル、リンクの結果が表示され、標準入出力ウインドウに実行結果が表示されます。
([実行]‐[デバッグ開始])をクリックします。デバッグウインドウ が表示されます。
([実行]‐[アニメート実行])をクリックします。プログラムの 実行の流れがよくわかると思います。
([実行]‐[デバッグ開始])をクリックします。そして,([実行]‐[トレース])または,([実行]‐[ステップ])をクリックしていきます。1ステップずつ実行されます。なお,「トレース」と「ステップ」の違いは「トレース」はとにかく1ステップずつ追跡していきますが,「ステップ」はCALL命令でサブルーチンに飛ぶときは、そのサブルーチンは一気に実行するところです。比較してみてください。
ここではDATA2番地の内容を10から5に変更して実行してみます。ANS番地には1から5までの和である15が格納されるはずです。
([実行]‐[デバッグ開始])をクリックします。そして,010A(DATA1)番地のメモリの内容000Aをダブルクリックします。
000Aを0005に変更します。
([実行]‐[実行(GO)])をクリックします。ANS(010B)番地に1から5までの和である15が格納されているのがわかります。
ここではサブルーチンSUBWAの入り口と出口にブレークポイントを設定し,そこまで一気に実行し,レジスタの内容を変更し,サブルーチンSUBWAの動作を確認することにします。
([実行]‐[デバッグ開始])をクリックします。そして,SUBWAの行とEXITの行をダブルクリックしてブレークポイントを設定します。
([実行]‐[実行(GO)])をクリックします。SUBWAの行で実行が停止します。そして,レジスタGR2の内容000Aをダブルクリックします。
000Aを0005に変更します。
([実行]‐[実行(GO)])をクリックします。EXITの行で実行が停止します。そして,サブルーチンSUBWAの返却値であるGR0の内容が1から5までの和である15になっているのがわかります。
サブルーチン呼び出し,PUSH命令,POP命令,呼び出し側への復帰にかかわるスタックの変化を見ていきましょう。
([実行]‐[デバッグ開始])をクリックします。そして, SPの内容を確認すると091Aとなっていることがわかります。
091A番地の内容が見えるようにメモリダンプペインを右クリックし「アドレスを指定してジャンプ(A)」を選択します。そして,091A番地にジャンプします。
F000となっていることがわかります。
あとは,([実行]‐[トレース])をクリックしていきスタックの内容を確認していきます。