ある数値を入力して、その数値までのすべての素数を計算しなければならない課題があります。たとえば、プログラムに 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マイループ; いいえ - もう一度ループします
終了した:
戻る