0

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

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.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

我的问题是,为什么st(7)发生了变化,我怎样才能达到预期的结果。谢谢你的帮助!

4

2 回答 2

0

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

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

于 2014-01-16T13:00:20.067 回答
0

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

于 2014-01-15T22:03:30.107 回答