jj3207401 2020-09-08 14:11 采纳率: 0%
浏览 262

汇编语言中怎么理解sp=0时到底是空栈还是满栈呢

10000H到1ffffH一段栈空间,ss=1000H sp=0,ss:sp指向10000H,明明是满栈,
而王爽汇编语言一书里解释的是当栈种只有一个元素时ss:sp=1000H:fffeH,出栈后sp+2=0,即ss:sp=1000H:0,实在是想不通,求大神指导

  • 写回答

1条回答 默认 最新

  • zlz123ok 2020-09-08 15:05
    关注

    因为sp=0时,如果进行压栈,sp会因为减2而变成0fffeh,sp指向了栈段段高端地址,如果不进行压栈,而是出栈,则sp会因为加2变成了2,sp往高端地址移动。假设cpu一直出栈不压栈,sp就会从低地址往高地址移动,最终会出现,sp=0fffeh的情况,此时,再出栈一次,sp就会又变成了0(0fffeh+2h=0),同理,如果cpu一直压栈不出栈,sp就会从0fffeh处不停的往低端地址移动,最终会出现 sp=2的情况,如果此时再出栈1次,则sp=0,再出栈1次,sp又会变成0fffeh。也就是说,当sp越过栈段的边界时,会回绕到栈段的另一端。所以sp=0既是满栈,也是空栈,到底是空栈还是满栈,不取决于cpu,而是取决于使用它的人,取决于你程序的实际情况。

    评论

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?