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

栈   箱子

箱子画在哪里是我决定的

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

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

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

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

 

posted @ 2020-10-10 10:31  Arthur_hsp  阅读(400)  评论(0编辑  收藏  举报