2016-04-17 4 views
1

アセンブリ言語でのループについての作業がありました。私たちの仕事は簡単です:各数字の間にスペースを入れて数字0から9を表示してください。私は、私たちの学校のWINDOWS 7で 'debug'コマンドを使ってコマンドプロンプトで作業するコードを得ました。私のラップトップはWindows 10で、私は最近、コマンドプロンプトに「デバッグ」コマンドがないことを知りました。だから私はDOSBox 0.74(最新、多分)で自分のコードを書こうとしました。 DOSBoxで実行するたびに、プログラムが突然停止してクラッシュします。コードはこちらWindows 7のデバッグ命令で動作するループ文は、DOSBox 0.74では動作しません。

mov cx,0a 
mov ah,02 
mov dl,30 
int 21 
mov bl,dl 
mov dl,20 
int 21 
mov dl,bl 
inc dl 
loop 0107 
int 20 

誰かがDOSBoxがクラッシュする理由を教えてください。

enter image description here

+0

DOSBoxで 'debug'を使用していますか? DOSBoxであなたのプログラムをどのように実行しているのかがはっきりしないので尋ねます。 –

+1

なぜMOV AH、4Chの代わりに 'INT 20h'で終わるのですか? INT 21h'? – i486

+0

なぜ 'loop'のジャンプターゲットとしてラベルを使用しないのですか? –

答えて

1

あなたの質問はこの他のStackoverflow questionの複製ではありませんが、特定の類似点を共有しているようです。つまり予期しないハングや異常な動作。 DOSBoxで実行すると、DEBUG.EXEのMS-DOS用のバージョンが正しく機能するとは限りません。これは、DOSBoxが実際のPC /ハードウェア(およびDOS)をエミュレートする1​​00%互換性がないためです。これによりDOSBoxで使用されたときに期待どおりに動作しないプログラムやOSが生じることがあります。

DOSBoxで実行すると、さまざまなMS-DOS DEBUG.EXEプログラムが正しく動作しない可能性があると私は前のStackoverflow answerを修正しました。 Ross Ridgeは、DOSBox内で実行すると、DOS 6.22のデバッガで問題を再現できることを確認します。

DEBUG.COMのバージョンがFreeDOSによってリリースされ、DOSBoxでうまくいくようです。私はDEBUG.COMのFreeDOSバージョンを私のウェブサイトからダウンロードできるようにしました。あるいは、SoftpediaからZIP Fileをダウンロードし、DEBUG.COMを抽出することもできます。

+1

私の声明を明確にするために注意DOSBoxの下で実行するとMS-DOS 6.22 DEBUG.EXEで問題を再現できる。 VMでMS-DOS 6.22で使用すると正常に動作します。 –

+0

@RossRidge私はあいまいでした。私の答えは、DOSBoxの下で正しく実行されていないと言いました。問題の理由がDOSBoxとの互換性に関連していると私が言ったとき、私はそれを暗示しました。 –

0

AXはDOS-割り込みint 21hのための揮発性レジスタである:ここでは

は、Windows 7上でCMDで実行する作業プログラムのサンプル写真です。したがって AH=02hの内容は INT 21hコールによって上書きされます。斧

除きだからあなたのコード

に - レジスタの内容を保存

BIOS(最もDOS)ISRは:私が参照するために見つけることができる唯一の源は、約Interrupt Services from the Mississippi State Universityページ1に述べている文書であります

AHにはまだ02hの値が含まれていると誤って仮定します。これは必ずしもそうではありません。

だから、ループ文の前MOV AH, 02hを追加し、0107に位置あなたのINT 21hが、その後02h正しいDOS-関数を呼び出しますので、あなたのプログラムは、より少ない誤っ実行する必要があります。

+1

BIOS/DOSは呼び出し規約に関して矛盾しています。本当のAXはしばしば詰まっていますが、常にそうであるとは限りません。 [Ralf Brownの割り込みリスト](http://www.ctyme.com/rbrown.htm)は、一般にDOS用の聖書の割り込みを考慮しています。この場合、公式のドキュメントは_AL_と_AH_が触れられていないと言っています。ラルフの文書[INT 21h/AH = 2](http://www.ctyme.com/intr/rb-2554.htm)は、_AL_が破壊されたことを示し、印刷された文字を返します。これは、彼の問題の原因問題はコードに関連していなかったが、彼の 'DEBUG'プルグに問題があった –

関連する問題