定义
栈是一种具有特殊的访问方式的存储空间。它的特殊性在于最后进入这个空间的数据,最先出去,遵循LIFO(后进先出)。
CPU提供的栈机制
CPU[1]提供相关的指令来以栈的方式访问内存空间,这就意味着在编程的时候,可以将一段内存当作栈来使用。
8086CPU提供入栈[2]和出栈[3]指令,最基本的就是PUSH(入栈)和POP(出栈)。8086CPU的入/出栈都是以字为单位进行的。这里举例说明
push ax : 表示将寄存器ax中的数据送入栈中
pop ax : 表示将栈顶的数据送入到寄存器ax中
那么,当执行push或pop的指令时,CPU是如何确定栈顶单元的呢?
其实是有相应的寄存器来存放栈顶的地址,在8086CPU中,利用段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在SP中。
任意时刻,SS:SP指向栈顶元素。
push和pop指令执行时,CPU从SS和SP中得到栈顶的地址。
栈顶超界问题
栈顶超界的情况:
1.栈满的时候,再使用push指令入栈。
2.栈空的时候,再使用pop指令出栈。
8086CPU不保证我们对栈的操作不会越界,8086CPU只知道栈顶在何处(由SS:SP指示),而不知道我们安排的栈空间有多大。
习题
1.如果将10000H~1000FH这段空间当作栈,初始状态栈是空的,此时,SS=1000H,SP=?
2.(1) 将10000H~1000FH这段空间当作栈,初始状态栈是空的;
(2) 将AX=001AH,BX=001BH;
(3) 将AX、BX中的数据入栈;
(4) 将AX、BX消零;
(5) 从栈中恢复AX、BX原来的内容。