最近我遇到了一些麻烦,FPU堆栈溢出。我设法追踪它回到一个错误的库函数,它会在每次调用时将垃圾值推送到FPU堆栈上,并且永远不会清理它。最简单的方法从FPU堆栈中删除东西
幸运的是,这很容易重现,而且我确切知道是什么原因引起的。我可以将一块内联ASM放入调用此例程的例程中,以便将最高值从FPU堆栈中弹出...除非我不知道该写什么。我的ASM-fu对middlin公平,但不是那强。
那么,如何摆脱x86汇编中FPU堆栈的最高值,假设它是垃圾数据,我不关心这个值呢?
最近我遇到了一些麻烦,FPU堆栈溢出。我设法追踪它回到一个错误的库函数,它会在每次调用时将垃圾值推送到FPU堆栈上,并且永远不会清理它。最简单的方法从FPU堆栈中删除东西
幸运的是,这很容易重现,而且我确切知道是什么原因引起的。我可以将一块内联ASM放入调用此例程的例程中,以便将最高值从FPU堆栈中弹出...除非我不知道该写什么。我的ASM-fu对middlin公平,但不是那强。
那么,如何摆脱x86汇编中FPU堆栈的最高值,假设它是垃圾数据,我不关心这个值呢?
只需弹出任何(快速)指令即可将其从堆栈中弹出。 8087 instruction set
如果这不起作用,FUCOMPP弹出两次。
如果它只是你想要的顶值摆脱:
ffree st0
对于德尔福/ BASM,在我看来,一旦弹出FPU堆栈最简单的方法是:
asm
fstp st(0)
end;
权你是,@ Shaggieh,为我的这些胖手指补上。固定。 – paxdiablo 2011-01-23 05:28:00
工作。谢谢! – 2011-01-23 05:34:47