我正在为一些 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
,它工作正常。我已经翻阅了大量的材料,但也许这里有人可以指点我体面的 FPU 教程,或者分享她/他的经验和智慧:)
总结要点:
- 语言:x86-64 汇编器
- 汇编程序:从存储库安装的 nasm v. 2.09.04
- 编译器(用于 C):gcc v. 4.5.2(随 Ubuntu 安装)
- 操作系统:Oracle VM 上的 Ubuntu 11.04 64 位
- 主机操作系统:Windows 7 SP1 64bit
- 处理器:Intel i5 - 2430M 64bit(检查两次:D)
- 问题:FPU 不能添加两个数字 :(
以防万一:最后我希望使用FSINCOS
和其他花哨的 FPU 指令,但看到即使简单的添加也失败了......
提前谢谢大家!