我编写了一个简单的程序,将 pi 加载到 8087 中寄存器堆栈的顶部,然后将该常量返回到一个短实内存变量中。

FLDPI                     ;load pi
FSTP DWORD PTR shortReal  ;store pi in memory, then pop stack

存储在 shortReal 中的值为 40 49 0F DB hex。这转换为二进制的 0100000001001001111111011011。

第一位是 0,所以它是一个正数。偏置指数部分转换为 1。

因此,实际数字如下所示:

1(隐含点)10010010000111111011011

1(implied point)1 转换为 3. ,所以这是 PI 的正确整数部分,但在这一点之后我的理解崩溃了。

现在剩下以下数字:

0010010000111111011011

001 可以转换为 1,这是正确的。然而,这意味着下一个数字将是 001,它又是 1,这是错误的,或者它可能是 0010,它等于 2,但这也是错误的。

你如何将小数部分中的每个数字分开。

最佳答案

不,这不是你如何计算...
当您从小数点向右移动时。准确性增加。

用这个公式计算
考虑 n 值减少 -1 -2 -3 ...

现在
十进制值 =
0*2^-1 + 0*2^-2 + 1*2^-3 + 0*2^-4 + 0*2^-5 + 1*2^-6 直到最后

关于assembly - 您如何翻译 8087 协处理器返回的短实数的小数部分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40668944/

10-11 15:19