CPU提供的栈机制:

push 寄存器/段寄存器/内存单元:将寄存器/段寄存器/内存单元中的数据压入栈中
pop 寄存器/段寄存器/内存单元:从栈顶取出的数据送入寄存器/段寄存器/内存单元中

push和pop实质上是一种内存传送指令。

8086CPU的push和pop都是以字为单位进行。

栈顶的段地址存放在SS中,偏移地址存放在SP中。

SS:SP指向栈中的第一个元素。

注:栈顶在上面,低位在上面。在8086CPU中,入栈时,栈顶从高地址向低地址方向发展。
栈为空时,SS:SP指向栈空间最高地址单元的下个单元。不能直接向段寄存器SS中送入数据。
出栈pop,其实只是将SP=SP+2移动,并未将数据清除掉。

8086CPU不保证对栈操作不会越界。

image.png

数据段地址:DS(DS:IP)
代码段地址:CS(CS:IP)
栈段地址:SS(SS:SP)

一般只执行一条命令mov ss,ax时,mov sp,地址自动执行了。

Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。