• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:デバッグについて教えてください。)

アセンブリのデバッグについて

このQ&Aのポイント
  • アセンブリのデバッグにおけるセグメントレジスタとIPの変化について疑問があります。
  • DOS窓のDEBUGでアセンブリをトレースした場合、CSとIPが変化する理由が分かりません。
  • INT21Hによる割り込みが関係しているのかもしれませんが、トレースコマンドでは実行順に従わないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

int 21h で割り込み処理ルーチンに飛んで、いずれ、(RETI 命令で)帰ってきます。 ただ、MS-DOS (または、Windows のコマンドプロンプト)なら、 AH に 01 をセットした後の、int 21h は、「キーボードからの入力」になります。 そう言ったわけで、キーボードからの入力になってしまったのでしょう。 この例に限らず、int 21H のような、システムルーチンがらみの(ハードウエアに絡んだ)部分があると、Debug ではうまく扱えずに立ち往生する可能性は非情に高いです。

syugyoucyuu
質問者

お礼

二度に渡りありがとうございます。 とても納得ができる回答でした。 >システムルーチンがらみの部分があると、Debug ではうまく扱えずに立ち往生する可能性は非情に高い トレースコマンドでサクサク進むと考えていただけに、この言葉は逆に救われました。 やはり一筋縄ではいかないのですね。 あと、retでいずれ帰ってくると聞いて安心しました。 ありがとうございました。

その他の回答 (1)

回答No.1

int 21h についてどのようなイメージをお持ちでしょうか? あと、アセンブラにおける「サブルーチン」はわかりますか? ものすごくおおざっぱに言えば、特殊なサブルーチン呼び出しです。 ※本当はちょっと違う。 ※サブルーチンコールの場合には、サブルーチンの先頭を指定するけれど、int の場合、「あらかじめ別のところで決まっている」アドレスに飛ぶので、飛び先のアドレスは指定しない。 ※といいつつ、int 21h は、「21番の割り込み処理ルーチンへ」ということなので、まあ、これが、サブルーチンの先頭アドレスのような意味になっている ということで、int の次は、その割り込み処理ルーチンに処理が飛び込みます。

syugyoucyuu
質問者

お礼

丁寧な回答ありがとうございます。 >ということで、int の次は、その割り込み処理ルーチンに処理が飛び込みます。 やはりそうでしたか。 おそらく割り込みの方へ飛んでいるのだろうと思ってはいたのですが、この場合、少しわからないことがあります。 intのあと別セグメントへ飛んだあと、トレースコマンドを続けていればいつかは、 3544:0004 MOV CX,072F へ処理が戻ってくるのでしょうか? いちおう -t を連打してみたのですが、ある一定のところでコマンドが働かなくなってしまうので、(文字が入力できるだけの状態になってしまう)、どうなっているのか疑問です。 馬鹿げた疑問かもしれませんが、もしわかるのであればご教授願います。