gpt4 book ai didi

assembly - 如何在 x86-64 汇编中使用 float ?

转载 作者:行者123 更新时间:2023-12-01 02:34:27 25 4
gpt4 key购买 nike

我正在努力处理一些 x86-64 程序集,浮点数让我头疼。例如,当我运行此代码时:

section .data
omega: dq 2.0
omega2: dq 3.0

section .text
global func

func: push rbp
mov rgp, rsp

FINIT

FLD qword [omega]
FLD qword [omega2]
FADD st0, st0

mov rsp, rbp
pop rbp
ret

这个函数是从这样的 C 代码中调用的: printf("%Lf \n", func() );不幸的是,结果是一些奇怪的数字...我尝试使用 FIADD 将两个整数相加,而且效果很好。我已经翻阅了大量 Material ,但也许这里有人可以为我指出体面的 FPU 教程,或者分享她/他的经验和智慧:)

总结要点:
  • 语言:x86-64 汇编器
  • 汇编程序:从存储库安装的 nasm v. 2.09.04
  • 编译器(用于 C):gcc v. 4.5.2(与 Ubuntu 一起安装)
  • 操作系统:Oracle VM 上的 Ubuntu 11.04 64 位
  • 主机操作系统:Windows 7 SP1 64 位
  • 处理器:Intel i5 - 2430M 64 位(检查两次:D)
  • 问题:FPU 不能将两个数字相加 :(

  • 以防万一:最后我希望使用 FSINCOS和其他花哨的 FPU 指令,但看到即使是简单的加法也失败了......

    提前谢谢大家!

    最佳答案

    好吧,最后结果证明我的问题与事实有关,FPU 寄存器被组织成一个堆栈,我没有足够注意它导致垃圾和不需要的剩余物。从“标准”版本切换到“流行”版本的说明很有帮助!

    无论如何 - 感谢所有愿意阅读的人,非常感谢! :)

    如果有人感兴趣 - 我正在做一个类作业,我必须在 assembly 中从另一个(地心模型)的角度计算一个行星的运动。 The final result translated to processing can be viewed here.

    关于assembly - 如何在 x86-64 汇编中使用 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10874796/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com