方法调用之前的lea指令是什么?

时间:2011-08-04 02:18:33

标签: c++ visual-c++ assembly

在查看我的反汇编代码时,我看到了很多以下内容:

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

我理解在调用之前推送参数,但lea在这做什么?

2 个答案:

答案 0 :(得分:12)

在Visual C ++ for x86使用的thiscall调用约定中,this指针在ecx寄存器中传递。在调用成员函数之前,此lea指令将this指针复制到ecx寄存器中。

您可以在Stack Overflow问题"What's the purpose of the LEA instruction?"

中阅读有关lea指令的所有内容

答案 1 :(得分:2)

我认为这只是

的优化形式
mov ecx, ebp
sub ecx, 24h