一部の 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 と共にインストール)
- OS: Oracle VM 上の Ubuntu 11.04 64 ビット
- ホスト OS: Windows 7 SP1 64 ビット
- プロセッサー: Intel i5 - 2430M 64bit (2 回チェック:D )
- 問題: FPU が 2 つの数値を加算できません :(
念のため:最終的にはFSINCOS
他の派手なFPU命令を使用したいと思っていますが、単純な追加でさえ失敗するように見えます...
よろしくお願いします!