【第三章】寄存器(内存访问)(2)

3.7 CPU提供的栈机制

现代的CPU中都有栈机制,8086CPU提供入栈和出栈指令,最基本的两个是PUSH(入栈)和POP(出栈)。

如push ax表示将寄存器ax中的数据送入栈中,pop ax表示从栈顶取出数据送入ax

CPU如何知道栈顶位置?

8086CPU中,有两个寄存器,段寄存器SS(Stack Segment)和寄存器SP(Stack Pointer)。栈顶的段地址存放在SS中,偏移地址存放在SP中。任意时刻,SS:SP都指向栈顶元素

push ax的执行,由以下两步完成:

  1. SP=SP-2,SS:SP指向当前栈顶前面的单元,以当前栈顶前面的单元为新的栈顶
  2. 将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶

1.PNG

思考:如果将10000H~1000FH这段空间当作栈,初始状态栈是空的,若此时SS=1000H,SP应该等于多少?

1.PNG

pop的执行过程:

  1. 将SS:SP指向的内存单元的数据送入ax中
  2. SP=SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶

1.PNG

注意:原栈顶元素1000CH中的元素不会被删除,因为这样是很耗费时间的。当下一次再入栈数据时,其自然的就会被覆盖