首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >x87 FPU中单精度浮标的简单添加

x87 FPU中单精度浮标的简单添加
EN

Stack Overflow用户
提问于 2013-11-29 14:25:26
回答 1查看 346关注 0票数 0

我正在编写一个小型汇编程序,它使用两个单精度浮点数,将它们相加并显示结果。但是,我希望将结果保存在寄存器中供以后使用。为了帮助我开始工作,我已经将一个c++程序编译成一个汇编程序,并试图对其进行编辑。然而,我不明白我得到的结果如下:

代码语言:javascript
复制
    movl    $0x49742408, %eax
    movl    %eax, 20(%esp)
    movl    $0x49f42405, %eax
    movl    %eax, 24(%esp)
    flds    20(%esp)
    fadds   24(%esp)
    fstps   28(%esp)
    flds    28(%esp)
    fstpl   4(%esp)
    movl    $.LC2, (%esp)
    call    printf
    movl    $0, %eax

首先,对于浮点数,s表示32位,l表示64位,这是正确的吗?第二,为什么它将32位浮点值弹出到28(%esp)中,而只将其存储回数据寄存器堆栈中?删除这两条线会导致不太精确的结果,这是奇怪的。最后,它再次弹出数据寄存器堆栈,但这次是64位值.我想要一个32位的精度值。但是,将l更改为s会使我得到0。有人知道到底发生了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-29 14:49:03

  1. 是的,s是32位(float),l是64位(double)。
  2. 当然,您不能只删除它,然后必须使用fstpl 4(%esp)。我假设您正在查看未优化的代码。
  3. printf按照C调用约定要求参数,因此varargs自动提升到double
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20287914

复制
相关文章

相似问题

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