汇编语言指令详解:数据传输与运算指令

需积分: 21 7 下载量 12 浏览量 更新于2024-09-11 1 收藏 25KB DOC 举报
"汇编速查手册" 汇编语言是一种低级编程语言,直接对应机器指令,对于理解和控制计算机硬件非常关键。本手册主要涵盖了数据传输、算术运算两大类指令,这些都是汇编语言中最基础且重要的部分。 一、数据传输指令 1. 通用数据传送指令: - `MOV`:用于在寄存器和内存之间,或者寄存器之间进行数据传输。 - `MOVSX`:将源操作数扩展为符号数后传送,适用于带符号整数。 - `MOVZX`:将源操作数扩展为零填充的无符号数后传送,适用于无符号整数。 - `PUSH`:将一个字压入堆栈,用于保存数据或调用子程序。 - `POP`:从堆栈弹出一个字到指定位置,用于恢复数据或返回主程序。 - `PUSHA/POPA`:分别将一组寄存器压入/弹出堆栈,简化多寄存器的保存和恢复。 - `PUSHAD/POPAD`:32位版本的PUSHA/POPA,处理EAX等32位寄存器。 - `BSWAP`:用于交换32位寄存器中字节的顺序,如EAX、EBX等。 - `XCHG`:交换两个操作数(至少一个为寄存器)的值。 - `CMPXCHG`:比较并交换,常用于原子操作,确保在比较相等时才更新值。 - `XADD`:先交换,再累加,通常用于实现原子加法。 - `XLAT`:基于BX寄存器中的地址和AL寄存器的索引,从内存中查找并返回一个字节。 2. 输入输出端口传送指令: - `IN`:从指定I/O端口读取数据到累加器(AL/AX/EAX)。 - `OUT`:将累加器中的数据写入指定I/O端口。 3. 目的地址传送指令: - `LEA`:计算并加载内存地址到寄存器,通常用于获取数组或结构体的地址。 - `LDS/LES/LFS/LGS/LSS`:根据指定的目标指针,将段地址和偏移地址分别加载到相应的段寄存器和数据寄存器。 4. 标志传送指令: - `LAHF`:将标志寄存器中的状态复制到AH寄存器。 - `SAHF`:将AH寄存器中的状态复制到标志寄存器。 - `PUSHF/POPF`:分别将标志寄存器压栈/出栈,用于保存和恢复程序状态。 - `PUSHD/POPD`:32位版本的PUSHF/POPF,处理EFLAGS寄存器。 二、算术运算指令 1. 基本算术运算: - `ADD`:执行加法操作,可以是无符号或有符号的整数。 - `ADC`:带进位的加法,用于处理溢出情况。 - `INC`:将操作数增加1。 - `DAA`:对加法结果进行ASCII码调整,用于处理字符数据。 - `SUB`:执行减法操作。 - `SBB`:带借位的减法。 - `DEC`:将操作数减少1。 - `NEG`:求操作数的相反数。 - `CMP`:进行比较,但不返回结果,只影响标志寄存器。 2. ASCII和十进制调整: - `AAS`:对减法结果进行ASCII码调整。 - `DAS`:对减法结果进行十进制调整。 3. 乘法和除法: - `MUL`:无符号乘法,结果在AL和AH中。 - `IMUL`:整数乘法,结果可能涉及DX或EDX。 - `AAM`:乘法的ASCII码调整。 - `DIV`:无符号除法,商在AL中,余数在AH中。 - `IDIV`:整数除法,商在AX或EAX中,余数在DX或EDX中。 - `AAD`:除法的ASCII码调整。 4. 数据大小转换: - `CBW/CWD/CWDE/CDQ`:用于在字节、字、双字之间进行数据的符号扩展。 这些指令是汇编语言编程的基础,熟练掌握它们能够帮助程序员更有效地编写和理解底层系统级别的代码。