1

アセンブリ言語で単純なループを作成するように求められましたが、ループが必要なときに終了せず、無限ループが続くため、問題が発生します。

ECXに入力によって取得される変数を指定する必要がありますが、以下のコードでは、カウンターを直接指定した場合でも、無限ループに陥ります。

私のコードはここにあります(更新):

PasteBinコード

コードには、実際のループ以外のエラーが含まれている可能性があります。

//プログラム要件の説明のために編集...

プログラムは、ループのカウンターとして使用される入力「n」を取得する必要があります。次に、入力「n」個の数値を取得します。数値が正の場合は変数postotに追加する必要があり、負の場合は変数negatotに追加する必要があります。「n」個の数値を入力した後、各変数の結果を出力して、プログラムを終了します。

編集2:

スタックを正しくクリアすることでループの問題を修正したので、次を追加しました。

        add esp,8

と:

next:   push ecx
        ...
pop ecx
loop next

これでループの問題が修正されました。

4

2 に答える 2

1

はい、分かりました。。。ユーザーからint番号を読み取ります。次に、41行目で、47行目にジャンプするか、43行目にフォールスルーします。

43行目に行くと、45行目に到達し、49行目(終了)にジャンプします。代わりに、47行目に移動した場合は、49行目(終了)にフォールスルーします。

どちらの場合も、29行目(次へ)にループバックします。

ループに到達するたびにecxレジスタがデクリメントされ、ループの処理中に変更されないままになることが期待されます。

29行目あたりでecxを押して、ループする直前にポップしてみましたか?

于 2009-11-13T16:21:42.893 に答える
0

2つのエラーが表示されます。

  • JG positiveスタックポインタをインクリメントした後、そこにあります。入力した数値ではなく、スタックフレームをいじった結果を確認してもよろしいですか?

  • jmp endしない:直後endloop next。ループを終了するための条件が表示されません。

于 2009-11-13T16:19:24.740 に答える