0

画面に文字列を表示するために INT 21h を使用しようとしていますが、プログラムがすぐにクラッシュするようです...

MASMを使っています

これが私のコードです:

.stack 200h

    .data?
      value dd ?

    .data
      item dd 0
      str1 db 'Hello world!$'
    .code

start:

; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤


    mov edx, offset str1
    mov al, 09h
    int 21h
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

end start
4

2 に答える 2

2

いくつかの問題:

  1. あなたのプログラムは DOS で正しく終了しませんint 21hfunction 4chプログラムを終了するために使用します。
  2. スタックが少なすぎる可能性があります。割り込みサービス ルーチンと常駐プログラム、含まれるドライバー (おそらく DOS も) は、現在のスタックを使用します。200hいつでもバイト数以上が必要な場合は、スタック スペースがまだいくらかあると思われる場所にあるコードやデータを上書きします。これもクラッシュやハングアップの原因となります。サイズを に上げ1000hます。
  3. プログラムが実行されたプロセッサを指定しませんでした。mov edx, offset str1問題は、 i80386/8088、i80186、i80286、およびそれらのクローンでは当然使用できないi80386+ 命令 ( ) を使用したことです。ところで、DOS は 32 ビットのアドレスまたはオフセットをサポートしていません。である必要がありますmov dx, offset str1

他にもあるかもしれませんが、まずこれらを修正しましょう。

于 2012-04-06T13:46:53.727 に答える
0

本当に 8086 を使用している場合は、次のように使用してください。

はるかにシンプルでクリーンなイモ。

于 2014-10-01T11:57:30.807 に答える