指令SS和SP只记录了栈顶发地址,依靠SS和SP可以保证在入栈和出栈时找到栈顶。可是如何保证在入栈、出栈时栈顶不会超出空间?。
    当栈满时再使用push指令入栈,栈空时再使用pop指令出栈都将发生栈顶超界问题。
    栈顶超界很危险:
    我们既然将一段空间安排为栈,那么在栈空间之外的空间里很可能存放了具有其他用途的数据、代码等,这些数据、代码可能是我们自己的程序中的,也可能是别的程序中的(溢出攻击)。毕竟一个计算机系统并不是只有我们自己的程序再运行。栈的隔壁可能是系统或一些私密信息。

    我们当然希望CPU可以帮我们解决该问题,比如在CPU中有记录栈顶上限和下限的寄存器,我们可以通过填写这些寄存器来指定栈空间的范围,然后CPU在执行push指令的时候靠检测栈顶上限寄存器,在执行pop指令的时候靠检测栈顶下限寄存器来保证不会越界。
    然而实际情况:8086CPU中并没有这样的处理器。8086CPU不保证对栈的操作不会越界。即8086CPU只知道栈顶在何处(由SS:SP指示),而不知道读者安排的栈空间有多大。就好像CPU只知道当前要执行的指令在何处而不知道读者要执行的指令有多少。
    从这两点我们可以看出8086的工作机理,只考虑当前的情况:
    当前栈顶在何处;
    当前要执行的指令是哪一条。

    push和pop指令是可以在寄存器和内存之间传送数据,栈空间当然也是内存空间的一部分,它只是一段可以以一
    种特殊的方式进行访问的内存空间。