2011-08-04 6 views
6

私は、次の多くを参照してください、私の逆アセンブルコードを見て:メソッド呼び出し前のlea命令とは何ですか?

00B442E9 push  4 
00B442EB push  3 
00B442ED lea   ecx,[ebp-24h] 
00B442F0 call  Foo::Bar (0B41127h) 

私は、コールの前にパラメータをプッシュ理解が、leaはここで何をやっていますか?

答えて

11

のちょうど最適化された形だと思います。このlea命令は、メンバー関数を呼び出す前にecxレジスタにthisポインタをコピーします。

あなたはそれだけでだけでなく、スタックにプッシュされていない理由があるスタックオーバーフローの質問"What's the purpose of the LEA instruction?"

+0

lea命令についてのすべてを読むことができますか? –

+1

私は分かりません。 g ++ 'thiscall'は最後の引数の後に' this'をスタックにプッシュします。私が推測しなければならないことは、おそらく誰かがパフォーマンス分析を行い、「この」を先制して登録することで、一般的な使用事例でより良いパフォーマンスが得られると判断したのです。 –

2

は、私はそれは、thisポインタがecxレジスタに渡されたx86用のVisual C++で使用されるthiscall呼び出し規約で

mov ecx, ebp 
sub ecx, 24h 
関連する問題