我可以通过 add sp 等恢复堆栈吗

标签 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
   }

最佳答案

只要算术正确就可以了。我通常的错误是在此类事情上表现不佳。

您还可以查看 enterleave执行类似操作的说明。

关于我可以通过 add sp 等恢复堆栈吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18610512/

相关文章:

c - POSIX 正则表达式表示法以 @ 开头和结尾,正则表达式表示法包含字母数字字符但必须包含 _

c - 使用虚拟地址读取Proc/[pid]/mem

c++ - 如何显示我的队列和堆栈?

assembly - x86_64 指令流水线 : Instruction execution order

c - 编写 MIPS 机器指令并从 C 执行它们

c - 为什么函数的参数被写入主堆栈帧而不是函数堆栈帧?

c++ - 使用 vector 类实现堆栈的链表与动态数组

根据 C 中的条件更改指针(星号 1.4 cdr 结构)

c - VERSION_TIMESTAMP 在哪里可以找到定义?

c++ - 全局指针变量如何存储在内存中?