【问题标题】:What should be the result after fldfld 之后应该是什么结果
【发布时间】:2020-07-05 11:05:50
【问题描述】:

我需要计算这段代码之后 x 的值是多少。

Section data
db 0,0,0,0,0,0,0,0x80,0,0x40

Section text
Fld tword [x]

答案应该是 8,但我得到了 3。

Sign: 0

Mantisa: calcukated from the part of 0x40 0 which is 1000000000000000 give us after calculate : 2

然后我们从分数代码中得到 1.5

结果是 1.5 * 2 = 3

【问题讨论】:

    标签: assembly floating-point x87


    【解决方案1】:

    对于初学者来说,你混淆了命名,你所说的尾数是指数。它的编码偏差为 16383。所以你的指数是16384 - 16383 = 1。有效数字与显式整数位一起存储,因此也只是1

    因此这个数字是1 * 2^1 = 2。不是你说的8。您可以在调试器中检查它:

    (gdb) info float
    =>R7: Valid   0x40008000000000000000 +2
    

    【讨论】:

    • 谢谢。你能解释为什么没有分数吗?分数的一部分 80 呢?
    • 扩展精度格式显式存储整数位,因此0x80…00 是二进制的1.000…00。单精度和双精度省略了假定为 1 的整数位,因此在这种情况下,您只有分数。
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2014-07-25
    • 1970-01-01
    • 2014-01-13
    • 2011-06-29
    • 2015-12-23
    相关资源
    最近更新 更多