指令符号说明
| 符号 | 说明 |
| r8 | 任意一个8位通用寄存器AH、AL、BH、BL、CH、CL、DH、DL |
| r16 | 任意一个16位通用寄存器AX、BX、CX、DX、SI、DI、BP、SP |
| reg | 代表r8、r16 |
| seg | 段寄存器CS、DS、ES、SS |
| m8 | 一个8位存储器操作数单元 |
| m16 | 一个16位存储器操作数单元 |
| mem | 代表m8、m16 |
| i8 | 一个8位立即数 |
| i16 | 一个16位立即数 |
| imm | 代表i8、i16 |
| dest | 目的操作数 |
| src | 源操作数 |
| label | 标号 |
8086指令对状态标志的影响
状态符号说明
| 符号 | 说明 |
| - | 标志位不受影响(没有改变) |
| 0 | 标志位复位(置0) |
| 1 | 标志位置位(置1) |
| x | 标志位按定义功能改变 |
| # | 标志位按指令的特定说明改变 |
| u | 标志位不确定(可能为0,也可能为1) |
指令对状态标志的影响(未列出的指令不影响标志)
| 指令 | OF | SF | ZF | AF | PF | CF |
| SAHF | - | # | # | # | # | # |
| POPF/ IRET | # | # | # | # | # | # |
| ADD/ADC/SUB/SBB/CMP/NEG/CMPS/SCAS | x | x | x | x | x | x |
| INC/DEC | x | x | x | x | x | - |
| MUL/IMUL | # | u | u | u | u | # |
| DIV/IDIV | u | u | u | u | u | u |
| DAA/DAS | u | x | x | x | x | x |
| AAA/AAS | u | u | u | x | u | x |
| AAM/AAD | u | x | x | u | x | u |
| AND/OR/XOR/TEST | 0 | x | x | u | x | 0 |
| SAL/SAR/SHL/SHR | # | x | x | u | x | # |
| ROL/ROR/RCL/RCR | # | - | - | - | - | # |
| CLC/STC/CMC | - | - | - | - | - | # |
16/32位基本指令的汇编格式
| 指令类型 | 指令汇编格式 | 指令功能简介 |
|
| MOV reg/mem,imm | dest←src |
| 传送指令 | MOV reg/mem/seg,reg |
|
|
| MOV reg/seg,mem |
|
|
| MOV reg/mem,seg |
|
| 交换指令 | XCHG reg,reg/mem | reg←→reg/mem |
|
| CHG reg/mem,reg |
|
| 转换指令 | XLAT label | al←ds:[(e)bx+al] |
|
| XLAT |
|
|
| PUSH reg/mem/seg | 寄存器/存储器入栈 |
|
| PUSH imm | 立即数入栈 |
|
| POP reg/seg/mem | 出栈 |
| 堆栈指令 | PUSHA | 保护所有r16 |
|
| POPA | 恢复所有r16 |
|
| PUSHAD | 保护所有r32 |
|
| POPAD | 恢复所有r32 |
|
| LAHF | AH←FLAG低字节 |
|
| SAHF | FLAG低字节←AH |
| 标志传送 | PUSHF | FLAGS入栈 |
|
| POPF | FLAGS出栈 |
|
| PUSHFD | EFLAGS入栈 |
|
| POPFD | EFLAGS出栈 |
|
| LEA r16/r32,mem | r16/r32←16/32位有效地址 |
|
| LDS r16/r32,mem | DS: r16/r32←32/48位远指针 |
| 地址传送 | LES r16/r32,mem | ES: r16/r32←32/48位远指针 |
|
| LFS r16/r32,mem | FS: r16/r32←32/48位远指针 |
|
| LGS r16/r32,mem | GS: r16/r32←32/48位远指针 |
|
| LSS r16/r32,mem | SS: r16/r32←32/48位远指针 |
| 输入输出 | IN AL/AX/EAX,i8/DX | AL/AX/EAX←I/O端口i8/[DX] |
|
| OUT i8/DX,AL/AX/EAX | I/O端口i8/[DX]←AL/AX/EAX |
|
| ADD reg,imm/reg/mem | dest←dest+src |
|
| ADD mem,imm/reg |
|
| 加法运算 | ADC reg,imm/reg/mem | dest←dest+src+CF |
|
| ADC mem,imm/reg |
|
|
| INC reg/mem | reg/mem←reg/mem+1 |
|
| SUB reg,imm/reg/mem | dest←dest-src |
|
| SUB mem,imm/reg |
|
|
| SBB reg,imm/reg/mem | dest←dest-src-CF |
| 减法运算 | SBB mem,imm/reg |
|
|
| DEC reg/mem | reg/mem←reg/mem-1 |
|
| NEG reg/mem | reg/mem←0-reg/mem |
|
| CMP reg,imm/reg/mem | dest-src |
|
| CMP mem,imm/reg |
|
|
| MUL reg/mem | 无符号数值乘法 |
|
| IMUL reg/mem | 有符号数值乘法 |
| 乘法运算 | IMUL r16,r16/m16/i8/i16 | r16←r16×r16/m16/i8/i16 |
|
| IMUL r16,r/m16,i8/i16 | r16←r/m16×i8/i16 |
|
| IMUL r32,r32/m32/i8/i32 | r32←r32×r32/m32/i8/i32 |
|
| IMUL r32,r32/m32,i8/i32 | r32←r32/m32×i8/i32 |
| 除法运算 | DIV reg/mem | 无符号数值除法 |
|
| IDIV reg/mem | 有符号数值除法 |
|
| CBW | 把AL符号扩展为AX |
|
| CWD | 把AX符号扩展为DX.AX |
|
| CWDE | 把AX符号扩展为EAX |
| 符号扩展 | CDQ | 把EAX符号扩展为EDX.EAX |
|
| MOVSX r16,r8/m8 | 把r8/m8符号扩展并传送至r16 |
|
| MOVSX r32,r8/m8/r16/m16 | 把r8/m8/r16/m16符号扩展并传送至r32 |
|
| MOVZX r16,r8/m8 | 把r8/m8零位扩展并传送至r16 |
|
| MOVZX r32,r8/m8/r16/m16 | 把r8/m8/r16/m16零位扩展并传送至r32 |
|
| DAA | 将AL中的加和调整为压缩BCD码 |
|
| DAS | 将AL中的减差调整为压缩BCD码 |
| 十进制调整 | AAA | 将AL中的加和调整为非压缩BCD码 |
|
| AAS | 将AL中的减差调整为非压缩BCD码 |
|
| AAM | 将AX中的乘积调整为非压缩BCD码 |
|
| AAD | 将AX中的非压缩BCD码扩展成二进制数 |
|
| AND reg,imm/reg/mem | dest←dest AND src |
|
| AND mem,imm/reg |
|
|
| OR reg,imm/reg/mem | dest←dest OR src |
| 逻辑运算 | OR mem,imm/reg |
|
|
| XOR reg,imm/reg/mem | dest←dest XOR src |
|
| XOR mem,imm/reg |
|
|
| TEST reg,imm/reg/mem | dest AND src |
|
| TEST mem,imm/reg |
|
|
| NOT reg/mem | reg/mem←NOT reg/mem |
|
| SAL reg/mem,1/CL/i8 | 算术左移1/CL/i8指定的次数 |
| 移位 | SAR reg/mem,1/CL/i8 | 算术右移1/CL/i8指定的次数 |
|
| SHL reg/mem,1/CL/i8 | 与SAL相同 |
|
| SHR reg/mem,1/CL/i8 | 逻辑右移1/CL/i8指定的次数 |
|
| ROL reg/mem,1/CL/i8 | 循环左移1/CL/i8指定的次数 |
| 循环移位 | ROR reg/mem,1/CL/i8 | 循环右移1/CL/i8指定的次数 |
|
| RCL reg/mem,1/CL/i8 | 带进位循环左移1/CL/i8指定的次数 |
|
| RCR reg/mem,1/CL/i8 | 带进位循环右移1/CL/i8指定的次数 |
|
| MOVS[B/W/D] | 串传送 |
|
| LODS[B/W/D] | 串读取 |
|
| STOS[B/W/D] | 串存储 |
|
| CMPS[B/W/D] | 串比较 |
| 串操作 | SCAS[B/W/D] | 串扫描 |
|
| INS[B/W/D] | I/O串输入 |
|
| OUTS[B/W/D] | I/O串输出 |
|
| REP | 重复前缀 |
|
| REPZ / REPE | 相等重复前缀 |
|
| REPNZ / REPNE | 不等重复前缀 |
|
| JMP label | 无条件直接转移 |
|
| JMP r16/r32/m16 | 无条件间接转移 |
| 转移 | Jcc label | 条件转移 |
|
| JCXZ label | CX等于0转移 |
|
| JECXZ label | ECX等于0转移 |
|
| LOOP label | cx←cx-1;若cx≠0,循环 |
| 循环 | LOOPZ / LOOPE label | cx←cx-1;若cx≠0且ZF=1,循环 |
|
| LOOPNZ / LOOPNE label | cx←cx-1;若cx≠0且ZF=0,循环 |
|
| CALL label | 直接调用 |
| 子程序 | CALL r16/m16 | 间接调用 |
|
| RET | 无参数返回 |
|
| RET i16 | 有参数返回 |
|
| INT i8 | 中断调用 |
| 中断 | IRET | 中断返回 |
|
| INTO | 溢出中断调用 |
|
| ENTER i16,i8 | 建立堆栈帧 |
| 高级语言支持 | LEAVE | 释放堆栈帧 |
|
| BOUND r16/r32,mem | 边界检测 |
|
| CLC | CF←0 |
|
| STC | CF←1 |
|
| CMC | CF←~CF |
| 处理器控制 | CLD | DF←0 |
|
| STD | DF←1 |
|
| CLI | IF←0 |
|
| STI | IF←1 |
|
| NOP | 空操作指令 |
|
| WAIT | 等待指令 |
|
| HLT | 停机指令 |
|
| LOCK | 封锁前缀 |
|
| SEG: | 段超越前缀 |
|
| ESC i8,reg/mem | 交给浮点处理器的浮点指令 |
| 保护方式类指令 | 略 | 略 |
call [eax] 虚函数 寄存器间接寻址
mov ax,[di+06] 用于结构体
基址变址寻址
栈为函数服务
1227

被折叠的 条评论
为什么被折叠?



