我正在努力处理一些 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 教程,或者分享她/他的经验和智慧:)总结要点:
以防万一:最后我希望使用
FSINCOS
和其他花哨的 FPU 指令,但看到即使是简单的加法也会失败......提前谢谢大家!
最佳答案
好吧,最后结果证明我的问题与事实有关,FPU 寄存器被组织成一个堆栈,我没有足够注意它导致垃圾和不需要的剩余物。从“标准”版本切换到“流行”版本的说明很有帮助!
无论如何 - 感谢所有愿意阅读的人,非常感谢! :)
如果有人感兴趣 - 我正在做一个类作业,我必须在 assembly 中从另一个(地心模型)的角度计算一个行星的运动。 The final result translated to processing can be viewed here.
关于assembly - 如何在 x86-64 汇编中使用浮点数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10874796/