debug程序,关于联想品牌机浮点协处理器的万般困惑
下面这段程序,在我们的任何兼容机上都能正常运行,但是在联想的机器上,频繁出现崩溃(float point devided by zero)。崩溃发生在第三行的 fld 指令。这种现象不是每次都出现,而是随机出现。也就是说,有的时候也能正常运行,但是有的时候就报告除零错。
// source code line 96: res.x=a.x-b.x;
028D355C mov eax,dword ptr [ebp+0Ch]
028D355F mov ecx,dword ptr [ebp+10h]
028D3562 fld qword ptr [eax]
028D3564 fsub qword ptr [ecx]
028D3566 fstp qword ptr [ebp-18h]
查看 eax 指向的浮点数 *(double*)eax 0.024238226856386 非常正常。
ecx 的: *(double*)ecx 0.024238226856386 也没问题。
fld 指令怎么可能除零错呢!!这里根本没有除法运算,只有加减法。艾,什么破机器。是不是浮点协处理器有问题?
浮点栈当前状态如下:
ST0 = +0.00000000000000000e+0000
ST1 = +0.00000000167336242e+2071
ST2 = +0.00000000000000000e+0000
ST3 = +0.00000000000000000e+0000
ST4 = -4.14142770149854512e+2261
ST5 = +8.14522198282385296e+2114
ST6 = +0.00000000000000000e+0000
ST7 = +0.00000000000000000e+0000