我有一个问题:让我说我的浮点单元堆栈如下:
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
发生了变化,我怎样才能达到预期的效果。谢谢你的帮助!
答案 0 :(得分:0)
ST7已更改,因为它是旋转堆栈后st0的先前内容。您的调试器应该以某种方式指示该值不可用。
答案 1 :(得分:0)
好的,我现在得到了答案。在最后一个寄存器中显示非零值的问题是FPU堆栈构建的结果。 st(7)中显示的值只是垃圾,是编译器弹出顶部项的方法的结果。因此,要弹出堆栈,它只是旋转堆栈。
附注:其他编译器可能但不必以这种方式工作,因此我们不应期望每个代码都像这样执行。这是编译器的问题。