2021-7-26 汇编语言 寄存器(内存访问)补充(炉边小坐)关键词:栈顶超界,push pop指令,栈顶

最近炉边小坐的篇幅真是越来越巨大,这个栏目的本意是写一些 1K 左右的小短文,没想到后来越来越长,为此我在改进写作方法,力求压缩篇幅,浓缩精华,欢迎各位指正。现在尝试加入关键词和目录制度,看是否能增强可读性。

目录

栈顶超界问题


栈顶超界问题

8086CPU 用 SS:SP 指示栈顶位置,并提供 push 与 pop 指令实现入、出栈。同时,我们也知道栈空间是有限的,例如我将 10000H~1000FH 这一段空间作为栈使用,则栈区的空间为8 个字型数据(即 16 个 byte),我们如何知道栈顶会不会超出栈空间?毕竟 SS:SP 并无此项显示,它只告诉你栈顶的地址!允许我用原书的图片来展示:

上图描述了两个指令导致的栈顶超出栈空间的情况。

可见,在栈空间溢出后,ax 中的数据溢出至 1000EH 单元处,将原数据覆盖。(图 3.13) 

pop 指令导致栈顶超限同理(图 3.14)当栈满的时候 再使用push指令入栈,或栈空的时候再使用pop指令出栈,都将发生栈顶超界问题。栈顶超界十分危险,栈空间之外的空间里很可能存放了具有其他用途的数据、代码等,一旦这些数据被覆写,有可能发生意料之外的后果。而且,溢出栈区的可能是正在程序中处理的重要数据,如果溢出栈区,可能导致数据损坏、泄露等。

8080 是一款活在当下的处理器。不保证我们对栈的操作不会超界。这也就是说,8086CPU只知道栈顶在何处(由SS:SP指示),而不知道我们安排的栈空间有多大。从这两点上我们可以看出8086CPU的工作机理,它只考虑当前的情况:当前的栈顶在何处、当前要执行的指令是哪一条。既然 8086 老爷子有这种臭脾气,那只能由编程者的

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值