最近我遇到了一些麻煩,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