1. 内存栈:
先入后出,LIFO(LAST IN FIRST OUT)
入栈:将一个新的元素放到栈顶
出栈:从栈顶取出一个元素
栈顶元素总是最后一个入栈,需要时出栈.
2.CPU栈机制
8086CPU提供相关指令以栈方式来访问内存空间.相当于将一段内存当做栈来使用
8086CPU提供的入栈指令为:PUSH ,出栈指令为:POP
CPU出入栈示例
PUSH AX 将AX寄存器中的数据送入栈中
POP AX 从栈顶取出数据送入AX寄存器
注: 8086CPU出入栈都是以字(16位)类型为单位的
CPU出入栈顺序:
出入栈关系图
与栈相关的寄存SS,SP
SS用于存放栈顶的段地址,SP用于存放偏移地址.(有点类似于DS:IP)
SS:SP指向栈顶元素,PUSH和POP指令执行时,CPU通过SS和SP得到栈顶地址.
栈指针与内存空间关系
出栈时SP指向位置变化
栈顶超界--->栈空间超出,导致栈空间外的数据会覆盖,如下图 1000E ,1000F原来的数据会被覆盖
入栈超界
出栈超界
栈满时使用PUSH再入栈会导致栈顶超界,空栈时使用POP出栈也会导致栈顶超界.
入栈时要先判断栈是否已满,出栈时要先判断栈是否为空!
恢复入栈数据,需要倒序出栈
出入栈数据交换