栈是一段连续的内存空间,这个空间的特殊性在于,最后进入这个空间的数据,最先出去

原理

通过ss sp 两个寄存器确定了一个栈顶指针,然后随着一些操作,这个指针会向上向下移动
例如 push ax,这条指令会将ax中的内容运到栈中,然后sp-2。注意,栈顶地址为低地址,栈底地址为高地址,因此增加元素会使sp值减小

在栈为空的时候,偏移地址为栈底地址加2,例如栈底为000F,则此时偏移地址为10,在拉一个元素进栈后,偏移地址为000E,恰好是数据最高位(一个数据一个字,两个字节,栈底为000F,用了两个空间,因此此时元素到了000E,恰好sp也是000E

超界问题

8086cpu并没有特定的机制来检查我们是否超界,只能够靠自己小心,超界是一个十分严重的问题,因为既然这一段被分配为栈了,说明其他的内存有其他的用途,如果超界,可能会干扰其他程序的运行。要注意,栈的范围最大是0到ffff即2的16次方字节

push pop 命令

push 寄存器 pop 寄存器
也可以是push内存地址,pop内存地址