栈的概念

栈的概念的前言

栈是一段连续的内存单元,也就是一段连续的内存地址

非常专业的名字

特殊在访问形式上         这是和mov移动指令  区别最大的地方

mov ax,1000H

mov ds,ax

mov ax,[0]

mov ax,[2]

栈的概念——实际例子角度

1、栈顶标记     标记了 箱子中最上面这本书的 在箱子中的位置

2、栈                箱子

3、入栈            将书本放到箱子中最上面的书的位置的上面

4、出栈            将箱子中最上面的位置的书拿走

5、结论             由于不断的入栈或者出栈,我们需要不断的修改栈顶标记 来确定箱子中最上面的书的 在箱子中的位置

栈的概念——内存的角度

入栈           push    将16位寄存器 或者 内存中的字型数据——》放到栈顶标记的上面         不断地修改栈顶标记

出栈           pop    将栈顶标记所标识的字型数据——》放到16位寄存器或者内存中              不断地修改栈顶标记

栈顶标记在入栈和出栈时所扮演的角色去理解这个问题

入栈时:栈顶标记决定了你放的书(数据)的存放的位置(内存地址)——》栈顶标记的上面(内存地址)          修改栈顶标记(内存地址)

出栈时:栈顶标记决定了你拿走书(数据)的位置(内存地址)——》修改栈顶标记(内存地址)

来确定箱子中最上面的书(数据)的 在箱子中的位置   (通过内存地址)

 得出结论:  栈顶标记是内存地址(段地址和偏移地址来表示)

在8086CPU中 在任意时刻将段地址寄存器SS和偏移地址寄存器SP所组合出来的内存地址当作栈顶标记!

push  ax    修改sp寄存器中的数值  sp=sp-2   (sp是以字为单位存储,加2减2,减2指针就向上移动了)

     将ax中字型数据 存放到ss:sp所组合出来的内存地址中      入栈(将ax中的内容送人SS:SP指向的内存单元处,SS:SP此时指向新栈顶)

pop  bx   将SS,SP所组合出来的内存地址中的字型数据直接存放到bx

                修改栈顶标记(将sp=sp+2,加2指针向下移动)  成为新的栈顶标记       出栈(SP = SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。)

段寄存器SS:存放栈顶的段地址

寄存器SP:存放栈顶的偏移地址

将一本一本的书看作是数据

数据从哪里来        寄存器中         内存中

数据的长度          字节型数据(X)      字型数据(

 

原文地址:https://www.cnblogs.com/hsp1269/p/13778086.html