Advertisement

常见汇编指令总结:例如 POP 从栈中弹出数据

  • 5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:DOC


简介:
本篇文章对常见的汇编语言指令进行了总结和解析,重点介绍了POP指令的功能与用法,即从堆栈中弹出数据。适合初学者参考学习。 ### 常用汇编指令汇总详解 #### 一、数据传送指令 1. **MOV**:该指令用于将一个字或字节的数据从源位置移动到目标位置。例如,`MOV AX, BX`会将BX寄存器中的内容复制到AX寄存器中。 2. **MOVSX**:这是一种特殊的传送指令,它先对数据进行符号扩展(根据最高位的符号位填充高位),然后再传送到目标寄存器。适用于当需要将8位或16位的有符号数扩展到更宽的寄存器中时。 3. **MOVZX**:与MOVSX类似,但执行的是零扩展。即,无论最高位是0还是1,高位都填充为0。适用于无符号数的扩展。 4. **PUSH**:此指令用于将一个字的数据压入堆栈中。堆栈是一种后进先出(LIFO)的数据结构,通常用于函数调用时保存返回地址和局部变量等。 5. **POP**:与PUSH相反,POP指令用于将堆栈顶部的一个字数据弹出,并放置到指定的目标位置。 6. **PUSHAPOPA**:这些指令分别用于将一组寄存器(AX, CX, DX, BX, SP, BP, SI, DI)依次压入堆栈,或者从堆栈中依次弹出。这些指令常用于子程序调用前后保护和恢复寄存器内容。 7. **PUSHADPOPAD**:与PUSHAPOPA类似,但用于32位寄存器组(EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI)。它们提供了高效地保护和恢复多个寄存器的方法。 8. **BSWAP**:该指令用于交换32位寄存器中的字节顺序,通常用于字节序转换。 9. **XCHG**:用于交换两个操作数(至少有一个是寄存器)的内容。 10. **CMPXCHG**:这是一个原子操作,用于比较并交换操作数。第二个操作数必须是累加器ALAXEAX。 11. **XADD**:先交换再累加的操作,结果存储在第一个操作数中。 12. **XLAT**:这是一个字节查表转换指令,其中BX指向一个包含256个字节的表格,AL作为索引值。最终将表格中的相应字节值赋给AL。 #### 二、输入输出端口传送指令 1. **IN**:用于从输入输出端口读取数据到寄存器中。 2. **OUT**:用于将寄存器中的数据写入输出端口。 这些指令允许CPU与外部设备进行通信,端口地址可以通过立即数指定(0-255)或通过DX寄存器指定(0-65535)。 #### 三、目的地址传送指令 1. **LEA**:用于将有效地址(即内存地址)装载到指定的寄存器中,而不是实际的数据值。 2. **LDSLESLFSLGSLSS**:这些指令用于将指针内容(包括段地址和偏移地址)装载到指定的寄存器对中。例如,`LDS SI, string`会将字符串的段地址装载到DS寄存器,而偏移地址则装载到SI寄存器。 #### 四、标志传送指令 1. **LAHFSAHF**:这两个指令用于在AH寄存器和标志寄存器之间传递标志信息。 2. **PUSHFPOPF**:用于将标志寄存器的内容压入堆栈或从堆栈中弹出。 3. **PUSHDPOPD**:这些指令针对32位系统,用于保存和恢复32位的标志寄存器。 #### 五、算术运算指令 1. **ADDADCINC**:分别用于加法、带进位加法以及增加1的操作。 2. **AAADAA**:用于ASCII码调整,使得结果适合于打印或显示。 3. **SUBSBBDECNEGCMP**:用于执行减法、带借位减法、减少1、求反以及比较操作。 4. **MULIMUL**:用于乘法操作。其中IMUL支持带符号乘法。 5. **DIVIDIV**:用于除法操作,IDIV支持带符号除法。 #### 六、逻辑运算指令 1. **ANDORXORNOTTEST**:用于执行位逻辑操作,如按位与、按位或、按位异或、按位取反及测试(只修改标志位)。 2. **

全部评论 (0)

还没有任何评论哟~
客服
客服
  • POP
    优质
    本篇文章对常见的汇编语言指令进行了总结和解析,重点介绍了POP指令的功能与用法,即从堆栈中弹出数据。适合初学者参考学习。 ### 常用汇编指令汇总详解 #### 一、数据传送指令 1. **MOV**:该指令用于将一个字或字节的数据从源位置移动到目标位置。例如,`MOV AX, BX`会将BX寄存器中的内容复制到AX寄存器中。 2. **MOVSX**:这是一种特殊的传送指令,它先对数据进行符号扩展(根据最高位的符号位填充高位),然后再传送到目标寄存器。适用于当需要将8位或16位的有符号数扩展到更宽的寄存器中时。 3. **MOVZX**:与MOVSX类似,但执行的是零扩展。即,无论最高位是0还是1,高位都填充为0。适用于无符号数的扩展。 4. **PUSH**:此指令用于将一个字的数据压入堆栈中。堆栈是一种后进先出(LIFO)的数据结构,通常用于函数调用时保存返回地址和局部变量等。 5. **POP**:与PUSH相反,POP指令用于将堆栈顶部的一个字数据弹出,并放置到指定的目标位置。 6. **PUSHAPOPA**:这些指令分别用于将一组寄存器(AX, CX, DX, BX, SP, BP, SI, DI)依次压入堆栈,或者从堆栈中依次弹出。这些指令常用于子程序调用前后保护和恢复寄存器内容。 7. **PUSHADPOPAD**:与PUSHAPOPA类似,但用于32位寄存器组(EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI)。它们提供了高效地保护和恢复多个寄存器的方法。 8. **BSWAP**:该指令用于交换32位寄存器中的字节顺序,通常用于字节序转换。 9. **XCHG**:用于交换两个操作数(至少有一个是寄存器)的内容。 10. **CMPXCHG**:这是一个原子操作,用于比较并交换操作数。第二个操作数必须是累加器ALAXEAX。 11. **XADD**:先交换再累加的操作,结果存储在第一个操作数中。 12. **XLAT**:这是一个字节查表转换指令,其中BX指向一个包含256个字节的表格,AL作为索引值。最终将表格中的相应字节值赋给AL。 #### 二、输入输出端口传送指令 1. **IN**:用于从输入输出端口读取数据到寄存器中。 2. **OUT**:用于将寄存器中的数据写入输出端口。 这些指令允许CPU与外部设备进行通信,端口地址可以通过立即数指定(0-255)或通过DX寄存器指定(0-65535)。 #### 三、目的地址传送指令 1. **LEA**:用于将有效地址(即内存地址)装载到指定的寄存器中,而不是实际的数据值。 2. **LDSLESLFSLGSLSS**:这些指令用于将指针内容(包括段地址和偏移地址)装载到指定的寄存器对中。例如,`LDS SI, string`会将字符串的段地址装载到DS寄存器,而偏移地址则装载到SI寄存器。 #### 四、标志传送指令 1. **LAHFSAHF**:这两个指令用于在AH寄存器和标志寄存器之间传递标志信息。 2. **PUSHFPOPF**:用于将标志寄存器的内容压入堆栈或从堆栈中弹出。 3. **PUSHDPOPD**:这些指令针对32位系统,用于保存和恢复32位的标志寄存器。 #### 五、算术运算指令 1. **ADDADCINC**:分别用于加法、带进位加法以及增加1的操作。 2. **AAADAA**:用于ASCII码调整,使得结果适合于打印或显示。 3. **SUBSBBDECNEGCMP**:用于执行减法、带借位减法、减少1、求反以及比较操作。 4. **MULIMUL**:用于乘法操作。其中IMUL支持带符号乘法。 5. **DIVIDIV**:用于除法操作,IDIV支持带符号除法。 #### 六、逻辑运算指令 1. **ANDORXORNOTTEST**:用于执行位逻辑操作,如按位与、按位或、按位异或、按位取反及测试(只修改标志位)。 2. **
  • Juniper
    优质
    本资料汇总了Juniper网络设备常用的配置和监控命令,旨在帮助管理员快速查找并执行日常管理和故障排查任务。 关于Juniper的一些常用命令,有兴趣的朋友可以下载查看,这是纯手工总结的资料。
  • VxWorks
    优质
    本资料全面总结了VxWorks操作系统中常用的命令,涵盖系统管理、任务控制、内存操作等多方面内容,旨在帮助开发者更高效地进行嵌入式软件开发。 VxWorks常用命令汇总: 1. 重启系统:`reset` 2. 显示当前任务列表:`showTask` 3. 切换到指定任务:`switchTo ` 4. 查看内存使用情况:`memStats` 5. 设置或显示环境变量:`setenv`, `getenv` 6. 打开网络接口配置菜单:`ifconfig -m` 以上为VxWorks系统中常用的命令,用于帮助开发者进行调试和维护工作。
  • Mvn
    优质
    本文章全面总结了在使用Apache Maven进行项目构建时常用的命令,帮助开发者快速掌握和应用这些工具技巧。 在使用Maven的过程中,一些常用的命令包括: 1. `mvn clean`:清理项目中的所有生成文件。 2. `mvn compile`:编译项目的源代码。 3. `mvn test-compile`:编译测试用例的源码。 4. `mvn surefire-report:report`:生成测试报告,帮助开发者了解哪些单元测试已经通过或失败了。 5. `mvn site`:根据pom.xml中的配置信息为项目创建网站,用于展示项目的各种文档和统计信息等。 6. `mvn install`:将软件包安装到本地仓库中。这通常意味着编译代码、运行测试,并跳过打包步骤直接安装。 这些命令是Maven构建自动化工具在日常开发中最常见的应用实例之一。
  • Ubuntu
    优质
    本资料汇总了在使用Ubuntu操作系统时常用的命令行指令,涵盖文件管理、系统信息查询及软件安装等多个方面,旨在帮助用户快速掌握和运用Linux系统的强大功能。 Ubuntu常用命令集合如下: 进入终端:可以通过按 Ctrl + Alt+T 快捷键或者在桌面上点击右键选择打开终端来实现。 APT 软件工具: - 安装/更新一个 deb 包: 使用 `apt-get install package_name` 命令。 - 升级列表中的软件包: 使用 `apt-get update` 命令。 - 升级所有已安装的软件:使用 `apt-get upgrade` 命令。 - 从系统删除一个deb包:使用 `apt-get remove package_name` 命令。 文件和目录: - 跳转到特定文件夹: 使用 `cd 文件夹路径`命令。 - 显示当前目录下的所有文件或文件夹: 使用 `ls`命令。 - 创建新文件夹: 使用 `mkdir 文件夹名`命令。 - 删除一个空的或者非空的文件/文件夹:使用 `rm -r 目标位置` 命令(注意,这会删除指定路径的所有内容,请谨慎操作)。 - 移动或复制文件到目标目录: 分别用 `mv 源位置 目标位置` 和 `cp 源位置 目标位置`命令来实现。 - 文件搜索:使用 `find / -name filename` 或者更具体的路径,比如 `find ./ -name filename`. - 解压压缩文件: 使用如下的命令: - 对于 .tar.gz 文件, 使用 `tar zxvf filename.tar.gz` - 对于 .zip 文件, 使用 `unzip filename.zip`
  • KUKA,便于沟通
    优质
    本资料汇集了KUKA机器人编程中常见的指令,旨在帮助使用者更有效地进行机器人操作和维护工作,促进团队内部的技术交流与合作。 KUKA机器人指令集合包括中断程序、偏移操作以及高级指令,并支持带参数的程序编写。
  • Docker
    优质
    本文档归纳了在使用Docker过程中常用的命令,旨在帮助用户快速掌握和应用Docker的各项功能。 这是一份关于Docker的常用命令汇总,涵盖了从入门到日常维护与使用的各个方面。内容包括镜像、容器、Docker网络以及Redis集群部署等内容。
  • Java构与算法
    优质
    本资料全面总结了Java中的常用数据结构和核心算法,包括数组、链表、栈、队列等基础数据结构及排序、查找等相关算法的实现方法。适合编程学习者参考实践。 分类文档 基础原则 六大设计原则 创建模式 单例模式 简单工厂模式 工厂方法模式 抽象工厂模式 原型模式 建造者模式 结构模式 代理模式 外观模式 适配器模式 装饰模式 组合模式 享元模式 桥接模式 行为模式 观察者模式 模板方法模式 策略模式 命令模式 调停者模式(中介者) 备忘录模式(Memento) 解释器模式(Interpreter) 迭代器模式(Iterator) 状态模式(State) 责任链模式(Chain of Responsibility) 访问者模式(Visitor) 结构与算法 基础概念 稀疏数组和二维数组 队列和栈结构 单向链表和双向链表 排序与查找算法 二叉树与多叉树 应用场景 RSA 算法签名验证流程 树结构业务应用
  • Linuxyum的
    优质
    本文档详细总结了在Linux系统中使用Yum软件包管理器时常用的命令及其用法,旨在帮助用户更加高效地进行软件安装、更新和卸载等操作。 Yum软件包管理器基于RPM包管理系统,可以从指定的服务器自动下载并安装RPM包,并且能够处理依赖关系,确保一次安装所有必要的软件包。使用起来非常简单方便。 以下是常用的Yum命令: 1. 安装: - `yum install`:全部安装 - `yum install package1`:仅安装指定的软件包package1 - `yum groupinstall group1`:安装程序组group1 2. 更新和升级: - `yum update`:更新所有已安装的软件包 - `yum update package1`:只更新特定的软件包package1 - `yum check-update`:检查可更新的软件包 - `yum upgrade package1`:将指定程序包packa升级至最新版本
  • ARM Cortex-M0
    优质
    本文档对ARM Cortex-M0处理器所使用的汇编指令进行了全面总结和解释,旨在帮助开发者深入了解其工作原理及应用技巧。适合嵌入式系统开发人员阅读参考。 请列出ARM CORTEX-M0可能的汇编指令组合、每条指令的长度以及执行所需的时间周期,并描述这些指令对状态字的影响。