質問

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

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

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

ペーストビンコード

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

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

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

編集2:

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

        add esp,8

そして:

next:   push ecx
        ...
pop ecx
loop next

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

役に立ちましたか?

解決

[OK]を、私はそれを得ました。 。 。 あなたは、ユーザからの番号をint型読みます。 43行目に続いてライン41であなたのいずれかのジャンプは、47行目にまたは貫通落ちます。

あなたは43行目に行く場合は、

、あなたはその後、49(終了)を行にジャンプライン45に達します。 代わりにする場合は、47行目に行きました、あなたは49(最後の)行目に通じ分類されます。

バックライン29(次へ)

両方のケースでは、あなたは、ループます。

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

あなたは周りのライン29でECXを押して、右のあなたのループの前にそれをポップしようとしたことがありますか?

他のヒント

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

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

  • jmp end しません:直後の end が来る loop next. 。ループを終了する条件が見当たりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top