ある数値を入力して、その数値までのすべての素数を計算しなければならない課題があります。たとえば、プログラムに 9 を入力すると、3、5、および 7 が出力されます。
ある数値が素数かどうかを判断する私の計画は、それを 2 で割り、余りが 0 かどうかを確認することです。余りが 0 の場合、プログラムは被除数から 1 を引き、一番上に戻って再度割り算します。剰余が != 0 の場合、それを画面に出力し、被除数を再び減分します。これは、被除数が 0 になるまで発生します。これだけが起こっているわけではありません。何らかの理由で、DIV
命令を使用するたびに常に浮動小数点例外が発生し、その理由や解決方法がわかりません。これを修正する方法について誰かアイデアがありますか?
コード: %INCLUDE "csci224.inc" セグメント .data prompt: DD "数字を入力してください: ",0 ; プロンプト文字列 メッセージ: DD "素数です。", 0 ; n が素数の場合に表示 無効: DD "無効なエントリ。", 0 私: DD 2 セグメント.bss 入力: RESD 100 ; 本当に必要ないので無視してください セグメント .text 主要: 移動 edx、プロンプト WriteString を呼び出す ReadInt を呼び出す ムーブesi、eax; eax を esi に移動して、ループのインデックスとして使用します マイループ: xor edx、edx ; クリアレジスタ xor ecx、ecx xor eax, eax mov eax, dword 2 ; 2をeaxに移動 div ecx ; ecx/eax | n/2 decesi ; ループカウンターを減らす 12月ecx; デクリメント分子 cmp edx、dword 0 ; 残りはゼロですか? je myloop ; はい - プライムではない - トップに戻る eax、edxを移動します。いいえ - eax に移動して印刷します WriteInt を呼び出す Crlfを呼び出す cmp esi、0 ; カウンターゼロですか? jz 終了しました。はい - ループを終了します jmpマイループ; いいえ - もう一度ループします 終了した: 戻る