是不是只有push了才能pop出正确的值

ioriliao1 2010-06-19 09:28:39
比如我对堆栈如下操作

sub esp,8 ;分别是变量 i=10;y=20

pop eax ;这里会不会是20
pop edx ;这里会不会是10

以及和下面的区别

push 10
push 20

pop eax
pop edx

请各位前辈指点。谢谢!
...全文
100 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
renxu350 2010-06-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 ioriliao1 的回复:]
比如我对堆栈如下操作

sub esp,8 ;分别是变量 i=10;y=20

pop eax ;这里会不会是20
pop edx ;这里会不会是10

以及和下面的区别

push 10
push 20

pop eax
pop edx

请各位前辈指点。谢谢!
[/Quote]

楼主很聪明,你说的100%完全正确,
你的第1种方法的代码与第2种方法的代码是相同的效果,
只要你确定你的变量或操作数已经入栈,并且已经传递到栈顶,
在不使用 PUSH 指令的情况下,直接操作 ESP 和 POP 指令,效果是一样的,
主要要注意的是掌握栈顶 ESP 的位置就可以了,,
masmaster 2010-06-19
  • 打赏
  • 举报
回复
push,pop用于临时保存和恢复参数变量, 如果对于子程序,则需要堆栈平衡的, 就是push喝pop要对应。
建议楼主动手实验一下找出它们的异同
太虚野老 2010-06-19
  • 打赏
  • 举报
回复
请各位前辈指点。谢谢!
Boover 2010-06-19
  • 打赏
  • 举报
回复
楼主说的是传参数吧,如果参数压到了堆栈里,是可以pop的

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧