私はこのWin32コードを持っています:
fld x
fmul y
fstsw ax
fmul
FPUステータスレジスタビットをクリアしていないようです。つまり、オーバーフローがすでに設定されている場合( ax
&8)、その後も設定されたままになりfmul
ます。それは正しい振る舞いですか?FPU運用後または運用前にステータスをクリアする必要がありますか?
fmul
つまり、このビットを設定すると思いますが、リセットする必要がありますか?オンラインで答えが見つかりませんでした。
私はこのWin32コードを持っています:
fld x
fmul y
fstsw ax
fmul
FPUステータスレジスタビットをクリアしていないようです。つまり、オーバーフローがすでに設定されている場合( ax
&8)、その後も設定されたままになりfmul
ます。それは正しい振る舞いですか?FPU運用後または運用前にステータスをクリアする必要がありますか?
fmul
つまり、このビットを設定すると思いますが、リセットする必要がありますか?オンラインで答えが見つかりませんでした。
あなたはそれが正しい行動であるに違いない。
から8.1.3.3 x87 FPU Floating-Point Exception Flags
、Intel® 64 and IA-32 Architectures Software Developer’s Manual
ボリューム1:
例外フラグは「スティッキー」ビットです(一度設定されると、明示的にクリアされるまで設定されたままになります)。これらは、FCLEX / FNCLEX(例外のクリア)命令を実行するか、FINIT /FNINITまたはFSAVE/FNSAVE命令でx87FPUを再初期化するか、FRSTORまたはFLDENV命令でフラグを上書きすることによってクリアできます。
FPU例外が無効になっている場合は、これらのフラグをリセットする必要はありません。