【问题标题】:What is the lea instruction before a method call doing?方法调用之前的 le​​a 指令是什么?
【发布时间】:2011-08-04 02:18:33
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    您可以在 Stack Overflow 问题 "What's the purpose of the LEA instruction?" 中阅读有关 lea 指令的所有信息

    【讨论】:

    • 它不只是被推入堆栈有什么原因吗?
    • 我不知道。 g++ thiscall 只是在最后一个参数之后将 this 推入堆栈。如果我不得不猜测,可能有人做了性能分析,并认为抢先注册 this 在常见用例中会产生更好的性能。
    【解决方案2】:

    我认为这只是一种优化形式

    mov ecx, ebp
    sub ecx, 24h
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 2021-03-03
      • 2021-04-12
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多