7

.net では、メソッドの最後の命令として存在できる可能性のある OpCode は何ですか。

現時点では、それが可能であることを知っています

しかし、それが他のオペコードである可能性はありますか? もしそうなら、どのコード(C#を好む)がそれらを生成しますか?

「最後」とは、「メソッド本体で定義された最終的な OpCode」を意味します

4

1 に答える 1

3

throwメソッドの最後のオペコードになる可能性がある場合、それもjmp資格がある可能性があります。

また、終了条件が最後にない再帰メソッドを考えると、最後のオペコードはではなくorになる可能性があります。calltail.callret

更新:いいえ、そうではありません。Marc Gravell が彼のコメントで正しく指摘しているように、ドキュメントにtail.callは次のように書かれています。

次の呼び出しによって転送される引数を除いて、スタックは空でなければなりません。call 命令に続く命令はret.

更新 2:無条件分岐オペコードは、メソッドの終了点が以前に発生した場合、メソッドの最後の命令である可能性もbrありbr.sます (Marc に感謝します)。

于 2012-07-28T05:09:53.660 に答える