• 栈的概念


    栈的概念的前言

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

    非常专业的名字

    特殊在访问形式上         这是和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)      字型数据(

     

  • 相关阅读:
    iOS-申请开发证书流程
    iOS-代理
    进程和线程
    iOS单例模式
    Switch语句
    枚举类型
    程序的三种结构
    运算符
    Swift项目开发中的一些必备数据
    Swift开发中常用的一些图片处理方法
  • 原文地址:https://www.cnblogs.com/hsp1269/p/13778086.html
Copyright © 2020-2023  润新知