zoukankan      html  css  js  c++  java
  • 汇编语言 手记8

    栈有两个基本的操作:入栈和出栈

    入栈:将一个新的元素放到栈顶

    出栈:从栈顶取出一个元素

    栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。

    栈的操作规则:LIFO

    8086CPU提供相关的指令来以栈的方式访问内存空间。

    入栈出栈指令:

    PUSH(入栈)POP(出栈)

    push ax   将寄存器ax中的数据送入栈中;

    pop ax   从栈顶取出数据送入ax

    均是以为单位进行的。

    字型数据用两个单元存放,高地址单元放高8位,低地址单元放低8位。

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

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

    任意时刻,SS:SP指向栈顶元素

    push ax

    1 sp=sp-2

    2 将ax中的内容送入SS:SP指向的内存单元,SS:SP此时指向新栈顶。

    当栈是空时,它指针会指向当前栈的最高地址的下一地址。

    任意时刻,SS:SP指向栈顶元素,当栈为空的时候,栈中没有元素,也就不存在栈顶元素。

    所以SS:SP只能指向栈的最底部单元下面的单元,该单元的偏移地址为栈最底部的字单元的偏移地址+2

    栈最底部字单元的地址为1000:000E,所以栈空时,SP=0010H。

    8086CPU的互作机理,只考虑当前的情况:

    当前栈顶在何处

    当前要执行的指令是哪一条。

    将10000H-1000FH这段空间当作栈,初始状态是空的,将AX,BX,DS中的数据入栈

    抹空操作

    不用mov来实现写入操作

    mov ax,1000H
    
    mov ss,ax
    
    mov sp,2
    
    mov ax,2255H
    
    push ax

    push pop实质上就是一种内存传送指令,可以在寄存器和内存之间传送数据,与mov指令不同的是,push和pop指令访问的内存单元的地址不是在指令中给出的,而是由SS:SP指定的。

    push pop和mov不同的是,mov只需要一步传送;而push pop指令却需要两步操作。

    执行push时:先改变sp,后向ss:sp处传送

    执行pop时:现读取ss:sp数据,后改变sp.

    任何时刻ss:sp指向栈顶元素

    8086只记录栈顶,占空间的大小要自己管理

    如果内存从10000H-1FFFF,描述栈为空时:

    任意时刻,SS:SP指向栈顶元素,当栈为空的时候,栈中没有元素,也就不存在栈顶元素,所以SS:SP只能指向栈的最底部单元下面的单元,该单元的偏移地址为栈最底部的字单元的偏移地址+2,栈最底部字单元的地址为1000:FFFE,所以栈空时,SP=0000H

    CPU都是16为传送数据的,N<=64K.从栈操作指令所完成的功能的角度上来看,push pop等指令在执行的时候只修改SP.所以栈顶的变化范围是 0-FFFFH,从栈空时候的SP=0,一直压栈,直到栈满时SP=0;如果再次压栈,栈顶将环绕,覆盖了原来的内容。

  • 相关阅读:
    一道压强题
    考试习惯的审题+习题+电脑存放目录记录
    产品需求分类及KANO模型需求排序学习
    马斯洛需求层次理论及其新拓展学习笔记
    12-JQuery学习之bind绑定事件
    11-JQuery学习之ready预加载事件
    09-JQuery学习之删除元素
    10-JQuery学习之遍历元素
    08-JQuery学习之创建元素和添加元素
    06-JQuery学习之操作元素的样式
  • 原文地址:https://www.cnblogs.com/xing901022/p/2913671.html
Copyright © 2011-2022 走看看