栈是一种具有特殊访问方式的储蓄空间,他的特殊性在于在后一个进栈的最先出栈。
栈有两个基本元素,一个是入栈一个是出栈
入栈:将一个新元素放入栈顶
出栈:从栈顶取出一个元素
出栈和入栈的指令:PUSH(入栈)POP(出栈)
PUSH ax:将寄存器ax中的数据送入栈;
POP ax:从栈顶取出数据送入ax。
注意:字型数据是用两个单元存放的,高地址单元放高8位,低地址单元放低8位。
CPU如何指导当前要执行的指令所在的位置?
答:寄存器CS和IP中存放着当前指令的段地址和偏移地址。
8086CPU中,有两个寄存器:
段寄存器SS 存放栈顶的段地址
寄存器SP 存放栈顶的偏移地址
任意时刻,SS:SP指向栈顶元素。
执行push ax CPU会怎么操作
(1)SP=SP-2
(2)将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶。
执行POP ax CPU会怎么操作
(1)将SS:SP指向的内存单元处的数据送入ax中;
(2)SP=SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面为新的栈顶。
当栈是空得时候偏移指针是指向栈的最高地址的下一个地址。
栈与内存
栈空间当然是内存的一部,它只是一段可以以一种特殊的方式进行访问的内存。
phsh 和 pop 指令的格式
push 寄存器:将一个寄存器中的数据入栈
pop寄存器:出栈,用一个寄存器接受栈的数据
执行push时:先改变SP,后向SS:SP传送
执行pop时:先读取SS:SP数据,后改变SP