EXCEPTION_INT_OVERFLOWおよびEXCEPTION_INT_DIVIDE_BY_ZERO例外に関する質問があります。Win32 EXCEPTION_INT_OVERFLOW対EXCEPTION_INT_DIVIDE_BY_ZERO
WindowsはIDIV命令で生成された#DEエラーをトラップし、これらの2つのコードの1つで生成およびSEH例外を終了します。
私が持っている質問は、どのように2つの条件を区別するのですか?インテルマニュアルのidivに関する情報は、 "ゼロ除算"と "アンダーフローのケース"の両方で#DEを生成することを示しています。
intelマニュアルの第3巻の#DEエラーに関するセクションを簡単に見ましたが、私が収集できるベストは、OSがDIV命令をデコードし、除数引数をロードしてから比較する必要がありますゼロにする。
私は少し狂っているようです。なぜチップデザイナーは、エラーの2つの原因を区別するために何らかのフラグを使用しませんでしたか?私は何かが欠けているように感じる。
OSが2つの異なる原因を区別する方法を知っている人はいますか?
「IDIV」が「EXCEPTION_INT_OVERFLOW」を生成できることを示す文書がありますか?私は 'INT_MIN/-1'には問題があると理解していますが、' EXCEPTION_INT_OVERFLOW'の記述にはこのケースは含まれていません。 –
@Ben実験的に検証しました。 INT_MIN/-1を実行すると、IDIV命令はEXCEPTION_INT_OVERFLOWになり、INT_MIN/0を実行するとEXCEPTION_INT_DIVIDE_BY_ZEROが得られます。どちらの場合も、IDIV命令の実行を試みた後に例外がスローされます。 –
@Scott:Hmmm ... MSDNのドキュメントが失敗します。それは珍しいことではありません。 –