fstp命令的用法

时间:2014-01-15 18:50:31

标签: assembly masm fpu x87

我有一个问题:让我说我的浮点单元堆栈如下:

ST0 = +1.5000000000000000e+0001   ST1 = +5.0000000000000000e+0000
ST2 = +2.5000000000000000e+0001   ST3 = +0.0000000000000000e+0000  
ST4 = +0.0000000000000000e+0000   ST5 = +0.0000000000000000e+0000   
ST6 = +0.0000000000000000e+0000   ST7 = +0.0000000000000000e+0000 

完成此指示后:

fstp st(1) 

我预测单位会将st(0)发送到st(1)(堆栈上的情况为1.5;1.5;2.5;0 etc),然后弹出堆栈的顶部,这样就可以{{} 1}}

相反,我看到以下内容:

1.5;2.5;0 etc.

我的问题是,为什么ST0 = +1.5000000000000000e+0001 ST1 = +2.5000000000000000e+0001 ST2 = +0.0000000000000000e+0000 ST3 = +0.0000000000000000e+0000 ST4 = +0.0000000000000000e+0000 ST5 = +0.0000000000000000e+0000 ST6 = +0.0000000000000000e+0000 ST7 = +1.5000000000000000e+0001 发生了变化,我怎样才能达到预期的效果。谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

ST7已更改,因为它是旋转堆栈后st0的先前内容。您的调试器应该以某种方式指示该值不可用。

答案 1 :(得分:0)

好的,我现在得到了答案。在最后一个寄存器中显示非零值的问题是FPU堆栈构建的结果。 st(7)中显示的值只是垃圾,是编译器弹出顶部项的方法的结果。因此,要弹出堆栈,它只是旋转堆栈。

附注:其他编译器可能但不必以这种方式工作,因此我们不应期望每个代码都像这样执行。这是编译器的问题。