关于堆栈操作指令的一点疑惑

iamroc 2004-11-09 08:36:28
书上是这样描述PUSH指令的:
进栈指令PUSH先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部。
PUSH r16/m16/seg; sp <- sp-2,SS:[SP] <- r16/m16/reg

为什么先减2呢?如果连续进栈的话,SP减2后就会回到老位置,所有数据不是都会覆盖到一起了吗。。
...全文
94 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamroc 2004-11-09
  • 打赏
  • 举报
回复
哦,那就很清楚了,谢谢各位
flyingcar 2004-11-09
  • 打赏
  • 举报
回复
stack分为递增和递减速两类
进栈时,8086的stack是指针往下减的,51是递增
iamroc 2004-11-09
  • 打赏
  • 举报
回复
按flyingcar(mhc) 的说法,栈顶是低地址,栈底是高地址喽?
iamroc 2004-11-09
  • 打赏
  • 举报
回复
??不明白
栈底应该是低地址,栈顶应该是高地址,我想象中的进栈操作应该是先进栈,然后SP+2;出栈是先减2,然后出栈
不应该是这样吗?
Areslee 2004-11-09
  • 打赏
  • 举报
回复
不论先减后减,都无论避免这个问题
flyingcar 2004-11-09
  • 打赏
  • 举报
回复
1,sp用于指示出stack顶部在RAM中的位置;
2,sp的初始值一般时最大值(如果stack是递减的话),所以减2后不会回到老位置的.

例如: RAM的大小的256byte.程序初始化时通常给sp赋值0xff

21,459

社区成员

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

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