首页 > 其他 > 详细

栈的设置+栈的越界问题+栈的极限大小

时间:2020-10-10 12:17:46      阅读:25      评论:0      收藏:0      [点我收藏+]

栈   箱子

箱子画在哪里是我决定的

箱子的容量大小也是我决定的

我们可以决定栈顶标记在哪里

栈在哪里(箱子在哪里) 栈的大小(箱子的大小)

SP=10H

16byte=8个字型数据   push可以操作8次

 

栈是如何设置的:

(建议设置成16的倍数)自己的一个约定 防止一些稀奇古怪的问题

起始地址+你说设定栈的大小的字节数(假设把第一排16个字节设置为栈的大小)

0000      +  16(10H)                       =10H     SS,SP所组合出的栈顶标记

栈的越界问题:

栈顶超界是危险的: 因为我们既然将一段空间安排为栈 ,那么在栈空间之外的空间里很可能存放了具有其他用途的数据、代码等,

这些数据、代码可能是我们自己的程序中的,也可能是别的程序中的。(毕竟一个计算机系统并不是只有我们自己的程序在运行)

但是由于我们在入栈出栈时的不小心,而将这些数据、代码意外地改写,将会引发一连串的错误。 我们当然希望CPU 可以帮我们解决这个问题,

比如说在CPU中有记录栈顶上限和下限的寄存器,我们可以通过填写这些寄存器来指定栈空间的范围 ,

然后 ,CPU 在执行push指令的时候靠检测栈顶上限寄存器,在执行pop 指令的时候靠检测栈顶下限寄存器保证不会超界。

实际情况:8086CPU中并没有这样的寄存器。

栈的极限大小

一个栈 最大的空间能设置为多少?

SP寄存器的变化范围   0~FFFFH    32768个字型数据

SS=2000H     SP=0

就是设置了一个可以存放32768个字型数据的箱子

SP又等于0了  再入栈    覆盖了原来栈中的内容

64KB

 

栈的设置+栈的越界问题+栈的极限大小

原文:https://www.cnblogs.com/hsp1269/p/13790634.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!