2

私はこのWin32コードを持っています:

fld x
fmul y
fstsw ax

fmulFPUステータスレジスタビットをクリアしていないようです。つまり、オーバーフローがすでに設定されている場合( ax&8)、その後も設定されたままになりfmulます。それは正しい振る舞いですか?FPU運用後または運用前にステータスをクリアする必要がありますか?

fmulつまり、このビットを設定すると思いますが、リセットする必要がありますか?オンラインで答えが見つかりませんでした。

4

1 に答える 1

6

あなたはそれが正しい行動であるに違いない。

から8.1.3.3 x87 FPU Floating-Point Exception FlagsIntel® 64 and IA-32 Architectures Software Developer’s Manualボリューム1:

例外フラグは「スティッキー」ビットです(一度設定されると、明示的にクリアされるまで設定されたままになります)。これらは、FCLEX / FNCLEX(例外のクリア)命令を実行するか、FINIT /FNINITまたはFSAVE/FNSAVE命令でx87FPUを再初期化するか、FRSTORまたはFLDENV命令でフラグを上書きすることによってクリアできます。

FPU例外が無効になっている場合は、これらのフラグをリセットする必要はありません。

于 2013-03-19T09:40:00.890 に答える