FMUL不清除STATUS寄存器中的溢出

que*_*en3 1 floating-point x86 assembly x87

我有这个Win32代码:

fld x
fmul y
fstsw ax
Run Code Online (Sandbox Code Playgroud)

似乎fmul没有清除FPU状态寄存器位,即如果已经设置了溢出(ax&8),那么它将保持设置fmul.这是正确的行为吗?是否需要在FPU操作之后或之前清除状态?

即我想fmul设置这个位,但它应该重置它吗?我在网上找不到答案.

Ale*_*nze 5

你敢打赌这是正确的行为.

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指令重新初始化x87 FPU,或使用FRSTOR或FLDENV指令覆盖标志来清除它们.

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