我对下面的代码有问题。它是IA-32架构上的GAS asm语法。它在fsqrt指令之后产生算术异常。SetDouble是值为0x0200的int类型,input是浮点数。我用-m32 flag编译了这段代码,使用的是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发布于 2013-06-14 18:18:11
将控制字设置为0x200会将FPU切换为双精度,并取消屏蔽所有异常,包括精度异常。因此,对于大多数输入(可能是除0以外的所有输入),fsqrt将引发此异常,这就是您所看到的。
您可以将控制字设置为0x220,以屏蔽精度异常。
https://stackoverflow.com/questions/17099872
复制相似问题