【问题标题】:usage of fstp commandfstp 命令的使用
【发布时间】:2014-01-15 18:50:31
【问题描述】:

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

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) 发生了变化,我怎样才能达到我的预期结果。谢谢你的帮助!

【问题讨论】:

    标签: assembly masm fpu x87


    【解决方案1】:

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

    【讨论】:

    • 究竟是什么问题?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-12-08
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 2012-08-21
      • 2011-07-24
      • 1970-01-01
      • 2021-07-24
      • 2020-03-08
      相关资源
      最近更新 更多