PUSH进栈指令

  • 指令格式:PUSH 源
  • 指令功能:将源操作数推入堆栈。
  • 源操作数可以是16位通用寄存器、段寄存器或存储器中的数据字,但不能是立即数。堆栈是以“先进后出”的方式工作的一个存储区,栈区的段地址由SS寄存器的内容确定。堆栈的最大容量可为64K,即一个段的最大容量。堆栈指针SP始终指向栈顶,其值可以从FFFEH(偶地址)开始,向低地址方向发展,最小为0。
  • 每次执行PUSH操作时,先修改SP的值,使SP←SP-2后,然后把源操作数压入堆栈汇中SP指示的位置上,低位字节放在较低地址单元,高位字节放在较高地址单元。由于堆栈操作都是以字为单位进行的,所以SP总是指向偶地址单元。SS和SP的值可由指令设定。

POP出栈指令

  • 指令格式:POP 目的
  • 指令功能:把当前SP所指向的堆栈顶部的一个字送到指定的目的操作数中。
  • 目的操作数可以是16位通用寄存器、段寄存器或存储单元,但CS不能作目的的操作数。每执行一次出栈操作,SP←SP+2,即SP向高地址方向移动,指向新的栈顶。

例: 设SS=2000H, SP=10H,AX=2233,BX=3344,CX=0000,依次执行下列指令:
注:栈的大小 = 16字节 = 8个字

PUSH AX
PUSH BX
POP CX
POP BX

以下是执行PUSH AX指令后产生的变化

SP = 0010H 转换为十进制为16
SP = 16 - 2 = 14 转换为十六进制为 E

以下是执行PUSH BX指令后产生的变化

SP = 000EH 转换为十进制为 14
SP = 14 - 2 = 12 转换为十六进制为 C

以下是执行POP CX指令后产生的变化

SP = 000CH 转换为十进制为 12
SP = 12 + 2 = 14 转换为十六进制为 E

以下是执行POP CX指令后产生的变化

SP = 000EH 转换为十进制为14
SP = 14 + 2 = 16 转换为十六进制为 10H

注意:

段地址:偏移地址SS  : SP    它们永远指向栈顶数据

例:
利用栈交换AX 和 BX中的数据

push ax
push bxpop ax
pop bx

例:
假设AX = 001AH,BX = 001BH,然后删除成0,利用栈恢复AX和BX中的数据

mov bx,2000
mov ss,bx
mov sp,10Hmov ax,001AH
mov bx,001BHpush ax
push bxmov ax,0
mov bx,0pop bx
pop ax

例:
假设将 10000H -1000FH这段空间当做栈,初始状态栈是空的,此时 SS = 1000H,SP = ?

0 1 2 3 4 5 6 7 8 9 A B C D E F = 16字节
SS = 1000:0 + 10H = 1000 : 10H
SP = 10H

注:

  • 在使用堆栈的时候,需要注意栈越界问题,在汇编语言中,栈越界是没有提示的,需要自己留意。
  • 一个栈能够存放最多 32768个字型数据。
  • SP的范围为0 — FFFFH 字节。

例:
1)使其可以将 10000H — 1000FH 中的8个字型数据,逆序复制到 20000H—2000FH

10000H 23H           20000H 33H
10001H 01H           20001H 11H
10002H 66H
10003H 22H........
1000CH 44H           2000CH 66H
1000DH 78H           2000EH 22H
1000EH 33H           2000EH 23H
1000FH 11H           2000FH 01H
mov ax, 1000H
mov ds,axmov bx,2000H
mov ss,bx
mov sp,10H;1000H * 10H + 0      10000H 中字型数据 0123H
push ds:[0]    ;    →  SS:SP-2
push ds:[2]
push ds:[4]
push ds:[6]
push ds:[8]
push ds:[A]
push ds:[C]
push ds:[E]

2)使其可以将 10000H — 1000FH 中的8个字型数据,逆序复制到 20000H—2000FH

mov ax,2000H
mov ds,axmov bx,1000H
mov ss,bx
mov sp,0pop ds:[E]     ;  →  SS:SP → ds:[E]  → 2000:E  → SP + 2
pop ds:[C]
pop ds:[A]
pop ds:[8]
pop ds:[6]
pop ds:[4]
pop ds:[2]
pop ds:[0]

PUSH进栈指令和POP出栈指令相关推荐

  1. 【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )

    文章目录 一.push / pop 入栈 / 出栈 指令 二.ret / retn 函数调用返回指令 三.set 设置目标值指令 总结 一.push / pop 入栈 / 出栈 指令 push / p ...

  2. JVM常用指令:常量,变量的压栈出栈指令

    目录 常量压栈指令 局部变量表压栈指令 操作数栈出栈指令 通用指令 上一篇日志里用到的指令如bipush,iload等都是JVM常用的指令,它们有各自的分类,如bipush是常量压入操作数栈,iloa ...

  3. java中push和pop指令的作用_汇编语言PUSH和POP指令(压栈和出栈)

    汇编里把一段内存空间定义为一个栈,栈总是先进后出,栈的最大空间为 64K.由于 "栈" 是由高到低使用的,所以新压入的数据的位置更低,ESP 中的指针将一直指向这个新位置,所以 E ...

  4. 判断一个字符串是否为回文-链队(新建,进队,出队),链栈(新建,进栈,出栈)...

    回文:字符对称排列的字符串,例如ABCBA 思路:根据队:先进先出和栈: 先进后出的原则,进行比较出队和出栈的字符是否相等.如果相等,则为回文. 创建控制台应用程序. 1 #region 字符节点类 ...

  5. 数据结构栈的操作,初始化栈,进栈,出栈,读取栈顶元素;

    代码段: #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<string.h ...

  6. 进栈,出栈的详细知识

    有六个元素FEDCBA 从左至右依次顺序进栈,在进栈过程中会有元素被弹出栈.问下列哪一个不可能是合法的出栈序列? A) EDCFAB B) DECABF C) CDFEBA D) BCDAEF关于进 ...

  7. n个元素进栈,共有多少种出栈顺序?

    1.基于栈的问题分析 我们把n个元素的出栈个数的记为f(n), 那么对于1,2,3, 我们很容易得出: f(1) = 1     //即 1 f(2) = 2     //即 12.21 f(3) = ...

  8. 问题-栈S最多能容纳4个元素,现有6个元素按A、B、C、D、E、F顺序进栈,问可能的出栈顺序。...

    住栈的特性:对于取出栈内元素每次只能从栈顶开始取(后进先出(栈满时,只能先出后进)) 由于栈内只能容纳4个元素: 所以 E F不可能第一个出栈: 当栈内少于四个元素时 既可以选择进栈,也可以选择出栈 ...

  9. 1.若元素的进栈序列为:A、B、C、D、E,则:运用栈操作,能否得到出栈序列B、C、A、E、D和D、B、A、C、E?为什么?

    初学数据结构,有一些有意思的东西就写出来记录一下 这个是上课的时候老师出的课堂考试题目,觉得很有意思,分享给大家. 初看题目的时候,第一反应是栈是先进后出,那出栈顺序不就只有一种(E.D.C.B.A) ...

最新文章

  1. zookeeper基础知识整理
  2. java异常处理机简答题,【简答题】JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally 分别代表什么意义?...
  3. 20210819_Test
  4. oracle数据库用户创建_权限分配_以及导入_导出数据,oracle数据库用户创建、权限分配,以及导入,导出数据...
  5. 关于QT多线程子线程使用信号和
  6. 河北四部门联合打击虚开骗税违法行为
  7. AndroidStudio 0.2.x 引入多模块Eclipse项目
  8. 思科 ASA5505 防火墙放行流量简单配置案例
  9. Google Chrome如何恢复误删除书签和文件夹
  10. 《团队执行力》分享记录
  11. SAP同略会:主角SAP HANA的创新口号
  12. 计算机专业进国企有什么难度,大学毕业后才发现,国企与私企的差距不是一星半点,希望你没选错...
  13. h5将数字翻译为大写汉字_JS将数字转换为大写汉字人民币
  14. 戴尔venue11pro刷linux,科技教程:戴尔Venue11Pro测评
  15. Google OAUTH + OpenID 给第三方授权
  16. 『Hi,我是易建科技eKing Cloud!』
  17. android 皮肤,Android换肤
  18. Scrapy爬取当当网的商品信息存到MySQL数据库
  19. 效验文件后缀及其流后缀 是否验证;文件大小
  20. python批量生成随机密码

热门文章

  1. java设计模式概述
  2. 阿里配管专家解读:如何最优成本搭建非标准的iOS构建集群
  3. 完美世界第二题:模拟读数字
  4. 填平新版本Xcode安装插件不成功的坑
  5. (原创)用讯飞语音实现人机交互的功能
  6. 广东移动携手远传技术 共建移动客服标杆
  7. 微型计算机原理 考试试题,微机原理期末考试试卷(有答案)
  8. mahout 算法集
  9. mysql 创建定时任务
  10. setsockopt()函数功能介绍