私は、数学コプロセッサーを使用する必要がある混合 C/ASM で単純なアプリケーションを作成する任務を負っています。
指定されたポイントがシリンダー内にある場合に 1 を返すシリンダー (float x、float y、float z) 関数があります (シリンダーの底は x=0、y=0、半径 = 5、高さ = 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 (pop バリアントの FCOMP) はどのように機能するのかということです。何を何と比較しますか (st0 と st1 または st1 と st0 ?)、値が小さい/等しい/大きいかどうかはどこで確認できますか?
助けてくれてありがとう!