我正在处理一些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 64位
- 处理器:Intel i5 - 2430M 64位(检查了两次:D)
- 问题:FPU无法添加两个数字:(
FSINCOS
和其他花式FPU指令,但是即使简单的加法都失败了...先感谢大家!