【问题标题】:Can I restore stack with add sp etc我可以使用添加 sp 等恢复堆栈吗
【发布时间】:2013-09-07 18:20:19
【问题描述】:

在我的程序中,我将一些值压入堆栈

for (i=0;i<i2;i++)
    { 
    _asm
       {  
       mov eax,i   // i here is an (int)
       push eax 
       }
    }       

然后当我完成后,我会像这样恢复堆栈:

for (i=0;i<i2;i++)
    { 
    _asm
       {  
       pop eax  // eax in not used later
       }
    }       

工作正常,但可能会浪费周期。 像这样恢复堆栈可以吗:

i=i2*sizeof(int);
_asm
   {  
   add sp,i
   }

【问题讨论】:

    标签: c assembly stack


    【解决方案1】:

    只要算术正确完成,这将起作用。我通常的错误是在这些事情上不一而足。

    您还可以查看 enterleave 指令来执行类似操作。

    【讨论】:

      【解决方案2】:

      不完全确定它是否有效,但看起来最后一个可以只用LEA ESP, [ESP+4*EAX] 完成。保存一个额外的乘法,并保持您的条件标志不变。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-12
        • 2012-10-29
        • 2010-09-17
        • 1970-01-01
        • 2022-01-09
        • 1970-01-01
        • 2019-05-09
        相关资源
        最近更新 更多