首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >x87 FPU和整数算法?

x87 FPU和整数算法?
EN

Stack Overflow用户
提问于 2021-08-30 09:56:41
回答 1查看 92关注 0票数 0

我试图理解使用FPU进行64位整数运算。我写这个(ATT语法):

代码语言:javascript
复制
fildq   A
fildq   B
faddp
fistpq  C

C中的结果是A+ B +1。如果我以" finit“指令开头,它给出了正确的值A+B。我认为不想要的+ 1可能是因为它添加了进位,但使用gdb时,当我使用finit时,我发现FPU控制寄存器中一点也没有区别--在这两种情况下,控制寄存器以0x27F开头,标记寄存器为0xFFFF (=堆栈为空),而所有其他寄存器(包括状态寄存器,所有条件位所在的位置)为零。

在这里使用finit似乎有点钝,如果我不使用finit,我也想知道额外的+1是从哪里来的,因为在这两种情况下,所有FPU寄存器的值似乎是相同的。有人能帮我弄清楚这件事吗?

EN

回答 1

Stack Overflow用户

发布于 2022-01-20 20:24:44

…当我使用finit时,我发现FPU控制寄存器与不使用finit时没有任何区别--在这两种情况下,控制寄存器都以0x27F…开头。

您确定吗?finit应该加载0x37F,这是比0x27F多设置的一位。不同之处在于精确控制领域。默认值使用80位,而所观察到的值使用64位。

C中的结果是A+B+ 1.…在这里使用finit似乎有点钝,而且我也在想,如果我不使用它,额外的+1是从哪里来的,…

使用足够大的AB,您可能会看到fadd在精度上的损失。解除对精确异常的掩蔽将证实这一点。我认为您正在使用您最喜欢的编译器的内联程序集功能。如果您不想为琐碎的任务操心,这当然很方便,但是显然您的编译器的运行时系统会在启动时加载0x27F,以考虑兼容性问题。详细研究它的手册(可能还有源代码)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68982156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档