x86汇编指令集一共有106条指令数。
No | 指令类型 | 指令功能 | 指令 | 指令用法 |
1 | 数据传输指令 | 通用数据传送 | mov | 传送 |
2 | PUSH | 入堆栈 | ||
3 | POP | 出堆栈 | ||
4 | 输入输出端口传送 | IN | I/O端口输入 | |
5 | OUT | I/O端口输出 | ||
6 | 目的地址传送 | LEA | 装入有效地址 | |
7 | LDS | 传送目标指针 | ||
8 | LES | |||
9 | LFS | |||
10 | LGS | |||
11 | LSS | |||
12 | 标志传送 | LAHF SAHF | 标志寄存器传送 | |
13 | PUSHF | 标志入栈 | ||
14 | POPF | 标志出栈 | ||
15 | PUSHD | 32位标志入栈 | ||
16 | POPD | 32位标志出栈 | ||
17 | 算术运算指令 | 算数运算 | ADD | 加法 |
18 | ADC | 带进位加法 | ||
19 | INC | 加1 | ||
20 | AAA | 加法的ASCII码调整 | ||
21 | DAA | 加法的十进制调整 | ||
22 | SUB | 减法 | ||
23 | SBB | 带借位减法 | ||
24 | DEC | 减 1 | ||
25 | NEG | 求反(以0 减之) | ||
26 | CMP | 比较 | ||
27 | AAS | 减法的ASCII码调整 | ||
28 | DAS | 减法的十进制调整 | ||
29 | MUL | 无符号乘法.结果回送AH和AL(字节运算),或DX和AX(字运算) | ||
30 | IMUL | 整数乘法.结果回送AH和AL(字节运算),或DX和AX(字运算) | ||
31 | AAM | 乘法的ASCII码调整 | ||
32 | DIV | 无符号除法.结果回送:商回送AL,余数回送AH, (字节运算);或 商回送AX,余数回送DX, (字运算) | ||
33 | IDIV | 整数除法.结果回送:商回送AL,余数回送AH, (字节运算);或 商回送AX,余数回送DX, (字运算) | ||
34 | AAD | 除法的ASCII码调整 | ||
35 | CBW | 字节转换为字. (把AL中字节的符号扩展到AH中去) | ||
36 | CWD | 字转换为双字. (把AX中的字的符号扩展到DX中去) | ||
37 | CWDE | 字转换为双字. (把AX中的字符号扩展到EAX中去) | ||
38 | CDQ | 双字扩展. (把EAX中的字的符号扩展到EDX中去) | ||
39 | 逻辑运算指令 | 逻辑运算 | AND | 与运算 |
40 | OR | 或运算 | ||
41 | XOR | 异或运算 | ||
42 | NOT | 取反 | ||
43 | TEST | 测试 | ||
44 | SHL | 逻辑左移 | ||
45 | SAL | 算术左移 | ||
46 | SHR | 逻辑右移 | ||
47 | SAR | 算术右移 | ||
48 | ROL | 循环左移 | ||
49 | ROR | 循环右移 | ||
50 | RCL | 通过进位的循环左移 | ||
51 | RCR | 通过进位的循环右移 | ||
52 | 串指令 | DS:SI | 源串段寄存器 | |
53 | ES:DI | 目标串段寄存器 | ||
54 | CX | 重复次数计数器 | ||
55 | AL/AX | 扫描值 | ||
56 | DF | 0表示重复操作中SI和DI应自动增量; 1表示应自动减量 | ||
57 | ZF | 用来控制扫描或比较操作的结束 | ||
58 | MOVS | 串传送(MOVSB 传送字符 MOVSW 传送字 MOVSD 传送双字 ) | ||
59 | CMPS | 串比较(CMPSB 比较字符 CMPSW 比较字 ) | ||
60 | SCAS | 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位 | ||
61 | LODS | 装入串 | ||
62 | STOS | 保存串.是LODS的逆过程 | ||
63 | REP | 当CX/ECX<>0时重复 | ||
64 | REPE/REPZ | 当ZF=1或比较结果相等,且CX/ECX<>0时重复 | ||
65 | REPNE/REPNZ | 当ZF=0或比较结果不相等,且CX/ECX<>0时重复 REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复 REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复 | ||
66 | REPC | 当CF=1且CX/ECX<>0时重复 | ||
67 | REPNC | 当CF=0且CX/ECX<>0时重复 | ||
68 | 程序转移指令 | 无条件转移指令 (长转移) | JMP | 无条件转移指令 |
69 | CALL | 过程调用 | ||
70 | RET/RETF | 过程返回 | ||
71 | 条件转移指令 | JE/JZ | 等于转移 | |
72 | JNE/JNZ | 不等于时转移 | ||
73 | JA/JNBE | 不小于或不等于时转移 | ||
74 | JAE/JNB | 大于或等于转移 | ||
75 | JB/JNAE | 小于转移 | ||
76 | JBE/JNA | 小于或等于转移 | ||
77 | JG/JNLE | 大于转移 | ||
78 | JGE/JNL | 大于或等于转移 | ||
79 | JL/JNGE | 小于转移 | ||
80 | JLE/JNG | 小于或等于转移 | ||
81 | JC | 有进位时转移 | ||
82 | JNC | 无进位时转移 | ||
83 | JNO | 不溢出时转移 | ||
84 | JNP/JPO | 奇偶性为奇数时转移 | ||
85 | JNS | 符号位为 "0" 时转移 | ||
86 | JO | 溢出转移 | ||
87 | JP/JPE | 奇偶性为偶数时转移 | ||
88 | JS | 符号位为 "1" 时转移 | ||
89 | 循环控制指令 | LOOPCX | 不为零时循环 | |
90 | LOOPE/LOOPZ | CX不为零且标志Z=1时循环 | ||
91 | LOOPNE/LOOPNZ | CX不为零且标志Z=0时循环 | ||
92 | JCXZ | CX为零时转移 | ||
93 | JECXZ | ECX为零时转移 | ||
94 | 中断指令 | INT | 中断指令 | |
95 | INTO | 溢出中断 | ||
96 | IRET | 中断返回 | ||
97 | 处理器控制指令 | HLT | 处理器暂停, 直到出现中断或复位信号才继续 | |
98 | WAIT | 当芯片引线TEST为高电平时使CPU进入等待状态 | ||
99 | ESC | 转换到外处理器 | ||
100 | LOCK | 封锁总线 | ||
101 | NOP | 空操作 | ||
102 | STC | 置进位标志位 | ||
103 | CLC | 清进位标志位 | ||
104 | CMC | 进位标志取反 | ||
105 | STD | 置方向标志位 | ||
106 | CLD | 清方向标志位 | ||
107 | STI | 置中断允许位 | ||
108 | CLI | 清中断允许位 | ||
109 | 伪指令 | DW | 定义字(2字节) | |
110 | PROC | 定义过程 | ||
111 | ENDP | 过程结束 | ||
112 | SEGMENT | 定义段 | ||
113 | ASSUME | 建立段寄存器寻址 | ||
114 | ENDS | 段结束 | ||
115 | END | 程序结束 | ||
116 | 处理机控制指令 | CLC | 进位位置0指令 | |
117 | CMC | 进位位求反指令 | ||
118 | STC | 进位位置为1指令 | ||
119 | CLD | 方向标志置1指令 | ||
120 | STD | 方向标志位置1指令 | ||
121 | CLI | 中断标志置0指令 | ||
122 | STI | 中断标志置1指令 | ||
123 | NOP | 无操作 | ||
124 | HLT | 停机 | ||
125 | WAIT | 等待 | ||
126 | ESC | 换码 | ||
127 | LOCK | 封锁 |