2011-08-04 54 views
6

在看着我的反彙編代碼我看到很多下面的:在調用方法之前,什麼是lea指令?

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

我明白了呼叫前推參數,但有什麼lea在這裏做什麼?

回答

11

在針對x86使用的Visual C++的thiscall調用約定優化形式,將this指針在ecx寄存器傳遞。在調用成員函數之前,此指令將this指針複製到ecx寄存器中。

你可以閱讀所有關於堆棧溢出的問題"What's the purpose of the LEA instruction?"

+0

lea指令是有它不僅僅是壓入堆棧,以及一個原因嗎? –

+1

我不知道。 g ++'thiscall'只是在最後一個參數後面將'this'推入堆棧。如果我不得不猜測,有人可能做了一次性能分析,並決定搶先註冊「這個」在常見用例中取得了更好的性能。 –

2

我認爲這只是一個的

mov ecx, ebp 
sub ecx, 24h 
相關問題