### 8086/8088 汇编语言指令详解 #### 一、数据传送类指令 **MOV** (Move): 这条指令用于将数据从一个位置移动到另一个位置。它支持多种类型的数据来源,包括寄存器、存储器以及立即数。 - **格式**: `MOV dst, src` - **操作**: 把从`src`确定的位置(如寄存器或内存单元)取出的操作数或把`src`作为一个立即数,传送到由`dst`确定的位置。 - **示例**: `MOV AX, BX` 或 `MOV AX, 1000h` **PUSH** (Push): 将数据压入堆栈。 - **格式**: `PUSH src` - **操作**: 把字操作数`src`压入堆栈。 - **示例**: `PUSH AX` **POP** (Pop): 从堆栈中弹出数据。 - **格式**: `POP dst` - **操作**: 从堆栈中弹出一个字数据,并将其传送到由`dst`确定的位置。 - **示例**: `POP AX` **XCHG** (Exchange): 交换两个操作数的值。 - **格式**: `XCHG dst, src` - **操作**: 交换`dst`和`src`两个操作数中的内容。 - **示例**: `XCHG AX, BX` **XLAT** (Translate Byte): 用于查找表中的字节。 - **格式**: `XLAT` - **操作**: 该指令使用(BX+AL)的和作为偏移地址,从数据段相应位置取出一个字节数据送入AL寄存器。 - **示例**: 如果(BX+AL)=2000h,则执行`XLAT`会从[2000h]处读取一个字节并存入AL。 **LEA** (Load Effective Address): 加载有效地址。 - **格式**: `LEA dst, src` - **操作**: 取操作数`src`在内存中的偏移地址,然后将这个偏移地址送到由`dst`确定的位置。 - **示例**: `LEA AX, BUFFER` (BUFFER是内存中的某个地址) **PUSHF** (Push Flags): 压栈标志寄存器。 - **格式**: `PUSHF` - **操作**: 将标志寄存器FLAGS的内容压入堆栈。 - **示例**: `PUSHF` **POPF** (Pop Flags): 从堆栈弹出标志寄存器。 - **格式**: `POPF` - **操作**: 从堆栈中弹出一个字数据,并将其存入标志寄存器FLAGS中。 - **示例**: `POPF` **IN** (Input): 从I/O端口读取数据。 - **格式**: `IN AL, src` 或 `IN AX, src` - **操作**: 从`src`指定的外设端口读取一个字节数据到AL寄存器;或从`src`指定的外设端口及其下一端口读取一个字数据到AX寄存器。 - **示例**: `IN AL, 20h` **OUT** (Output): 向I/O端口写入数据。 - **格式**: `OUT dst, AL` 或 `OUT dst, AX` - **操作**: 把AL寄存器的值发送到`dst`指定的外设端口;或将AX寄存器的值发送到`dst`指定的外设端口及其下一端口。 - **示例**: `OUT 20h, AL` #### 二、算术运算类指令 **ADD** (Add): 两个操作数相加。 - **格式**: `ADD dst, src` - **操作**: 把两个操作数相加,结果存入由`dst`确定的位置。 - **示例**: `ADD AX, BX` **ADC** (Add with Carry): 带进位的加法。 - **格式**: `ADC dst, src` - **操作**: 把两个操作数及CF标志位的值相加,结果存入由`dst`确定的位置。 - **示例**: `ADC AX, BX` **INC** (Increment): 对操作数加1。 - **格式**: `INC opr` - **操作**: 把操作数`opr`的值加1后送回`opr`中。 - **示例**: `INC AX` **SUB** (Subtract): 两个操作数相减。 - **格式**: `SUB dst, src` - **操作**: 把`dst`减去`src`的结果送回操作数`dst`中。 - **示例**: `SUB AX, BX` **SBB** (Subtract with Borrow): 带借位的减法。 - **格式**: `SBB dst, src` - **操作**: 把`dst`减去`src`的结果再减去CF的值,最终结果送回操作数`dst`中。 - **示例**: `SBB AX, BX` **DEC** (Decrement): 对操作数减1。 - **格式**: `DEC opr` - **操作**: 把操作数`opr`的值减1后送回`opr`中。 - **示例**: `DEC AX` **NEG** (Negate): 操作数取负。 - **格式**: `NEG opr` - **操作**: 对操作数`opr`的值取反加1后送回`opr`中。 - **示例**: `NEG AX` **CMP** (Compare): 比较两个操作数。 - **格式**: `CMP dst, src` - **操作**: 用`dst`减去`src`,根据相减情况设置各条件标志位。 - **示例**: `CMP AX, BX` **MUL** (Multiply): 无符号乘法。 - **格式**: `MUL src` - **操作**: 无符号乘法:AL乘以字节操作数`src`,乘积送到AX中;或AX乘以字操作数`src`,乘积送到(DX,AX)中。 - **示例**: `MUL BL` **IMUL** (Signed Multiply): 带符号乘法。 - **格式**: `IMUL src` - **操作**: 带符号乘法:AL乘以字节型操作数`src`,乘积送到AX中;或AX乘以字型操作数`src`,乘积送到(DX,AX)中。 - **示例**: `IMUL BX` **DIV** (Unsigned Divide): 无符号除法。 - **格式**: `DIV src` - **操作**: 无符号除法:AX除以`src`,商送AL,余数送AH;或(DX,AX)除以`src`,商送AX,余数送DX。 - **示例**: `DIV BL` **IDIV** (Signed Divide): 带符号除法。 - **格式**: `IDIV src` - **操作**: 带符号除法:AX除以`src`,商送AL,余数送AH;或(DX,AX)除以`src`,商送AX,余数送DX。 - **示例**: `IDIV BX` #### 三、十进制调整指令 **DAA** (Decimal Adjust After Addition): 加法后的十进制调整。 - **格式**: `DAA` - **操作**: 把AL中的和调整到压缩的BCD格式。 - **示例**: `DAA` **DAS** (Decimal Adjust After Subtraction): 减法后的十进制调整。 - **格式**: `DAS` - **操作**: 把AL中的差调整到压缩的BCD格式。 - **示例**: `DAS` **AAA** (ASCII Adjust After Addition): 加法后的ASCII码调整。 - **格式**: `AAA` - **操作**: 把AL中的和调整到非压缩的BCD格式,AH加调整产生的进位值。 - **示例**: `AAA` **AAS** (ASCII Adjust After Subtraction): 减法后的ASCII码调整。 - **格式**: `AAS` - **操作**: 把AL中的差调整到非压缩的BCD格式,AH减调整产生的借位值。 - **示例**: `AAS` **AAM** (ASCII Adjust for Multiplication): 乘法后的ASCII码调整。 - **格式**: `AAM` - **操作**: 把AH中的积调整到非压缩的BCD格式。 - **示例**: `AAM` **AAD** (ASCII Adjust for Division): 除法后的ASCII码调整。 - **格式**: `AAD` - **操作**: 实现除法的非压缩BCD码调整。 - **示例**: `AAD` #### 四、逻辑运算指令 **AND** (Logical AND): 逻辑与运算。 - **格式**: `AND dst, src` - **操作**: 两个操作数按各个二进制位进行逻辑与运算,结果送回`dst`中。 - **示例**: `AND AX, BX` **OR** (Logical OR): 逻辑或运算。 - **格式**: `OR dst, src` - **操作**: 两个操作数按各个二进制位进行逻辑或运算,结果送回`dst`中。 - **示例**: `OR AX, BX` **NOT** (Logical NOT): 逻辑非运算。 - **格式**: `NOT opr` - **操作**: 对`opr`的各个二进制位取反,结果送回`opr`。 - **示例**: `NOT AX` **XOR** (Logical Exclusive OR): 逻辑异或运算。 - **格式**: `XOR dst, src` - **操作**: 两个操作数按各个二进制位进行逻辑异或运算,结果送回`dst`中。 - **示例**: `XOR AX, BX` **TEST** (Test): 测试。 - **格式**: `TEST dst, src` - **操作**: 两个操作数按各个二进制位进行逻辑与运算,用计算结果设置标志位。 - **示例**: `TEST AX, BX` #### 五、移位指令 **SHL** / **SAL** (Shift Left): 左移。 - **格式**: `SHL dst, src` - **操作**: 把`dst`的各个二进制位向左移动`src`位,右边空位填0,结果送回`dst`,最后移出的一位送CF。 - **示例**: `SHL AX, CL` **SHR** (Shift Right): 右移。 - **格式**: `SHR dst, src` - **操作**: 把`dst`的各个二进制位向右移动`src`位,左边空位填0,结果送回`dst`。 - **示例**: `SHR AX, CL` 以上指令为8086/8088处理器中常用的基本指令集,掌握了这些指令,可以编写出各种复杂的程序。这些指令不仅适用于8086/8088处理器,对于后续的x86系列处理器也具有很高的兼容性。
































- inkshen2011-11-07常用的都有,只是感觉不够详细
- 昵称涉及违规用词2011-09-27是微机原理课本的附录,有常用的汇编指令

- 粉丝: 16
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 记录个人在计算机视觉-AU335-1课程所完成的lab和大作业
- 计算机视觉学习过程中的实战项目代码仓库
- 基于搜索的软件工程:SSBSE 2021会议精选
- 个人在计算机视觉 - AU335-1 课程中完成的 lab 与大作业记录 个人完成计算机视觉 - AU335-1 课程 lab 及大作业情况记录 计算机视觉 - AU335-1 课程个人所完成 lab
- 19幅图解RAID,从入门到精通,一文读懂存储技术RAID技术详解与选择指南:涵盖RAID级别、硬件与软件RAID、缓存技术及新形态RAID卡的应用场景
- CSDN 学院计算机视觉课程的代码实现示例
- 基于搜索的软件工程前沿进展
- 此仓库存储我在学习计算机视觉时做的实战项目代码
- 此仓库存储我在学习计算机视觉时做的实战项目代码
- 基于深度学习与计算机视觉的 YOLO 大作业设计与实现
- MobaXterm 专业版本工具
- PHP, MySQL和Apache全一册:Web开发入门与实践
- 2021年新版市级、县级国土空间规划用地用海制图规范符号库,直接使用,很方便
- 计算机视觉课程代码实现 - CSDN学院
- opencv-python-headless-4.11.0.86-cp37-abi3-win-amd64.whl
- 【航空航天材料工程】MMPDS-08金属材料性能标准化手册:室温和高温机械性能数据分析与应用


