私は数学コプロセッサを使用しなければならない混合C/ASMで簡単なアプリケーションを書くことを任されてきました。x87 FPOP命令とFCOM命令 - どのように動作しますか?
与えられた点が円柱の中にあれば1を返す関数円柱(float x、float y、float z)があります(円柱はx = 0、y = 0、radius = 5、height = 10)、そうでない場合は0である。
だから、シンプルに見えます。 zが< 0,10>の範囲内にあるかどうかを確認してから、x^2 + y^2をチェックしてください。< 25.
x87についての知識はありません。
私が書いたことはすべてあります。
_cylinder PROC
push ebp
mov ebp, esp
sub esp,8 ; I can't use .data in the application, so I reserve some space on the stack for numbers 10 and 25
mov [esp],10
mov [esp+4],25
finit
fldz
fld [ebp+8]
;here i get stuck
add esp, 8
pop ebp
_cylinder ENDP
だから私は立ち往生した。したがって、私はアプリケーションでどのような指示を使用するかを見つけようとしています。そして、そこに私は立ち往生しています。なぜなら、私がネット上で見つけたチュートリアル/指導書リストはすべて書かれているので、何もほとんど理解できないからです。
問題は、数値演算コプロセッサから何かをポップするとどうなりますか?ポップされた値はどこで見つけることができますか?どのように80ビットの値から32ビットの値に変換するのですか(もちろんそうなら) もう1つの質問は、FCOM(ポップ・バリアントのためのFCOMP)はどのように機能するのですか?それはwhat(st0〜st1またはst1〜st0?)と何が比較され、その値がより小さいか等しいか大きいかをどこで確認できますか?
ありがとうございました!
を。これははるかに簡単です(スタックの代わりにレジスタを使用する)、利用できる関数が多く、一般的に高速です。 – duskwuff
duskwuffが言ったこと。 'x87'は事実上非難されており、新しいソフトウェアがそれをターゲットにする理由はほとんどありません。 –
@Stephen - CPU、ベンダーではなく、一部のOSで「廃止予定」となっています(ただし、まだサポートされています)。使用する理由:例えば、80ビットの拡張精度と超越的な数学関数。 – PhiS