FPU IA-32 SIGFPE,算术异常

时间:2013-06-14 01:41:48

标签: assembly x86 fpu ia-32

我在下面的代码中遇到了问题。它是IA-32架构上的GAS asm语法。它在fsqrt指令后生成算术异常。 SetDoubleint类型的值0x0200input是一个浮点数。我正在使用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

1 个答案:

答案 0 :(得分:1)

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

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