首先需要说明的是栈属于满递减栈,即栈顶在高地址,栈底在低地址

push,指针向低处走。我向1000:0000处push数据,那么push之前,sp初-2=sp末。先sp-2,再写入

pop,指针向高处走。我要提取1000:0000处的数据。那么pop之前,sp=0002。先读取,后sp+2

也就是说 sp 始终指向了有效数据的位置。

一. 栈的执行过程下图:

该图注意如下:

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

SS:存放栈的段地址;
SP:存放栈的偏移地址;

2. 栈底的地址大.

3. 栈是空的是什么意思?

例如: 将10000H----1000FH这段空间当作栈, 初始状态栈是空的,  此时, SS=1000H, 那么SP= ?

a. 栈底地址大.

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

所以, 栈底地址就是SS:SP=1000FH 也就是SS=1000H, SP=0FH

栈底就是栈的第一个元素, 那空栈就是SS=1000H, SP=10H.

二. PUSH的执行过程

请记住:

1. SP先减2, SS:SP指向新的栈顶(SP是向小的方向走的)

2. 把数据送入新的栈顶.

三. POP的操作过程

POP的过程就是与PUSH相反了

1. 把栈顶数据(SS:SP指向的数据)送入寄存器

2.SP增加2.

四. 栈的越界问题需要我们自己小心注意, CPU并没有机制来通知或者避免栈的越界.

五. PUSH与POP

PUSH和POP指令可以在寄存器和内存之间传送数据, 格式如下

PUSH 寄存器

POP 寄存器

PUSH 内存单元

POP 内存单元

PUSH和POP指令实质是一种内存传送指令, 可以灵活运用.

8086汇编基础 push,pop指令执行时,sp怎么变相关推荐

  1. 【8086汇编基础】05--常用函数库文件--emu8086.inc

    8086汇编语言初学者教程(第5部分) 常用函数库 - emu8086.inc 通过引用一些常用函数,可以使你编程更加方便.在你的程序中使用其他文件中的函数的方法是INCLUDE后面接上你要引用的文件 ...

  2. Call far ptr指令执行时,依次压入堆栈内容

    该指令执行时,依次会向堆栈压入:标志寄存器,CS和IP 为什么要压入标志寄存器? call指令虽然不涉及标志寄存器.但是call指令的本质,它是一条跳转指令,目的是跳到子程序去执行,而子程序是可以改变 ...

  3. 8086汇编学习之DS寄存器、SS/SP寄存器

    相关博客:8086汇编基础知识.通用寄存器.CS/IP寄存器与Debug的使用 一.DS寄存器 一个8086CPU寄存器均是16位的,而数据类型有以下两种: 1Byte = 8bit (字节型数据) ...

  4. 汇编8086复习——基础知识、指令汇总、上机实验踩坑

    8086处理器基础知识 汇编语言是大小写不敏感的低级语言,意思就是mov和MOV是汇编语言来说是一样的,当然大小写混用也是可以的,如Mov 在8086汇编语言里,数字默认是十进制的,如果是其他进制数字 ...

  5. linux汇编push,在x86汇编中寄存器上使用的push / pop指令的功能是什么?

    在阅读有关汇编程序的文章时,我经常遇到人们在写文件时他们推送处理器的某个寄存器并稍后再次弹出它以恢复它之前的状态. 怎么能推一个寄存器? 它在哪里推? 为什么需要这个? 这可归结为单处理器指令还是更复 ...

  6. x86汇编-2(第五章)nasm汇编基础知识、指令、显存、bochs调试

    一. 汇编程序一般人为地分为代码段与数据段,不同的段的内存分配总是16字节的倍数,公式如下 设数据段或代码段为x字节,分配内存为:(x/16+x%16)*16字节 标号:标识当前位置的偏移地址,如果当 ...

  7. 8086汇编基础 debug mov al,'a'或者mov ax,'ab'错误的

        IDE : Masm for Windows 集成实验环境 2015       OS : Windows 10 x64 typesetting : Markdown        blog ...

  8. 8086汇编复习4 - int指令 - 使用emu8086

    int指令     中断信息可以来自CPU的内部和外部:int指令引发的中断是内中断: int n,n为中断类型码:     CPU执行int n指令,相当于引发一个n号中断的中断过程:执行过程如下: ...

  9. 8086汇编基础 mov word ptr 字数据赋值

        IDE : Masm for Windows 集成实验环境 2015       OS : Windows 10 x64 typesetting : Markdown        blog ...

最新文章

  1. python判断变量不为空_Python简洁方法
  2. 安装 postgresql
  3. 什么是顺序执行以及其特点
  4. 结构体内元素不确定_查漏补缺!高中三年生物最易忽略、易错的30个知识点整理不容错过...
  5. python图标的演变_把Python脚本生成exe文件并添加版本信息和自定义图标
  6. [Unity脚本运行时更新]C#6新特性
  7. .tcl文件_TCL电视自己安装的软件,有声音但没有画面?详细解决步骤奉上
  8. 小白用C语言编写贪吃蛇
  9. Javascript设计模式-18-状态模式
  10. 商品浏览时的css,jquery仿京东商品放大浏览页面
  11. 如何在 Ubuntu 上使用 AppImage 软件镜像包?
  12. 转载《士兵突击》观后杂感
  13. 30天自制操作系统 Day3
  14. DVWA1.9之文件上传漏洞High级多种方法
  15. java 毕向东 内部类_Java基础毕向东day05 对象与对象的区别,匿名内部类,函数的执行流程。...
  16. 三星新款Galaxy Watch采用捷德移动安全eSIM技术实现无缝连接
  17. 如何在看到美景美人时拍出惊艳的照片《数码摄影从入门到精通》
  18. Github没有记录Contributions的原因及解决方案
  19. 计算机系统安全性的高低,安全操作系统分几级
  20. Mac安装brew(无需FQ)

热门文章

  1. docker 2375 vulnerability and self-signatuer certifications
  2. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)
  3. java基础---动态代理机制
  4. SecureFX连接Linux后文件夹中文乱码问题解决
  5. 云服务器 ECS 建站教程:手工部署Java Web项目
  6. 怎么学JavaScript?
  7. 微信在公众号增开了新广告位 这次是在图文消息头部
  8. 怎样把centos 6.2 系统里的网卡em1还原为eth0
  9. VMware vSphere 5.1 学习系列之:安装 vCenter Server
  10. 在什么场景下该使用JMX,如何使用,会带来什么好处,这种场景下有哪些替代方案?...