push eax 与 sub esp,4的区别

ioriliao1 2010-06-19 08:42:59
push eax 后esp指针向低地址方向移动4个字节?
sub esp,4 后esp也是向低地址方向移动4个字节?
pop eax 后esp向低高址方向移动4个字节?

为什么我常常见到程序有有如下代码
push ebp
moev ebp,esp
push eax
push edx
push ecx

sub esp,8 ;如果ebp的值是1020;那么现在esp的值是不是等于1020-(eax+edx+ecx+8)=1020-(4+4+4+8)=1000?

pop ecx ;那么执行以下四行后是不是等于 esp+(ecx+edx+eax+ebp)=1000+4+4+4+4=1000+16=1016?
pop edx
pop eax
pop ebp

觉得有些乱,请前辈们指点迷津!谢谢!
...全文
1456 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

sub esp,8  为什么是8 ?

renxu350 2010-06-19
  • 打赏
  • 举报
回复
而 POP EAX 等同于:

MOV EAX, [ESP]
ADD ESP, 4H
renxu350 2010-06-19
  • 打赏
  • 举报
回复
楼主说的不错,
PUSH EAX 这一句指令等同于下面的两句指令:
SUB ESP, 4H
MOV [ESP], EAX
flowerjack 2010-06-19
  • 打赏
  • 举报
回复
围观
pandazhong 2010-06-19
  • 打赏
  • 举报
回复
sub esp,8 ;如果ebp的值是1020;那么现在esp的值是不是等于1020-(eax+edx+ecx+8)=1020-(4+4+4+8)=1000
一般是因为你在这里声明了局部变量,这4个字节是局部变量所占用的空间。
dragonzht 2010-06-19
  • 打赏
  • 举报
回复
找书看看C语言调用函数时的堆栈结构吧

21,497

社区成员

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

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