Assembly FPU IA-32 SIGFPE,算术异常

Assembly FPU IA-32 SIGFPE,算术异常,assembly,fpu,x86,Assembly,Fpu,X86,我对下面的代码有问题。它是IA-32体系结构上的GAS asm语法。它在fsqrt指令之后生成算术异常SetDouble是int值的类型0x0200并且input是浮点数。我使用gcc使用-m32标志编译此文件。有人能指出我犯了什么错误吗 pushl %ebp movl %esp,%ebp finit fldcw SetDouble fld input fld input fmulp fld1

我对下面的代码有问题。它是IA-32体系结构上的GAS asm语法。它在
fsqrt
指令之后生成算术异常
SetDouble
int
值的类型
0x0200
并且
input
是浮点数。我使用gcc使用
-m32
标志编译此文件。有人能指出我犯了什么错误吗

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

将控制字设置为0x200将FPU切换为双精度,并取消包括精度异常在内的所有异常的屏蔽。因此,对于大多数输入(可能除0之外的所有输入),
fsqrt
将引发此异常,这就是您看到的


您可以将控制字设置为0x220以屏蔽精度异常。

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

您可以将控制字设置为0x220,以屏蔽精度异常