[010][汇编语言]栈 栈顶SS:IP 出栈pop 入栈push

栈 Stack

8086 CPU

  • 用一段 内存单元 来当做栈使用

出栈、入栈指令

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

出栈、入栈使用内存单元

  • 出栈、入栈以为单位进行
  • 1个 占用2个内存单元,是16位
  • 内存单元高地址放高8位(ah)的数据,低地址放低8位(al)的数据

SS:SP 始终指向栈顶元素

  • SS 寄存器:栈顶的段地址
  • SP 寄存器:栈顶的偏移地址

出栈、入栈的寄存器IP变化

  • 出栈:SP=SP+2SS:SP 指向更的内存地址
  • 入栈:SP=SP-2SS:SP 指向更的内存地址

栈为空

  • SS:SP 指向栈的最底部单元下面的单元
用10000H~1000FH 表示栈
栈空时,SS:SP 指向 1000FH 的下一个内存单元 10010H

POP操作后内存单元的数据不会消失

  • 在内存中的数据还在内存之中,只是不在里面了

CS:IP 与 SS:SP

  • CS:IP 指向当前要执行的指令在何处(但是不知道有多少条要执行的指令)
  • SS:SP 指向栈顶元素在何处(但是不知道栈的空间有多大,以及哪里是上界、哪里是下界)

问题3.10

问题3.10 题目要求

问题3.10

寄存器传递数据到内存单元

  • 10000H 处写入字型数据2266H ,就是说执行完push之后,SS:SP要指向的地址就是10000H
  • SS 是段地址寄存器,不能直接输入数据
题目给的代码 :
mov ax,1000H
mov ds,ax
mov ax,2266H
mov [0],ax


答案要求的等价代码 : 
mov ax,1000H
mov ss,ax
mov sp,0002H
mov ax,2266H
push ax
  • 代码执行后的内存结果


    push代码执行前后 SS:SP的变化

PUSH 过程发生了什么?

  • 1、执行push ax之前,SS:SP指向10002H(可以通过代码设置SS=1000H,SP=0002H);
  • 2、接着,CPU 先将SP=SP-2,使得SS:SP指向10000H
  • 3、最后,将寄存器ax中的数据送入SS:SP指向的内存单元,即10000H处。

MOV 与PUSH、POP的区别

  • mov 指令,只是传送;

  • push 指令,CPU 两步走
    ⑴先改变SP(SP=SP-2)
    ⑵后向SS:SP处传送;

  • pop 指令,CPU 两步走
    ⑴先读取 SS:SP 处的数据,
    ⑵后改变SP(SP=SP+2)

PUSH POP 用于 内存单元 与 内存单元 之间传递数据

  • 默认SS:SP指向一个栈顶地址 ;
  • 设置段地址寄存器DS=1000H
  • 入栈,将内存单元1000:0H处的压入栈;
  • 出栈,将栈顶元素送入1000:0002H内存单元;
mov ax,1000H
mov ds,ax
push [0]    
pop [2]    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,424评论 8 114
  • 一、栈 栈: 是一种具有特殊的访问方式的存储空间(后进先出,Last in Out First) 8086 会将C...
    Rui哥阅读 2,224评论 0 1
  • 一篇前言 这是一系列的汇编语言学习的读书笔记,以及一些自己的理解系列文章。我想我会在循序渐进的学习中,写下对汇编的...
    华落阅读 5,284评论 1 1
  • 王爽汇编全书知识点大纲 第一章 基础知识 机器语言 汇编语言的产生 汇编语言的组成 存储器 cpu对存储器的读写 ...
    2c3ba901516f阅读 2,455评论 0 1
  • 2017年的最后一天,大家都在忙碌着,逛街的,带着孩子购物的,大人小孩都在忙着置办过年的行头人人脸上都洋溢...
    高誉恒阅读 179评论 0 0