FPU IA-32 SIGFPE,算术异常(FPU IA-32 SIGFPE, Arithmetic

2019-10-18 06:17发布

我有一个问题,下面这段代码。 它是在IA-32体系结构GAS ASM语法。 它产生算术异常,后fsqrt指令。 SetDoubleint值的类型0x0200input是浮点数。 我与编写本-m32使用gcc标志。 在哪里可以我犯过错误的人点。

pushl %ebp
movl %esp,%ebp
finit                   
fldcw SetDouble          
fld input               
fld input
fmulp
fld1                    
faddp                   
fsqrt                   
fld1
fxch                    
fsubp
fstp output
mov %ebp,%esp 
pop %ebp

Answer 1:

控制字设置为0x200切换FPU双精度和不屏蔽所有的异常,包括精度异常。 因此对于大多数输入(可能是一切,除了0)的fsqrt将引发此异常,这就是你所看到的。

您可以设置控制字来代替0x220掩盖精度异常。



文章来源: FPU IA-32 SIGFPE, Arithmetic exception