- ベストアンサー
__asm mov eax,100とは?
他人のC言語ソースコードの中に #define BugFix __asm mov eax,100 というマクロがありました。 主に以下のように関数の終わりのほうに記述されているのですがどんな意味があるのか教えてください。 void func() { /*何か処理*/ BugFix } よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
c/c++では、インラインでアセンブラ言語の記述もできます。 これはそのインラインアセンブラの記述です。 インラインでアセンブラ言語を記述するためには、アセンブラ言語そのものの意味に加えて、 アセンブラが呼び出された時に、渡されるレジスタの内容や、c/c++上の変数の参照の方法、 変更していいレジスタ、いけないレジスタ等、 いくつかのルールがあり、知っておく必要があります。 その中で、関数の戻り値は、eaxレジスタの内容が使われる、というルールがあります。 ご質問の __asm mov eax,100 は、eaxレジスタを100にセットしているので、 このまま関数から抜けると、func() は 100 という戻り値を返したことになります。 推測ですが、func() は void で定義されているので、return で値を返すことはできないし、 間違って、呼び出し元が func() からの戻り値を参照しても、不定になってしまいます。 本来であれば、int func() に変更して return 100 とするとか、 呼び出し元で viod func() とに変更するのが正しい修正なのですが、 なるべく大きな修正にならないように、強制的に戻り値を 100 に固定する目的で、 このようなマクロを挿入しているように思います。