### 常用8086汇编指令详解 #### 数据传送指令 ##### 1. 通用数据传送指令 **MOV(Move)传送** - **功能**:将一个操作数的值复制到另一个操作数中。 - **格式**:`MOV DST, SRC` - **执行的操作**:`(DST) ← (SRC)` - **示例**: - `MOV AX, BX` 将BX中的值赋给AX。 **PUSH(Push onto the stack)进栈** - **功能**:将一个操作数压入栈顶。 - **格式**:`PUSH SRC` - **执行的操作**: - `(SP) ← (SP) - 2` - `((SP) + 1, (SP)) ← (SRC)` - **示例**: - `PUSH AX` 将AX中的值压入栈顶。 **POP(Pop from the stack)出栈** - **功能**:从栈顶弹出一个操作数,并将其值赋给指定的目的操作数。 - **格式**:`POP DST` - **执行的操作**: - `(DST) ← ((SP) + 1, (SP))` - `(SP) ← (SP) + 2` - **示例**: - `POP AX` 从栈顶弹出值并赋给AX。 **XCHG(Exchange)交换** - **功能**:交换两个操作数的值。 - **格式**:`XCHG OPR1, OPR2` - **执行的操作**:`(OPR1) ↔ (OPR2)` - **示例**: - `XCHG AX, BX` 交换AX与BX的值。 ##### 2. 累加器专用传送指令 **IN(Input)** 输入 - **功能**:从指定的端口读取数据到累加器。 - **格式**: - 长格式:`IN AL, PORT` 或 `IN AX, PORT` - 短格式:`IN AL, DX` 或 `IN AX, DX` - **执行的操作**: - 长格式:`(AL) ← (PORT)` 或 `(AX) ← (PORT + 1, PORT)` - 短格式:`(AL) ← ((DX))` 或 `(AX) ← ((DX) + 1, DX)` - **示例**: - `IN AL, 0x3F8` 从端口0x3F8读取一个字节到AL。 - `IN AX, DX` 从DX指向的端口读取一个字到AX。 **OUT(Output)** 输出 - **功能**:将累加器中的数据写入指定的端口。 - **格式**: - 长格式:`OUT PORT, AL` 或 `OUT PORT, AX` - 短格式:`OUT DX, AL` 或 `OUT DX, AX` - **执行的操作**: - 长格式:`(PORT) ← (AL)` 或 `(PORT + 1, PORT) ← (AX)` - 短格式:`((DX)) ← (AL)` 或 `((DX) + 1, (DX)) ← (AX)` - **示例**: - `OUT 0x3F8, AL` 将AL中的值写入端口0x3F8。 - `OUT DX, AX` 将AX中的值写入DX指向的端口。 **XLAT(Translate)** 换码 - **功能**:根据AL寄存器中的索引值,从内存中指定的表中查找一个字节并将其放入AL。 - **格式**:`XLAT OPR` 或 `XLAT` - **执行的操作**:`(AL) ← ((BX) + (AL))` - **示例**: - `XLAT` 假设(BX)=0x1000,(AL)=0x05,则(AL)将被更新为存储单元[0x1005]中的内容。 ##### 3. 有效地址送寄存器指令 **LEA(Loadeffective address)有效地址送寄存器** - **功能**:将源操作数的有效地址加载到目标寄存器。 - **格式**:`LEA REG, SRC` - **执行的操作**:`(REG) ← (SRC)` - **示例**: - `LEA SI, [BX+DI+5]` 将[BX+DI+5]的有效地址赋给SI。 **LDS(Load DS with Pointer)指针送寄存器和DS** - **功能**:将源操作数指定的4个字节分别加载到指定的寄存器和DS寄存器。 - **格式**:`LDS REG, SRC` - **执行的操作**:`(REG) ← (SRC)` 和 `(DS) ← (SRC + 2)` - **示例**: - `LDS SI, [BX]` 将[BX]指向的前两个字节赋给SI,后两个字节赋给DS。 **LES(Load ES with Pointer)指针送寄存器和ES** - **功能**:将源操作数指定的4个字节分别加载到指定的寄存器和ES寄存器。 - **格式**:`LES REG, SRC` - **执行的操作**:`(REG) ← (SRC)` 和 `(ES) ← (SRC + 2)` - **示例**: - `LES DI, [BX]` 将[BX]指向的前两个字节赋给DI,后两个字节赋给ES。 ##### 4. 标志寄存器传送指令 **LAHF(Load AH with flags)标志送AH** - **功能**:将状态标志的低8位加载到AH寄存器。 - **格式**:`LAHF` - **执行的操作**:`(AH) ← (PWS的低字节)` - **示例**: - `LAHF` 将状态标志的低8位置于AH中。 **SAHF(store AH in flags)AH送标志寄存器** - **功能**:将AH寄存器中的值设置为状态标志的低8位。 - **格式**:`SAHF` - **执行的操作**:`(PWS的低字节) ← (AH)` - **示例**: - `SAHF` 将AH中的值作为状态标志的低8位。 **PUSHF(push the flags)标志进栈** - **功能**:将状态标志压入栈顶。 - **格式**:`PUSHF` - **执行的操作**: - `(SP) ← (SP) - 2` - `((SP) + 1, (SP)) ← (PSW)` - **示例**: - `PUSHF` 将当前的状态标志压入栈顶。 **POPF(pop the flags)标志出栈** - **功能**:从栈顶弹出状态标志。 - **格式**:`POPF` - **执行的操作**: - `(PWS) ← ((SP) + 1, (SP))` - `(SP) ← (SP) + 2` - **示例**: - `POPF` 从栈顶弹出状态标志。 #### 算术指令 ##### 1. 加法指令 **ADD(add)加法** - **功能**:将两个操作数相加,结果存储在目的操作数中。 - **格式**:`ADD DST, SRC` - **执行的操作**:`(DST) ← (SRC) + (DST)` - **示例**: - `ADD AX, BX` 将BX的值加到AX上。 **ADC(add with carry)带进位加法** - **功能**:将两个操作数以及进位标志CF相加,结果存储在目的操作数中。 - **格式**:`ADC DST, SRC` - **执行的操作**:`(DST) ← (SRC) + (DST) + CF` - **示例**: - `ADC AX, BX` 将BX的值加上CF再加到AX上。 **INC(increment)加1** - **功能**:将操作数加1。 - **格式**:`INC OPR` - **执行的操作**:`(OPR) ← (OPR) + 1` - **示例**: - `INC AX` 将AX的值加1。
- 粉丝: 13
- 资源: 17
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于MicroPython的ESP32控制SSD1306 OLED屏幕显示软硬件方案Wokwi仿真实现
- 机器学习大作业,人脸识别-卷积神经网络实现性别检测+源代码+文档说明(满分)
- 机器学习作业,机器学习和深度学习方法实现的入侵检测+源代码+文档说明+数据集
- web服务器性能测试用例模板
- web服务器性能测试计划模板
- web服务器性能测试报告模版
- 校园网网络拓扑实现(课程设计)
- 2_ORB_SLAM2.zip
- 基于MicroPython的ESP32控制DHT22温湿度传感器模块设计方案Wokwi软硬件仿真实现
- 西门子污水处理程序西门子Wincc+S7-300污水处理大项目 带西门子Wincc上位机+S7-300程序 污水处理工艺总览包括