1
我有这样的Win32代码:FMUL并在情况不明朗溢出注册
fld x
fmul y
fstsw ax
似乎fmul
不明确FPU状态寄存器位,也就是说,如果溢出已经被设置(ax
& 8),那么它会在fmul
之后保持设置。这是正确的行为吗?是否需要在FPU操作之前或之后清除状态?
I.e.我想fmul
会设置这一点,但它应该重置它?我无法在网上找到答案。
我有这样的Win32代码:FMUL并在情况不明朗溢出注册
fld x
fmul y
fstsw ax
似乎fmul
不明确FPU状态寄存器位,也就是说,如果溢出已经被设置(ax
& 8),那么它会在fmul
之后保持设置。这是正确的行为吗?是否需要在FPU操作之前或之后清除状态?
I.e.我想fmul
会设置这一点,但它应该重置它?我无法在网上找到答案。
你打赌这是正确的行为。
从Intel® 64 and IA-32 Architectures Software Developer’s Manual
8.1.3.3 x87 FPU Floating-Point Exception Flags
,卷1:
异常标志是“粘性”位(一旦建立,他们一直保持,直到明确清零)。可以通过执行FCLEX/FNCLEX(清除异常)指令,通过用FINIT/FNINIT或FSAVE/FNSAVE指令重新初始化x87 FPU,或通过用FRSTOR或FLDENV指令覆盖标志来清除它们。
如果禁用FPU异常,则不需要重置这些标志。
好的谢谢。我在某些功能中发现了FNCLEX,但在其他功能中却没有,这有助于发现问题。 – queen3 2013-03-19 09:50:11