Assembly FPU IA-32 SIGFPE,算术异常
我对下面的代码有问题。它是IA-32体系结构上的GAS asm语法。它在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
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,以屏蔽精度异常