我试图对 x86 上的浮点运算有一个基本的了解。我知道我们有一个带有堆栈的专用 FPU,但我没有找到太多关于堆栈在不同指令方面的行为的相关信息。
基本上,fpu 寄存器的寻址让我感到困惑。如果我指的是 st(#),我是在谈论一个特定的寄存器吗?或者它是从堆栈顶部的偏移量?
我想我的大部分问题都可以通过这个例子来回答:
如果我有一个空的 FPU 堆栈,然后运行:
fld x
fld y
fmul st, st(1)
结果会是:
ST(0) = y * x
ST(1) = x
或者:
ST(0) = x * y
ST(1) = y
?
请注意,它们之间的差异是 ST(1) 中的值。