1
main proc
 finit
 .while ang < 91
    invoke func, ang
    fstp res
    print real8$(ang), 13, 10
    print real8$(res), 13, 10
    fld ang
    fld1
    fadd
    fstp ang
 .endw
 ret
main endp

この MASM コードの何が問題になっていますか?

でエラーが発生し.endwます。私はそれを確認するためにいくつかのテストを実行しました。アセンブラーが教えてくれinvalid instruction operandsます。

お時間をいただきありがとうございます!

4

1 に答える 1

1

masm は「型付き」のアセンブリ言語であることを思い出してください。そして、angは実数として定義されているようです。

問題は、".while" が cmp 命令を生成し、その後に条件付きジャンプが続くことです。また、cmp 命令は、reg またはメモリから何らかの整数値を取得しますが、実数ではありません。したがって、「無効な命令オペランド」エラー。

これが .endw で発生する理由は、おそらく .while / .endw コンストラクトがループの最初ではなく最後にテストを生成するためです。

于 2010-06-10T06:44:20.443 に答える