我可以通过添加sp等来恢复堆栈

时间:2013-09-04 09:46:11

标签: c assembly stack

在我的程序中,我在堆栈上推送一些值

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
   }

2 个答案:

答案 0 :(得分:0)

如果算法运算正确,那将会有效。我常见的错误是关于这些事情。

您可能还需要查看enterleave说明,以执行类似操作。

答案 1 :(得分:0)

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