汇编push和pop指令

汇编push和pop指令push 和 pop 是用来操作栈的 2 个指令 push 寄存器 将一个寄存器中的数据入栈 pop 寄存器 出栈用一个寄存器接收数据下面用一段汇编代码学习一下栈的操作 用 masm 编辑的 环境用的 lt 汇编语言 gt 王爽的那套环境 assumecs codesg 汇编语言

     ❤️强烈推荐人工智能学习网站❤️

           push寄存器:将一个寄存器中的数据入栈

           pop寄存器:出栈用一个寄存器接收数据

    

           下面用一段汇编代码学习一下栈的操作,用masm编辑的(环境用的< <汇编语言>
> 王爽的那套环境)。

assume cs:codesg ;cs寄存器指向该程序的首地址 codesg segment mov ax,1000H ;将1000H送入寄存器ax,相当于ax=1000H mov ss,ax mov sp,0010H mov ax,001AH ;将ax,bx赋值 mov bx,001BH push ax push bx ;将ax,bx入栈 sub ax,ax ;sub为减法指令,相当于ax=ax-ax sub bx,bx pop ax //将栈顶的数据送入ax,pop也有mov指令类似的功能 pop bx codesg ends end

            该段代码将10000H~10000FH这段空间当栈,初始状态栈是空的。设置寄存器ax,bx的值,将ax,bx中的数据入栈,然后将ax,bx清零,从栈中恢复ax,bx原来的内容。

            ax,bx,sp,cs为寄存器,ss为段寄存器。任意时刻CPU从CS*16+IP(这里cs和ip表示该寄存器的值)单元开始执行指令,所以设置cs:codesg。任意时刻,ss*16+sp(这里ss和sp表示对应寄存器的值)对应的地址单元指向栈顶元素,所以程序里面设置ss=1000H,而不是ss=10000H。

           下面看一下单步调试的结果:

汇编push和pop指令

汇编push和pop指令

r命令时查看当前寄存器的内容,t是单步执行命令。每一步的执行结果中,上面是对应寄存器的值,下面对应的机器指令是下一条将要执行的机器指令。每执行一条指令你都看到对应寄存器的变化。最后一条pop bx指令由于图片大小原因,我没有截出来,所以最后一行的结果只是执行pop ax,而没有执行pop bx的结果。

 

 

 

          参考资料:< <汇编语言>
> 王爽

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177189.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午8:06
下一篇 2026年3月26日 下午8:06


相关推荐

  • java反射给类添加属性_java获取反射的三种方法

    java反射给类添加属性_java获取反射的三种方法摘要:记录一下使用java反射时PropertyDescriptor的异常java.beans.IntrospectionException:Methodnotfound:isMBuyPrice1.PropertyDescriptor要求bean对象的属性名称的前两个字母大小写需要一致,要么全大写,要么全小写2.PropertyDescriptor要求bean对象的属…

    2026年4月16日
    2
  • java http协议_java编写协议

    java http协议_java编写协议前面一篇博客里面已经介绍过SSDP协议原理,本篇博客将实现实现Android上的SSDP协议。关键技术分析:1、发送广播;须要发送送广播,所以须要使用MulticastSocket、SocketAddress、InetAddress,须要掌握。2、SSDP数据报格式;标准的SSDPServer解析的时候对于分段的字段选用的特征码是”\r\n”,须要特别注意。3、訪问权限;须要互联网,要在Main…

    2022年10月11日
    5
  • 百度文心一言ERNIE-4.5开源模型深度测评:架构解析与性能实战对比

    百度文心一言ERNIE-4.5开源模型深度测评:架构解析与性能实战对比

    2026年3月12日
    2
  • ico图标在谷歌浏览器中如何显示?

    ico图标在谷歌浏览器中如何显示?

    2021年10月9日
    186
  • java的变量命名规则_【Java】变量命名规范

    java的变量命名规则_【Java】变量命名规范Java 是一种区分字母的大小写的语言 所以我们在定义变量名的时候应该注意区分大小写的使用和一些规范 接下来我们简单的来讲讲 Java 语言中包 类 变量等的命名规范 一 Package 包 的命名 Package 的名字应该都是由一个小写单词组成 例如 com xuetang9 company 等 二 Class 类 的命名 Class 的名字首字母大写 通常由多个单词合成一个类名 要求每个单词的首字母也要大

    2026年3月18日
    1
  • linux 移动 文件,linux移动文件命令[通俗易懂]

    linux 移动 文件,linux移动文件命令[通俗易懂]linux移动文件命令mv命令功能:为文件或目录改名或将文件由一个目录移入另一个目录中。该命令如同DOS下的ren和move的组合。语法:mv[选项]源文件或目录目标文件或目录说明:视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源…

    2022年10月6日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号