2013-03-19 47 views
1

我有这样的Win32代码:FMUL并在情况不明朗溢出注册

fld x 
fmul y 
fstsw ax 

似乎fmul不明确FPU状态寄存器位,也就是说,如果溢出已经被设置(ax & 8),那么它会在fmul之后保持设置。这是正确的行为吗?是否需要在FPU操作之前或之后清除状态?

I.e.我想fmul会设置这一点,但它应该重置它?我无法在网上找到答案。

回答

5

你打赌这是正确的行为。

Intel® 64 and IA-32 Architectures Software Developer’s Manual8.1.3.3 x87 FPU Floating-Point Exception Flags,卷1:

异常标志是“粘性”位(一旦建立,他们一直保持,直到明确清零)。可以通过执行FCLEX/FNCLEX(清除异常)指令,通过用FINIT/FNINIT或FSAVE/FNSAVE指令重新初始化x87 FPU,或通过用FRSTOR或FLDENV指令覆盖标志来清除它们。

如果禁用FPU异常,则不需要重置这些标志。

+0

好的谢谢。我在某些功能中发现了FNCLEX,但在其他功能中却没有,这有助于发现问题。 – queen3 2013-03-19 09:50:11

相关问题