gpt4 book ai didi

assembly - 从 FPU 堆栈中删除某些内容的最简单方法

转载 作者:行者123 更新时间:2023-12-04 01:32:59 26 4
gpt4 key购买 nike

我最近在 FPU 堆栈溢出方面遇到了一些麻烦。我设法将其追溯到一个有问题的库函数,该函数每次调用时都会将垃圾值推送到 FPU 堆栈上,并且从不清除它。

幸运的是,这很容易重现,我确切地知道是什么条件导致的。我可以将一个内联 ASM 块放入调用此例程以将顶部值从 FPU 堆栈中弹出的例程中……除非我不太知道该写什么。我的 ASM-fu 中规中矩,但没那么强。

那么在 x86 程序集中摆脱 FPU 堆栈上的最高值的最简单方法是什么,假设它是垃圾数据并且我不关心该值?

最佳答案

如果您知道需要调整堆栈多少,可以使用 fincstp .你也想ffree您递增的寄存器。

但是,最简单的解决方案可能是使用一种弹出数据传输操作,例如 fstp .通常,您会将结果存储到内存区域以供以后使用,例如:

mem_area: defs 10         ; ten bytes for 80 bits
fstp mem_area ; pop it

但是,如果您知道只想丢弃该值,则可以使用 st(0)自己作为目的​​地,节省内存需求:
fstp st(0)

here有关说明的详细指南(特别是 this bit)。

关于assembly - 从 FPU 堆栈中删除某些内容的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4772389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com