【发布时间】:2011-01-23 04:59:00
【问题描述】:
我最近遇到了一些 FPU 堆栈溢出问题。我设法将其追溯到一个有缺陷的库函数,该函数每次调用时都会将垃圾值推送到 FPU 堆栈上,并且从不清理它。
幸运的是,这很容易重现,我确切地知道是什么条件导致了它。我可以将一个内联 ASM 块放入调用该例程的例程中,以将顶部值从 FPU 堆栈中弹出……除非我不太清楚该写什么。我的 ASM-fu 中等偏上,但没有那么强。
那么,假设它是垃圾数据并且我不关心该值,那么在 x86 汇编中摆脱 FPU 堆栈上的顶部值的最简单方法是什么?
【问题讨论】:
-
为了记录,x87 已经过时了。现代代码通常会使用 XMM 寄存器,即使是标量 FP 数学,也可以使用
addss(标量单精度)或addsd(scalar double) 之类的指令。查看任何 FP 函数的编译器生成的代码作为示例。