8086指令码汇总表(表格)
8086指令码汇总表
8086指令有汇编语言指令和指令码两种形式,汇编语言指令形式经过汇编程序处理后生成指令码形式。
通过指令码形式可以帮助理解汇编语言指令格式的含义和用法。
8086指令码格式
0B/1B |
1B/2B |
0B/1B |
0B/1B/2B/4B |
0B/1B/2B/4B |
指令前缀 |
操作码段 |
寻址方式段 |
偏移量参数 |
立即数参数 |
说明:偏移量参数和立即数参数的有无由寻址方式段决定;
- 传送类指令
MOV指令 |
|
|
|
|
REG/MEM→/←REG |
100010DW |
mod reg r/m |
|
|
IMME→REG/MEM |
1000111w |
mod 000 r/m |
data |
data if w=1 |
IMME→REG |
1011wreg |
data |
data if w=1 |
|
MEM→AX |
1010000w |
addr-low |
addr-high |
|
AX→MEM |
1010001w |
addr-low |
addr-high |
|
REG/MEM→段REG |
10001110 |
mod reg r/m |
|
|
段REG→REG/MEM |
10001100 |
mod reg r/m |
|
|
PUSH指令 |
|
|
|
|
REG/MEM |
11111111 |
mod 110 r/m |
|
|
REG |
01010reg |
|
|
|
段REG |
000reg110 |
|
|
|
POP指令 |
|
|
|
|
REG/MEM |
10001111 |
mod 000 r/m |
|
|
REG |
01011reg |
|
|
|
段REG |
000reg111 |
|
|
|
XCHG指令 |
|
|
|
|
REG/MEM←→REG |
1000011w |
mod reg r/m |
|
|
REG←→AX |
10010reg |
|
|
|
XLAT指令 |
11010111 |
|
|
|
LEA指令 |
10001101 |
mod reg r/m |
|
|
LDS指令 |
11000101 |
mod reg r/m |
|
|
LES指令 |
11000100 |
mod reg r/m |
|
|
LAHF指令 |
10011111 |
|
|
|
SAHF指令 |
10011110 |
|
|
|
PUSHF指令 |
10011100 |
|
|
|
POPF指令 |
10011101 |
|
|
|
IN指令 |
|
|
|
|
直接寻址 |
1110010w |
port |
|
|
间接寻址 |
1110110w |
|
|
|
OUT指令 |
|
|
|
|
直接寻址 |
1110011w |
port |
|
|
间接寻址 |
1110111w |
|
|
|
CBW指令 |
10011000 |
|
|
|
CWD指令 |
10011001 |
|
|
|
说明:d--0/1表示REG为源/目的操作数;
w--0/1表示操作数类型为BYTE/WORD;
mod、r/m--寻址方式;
IMME--立即操作数,字段中用data表示;
reg--通用REG用3位编码,段REG用2位编码;
- 算数运算类指令
ADD指令 |
|
|
|
|
REG/MEM+REG→任一 |
000000dw |
mod reg r/m |
|
|
REG/MEM+=IMME |
100000sw |
mod 000 r/m |
data |
data if sw=01 |
AX+=IMME |
0000010w |
data |
data if w=1 |
|
ADC指令 |
|
|
|
|
REG/MEM+REG→任一 |
000100dw |
mod reg r/m |
|
|
REG/MEM+=IMME |
100000sw |
mod 010 r/m |
data |
data if sw=01 |
AX+=IMME |
0001010w |
data |
data if w=1 |
|
INC指令 |
|
|
|
|
REG/MEM |
1111111w |
mod 000 r/m |
|
|
REG |
01000reg |
|
|
|
SUB指令 |
|
|
|
|
REG/MEM-REG→任一 |
001010dw |
mod reg r/m |
|
|
REG/MEM-=IMME |
100000sw |
mod reg r/m |
data |
data if sw=01 |
AX-=IMME |
0010110w |
data |
data if w=1 |
|
SBB指令 |
|
|
|
|
REG/MEM-REG→任一 |
000110dw |
mod reg r/m |
|
|
REG/MEM-=IMME |
100000sw |
mod 011 r/m |
data |
data if sw=01 |
AX-=IMME |
0001110w |
data |
data if w=1 |
|
DEC指令 |
|
|
|
|
REG/MEM |
11111111w |
mod 001 r/m |
|
|
REG |
01001reg |
|
|
|
NEG |
1111011w |
mod 011 r/m |
|
|
CMP指令 |
|
|
|
|
REG/MEM-REG |
001110dw |
mod reg r/m |
|
|
REG/MEM-IMME |
100000sw |
mod 111 r/m |
data |
data if sw=01 |
AX-IMME |
0011110w |
data |
data if w=1 |
|
MUL指令 |
1111011w |
mod 100 r/m |
|
|
IMUL指令 |
1111011w |
mod 101 r/m |
|
|
DIV指令 |
1111011w |
mod 110 r/m |
|
|
IDIV指令 |
1111011w |
mod 111 r/m |
|
|
AAA指令 |
00110111 |
|
|
|
DAA指令 |
00100111 |
|
|
|
AAS指令 |
00111111 |
|
|
|
DAS指令 |
00101111 |
|
|
|
AAM指令 |
11010100 |
00001010 |
|
|
AAD指令 |
11010101 |
00001010 |
|
|
说明:sw--01表示16位立即数,11表示8位立即数,操作时扩展成16位;
REG/MEM-REG--MEM可以为减数或被减数;
- 逻辑运算类指令
NOT指令 |
1111011w |
mod 010 r/m |
|
|
AND指令 |
|
|
|
|
REG/MEM®→任一 |
001000dw |
mod reg r/m |
|
|
REG/MEM&=IMME |
1000000w |
mod 100 r/m |
data |
data if w=1 |
AX&=IMME |
0010010w |
data |
data if w=1 |
|
OR |
|
|
|
|
REG/MEM|REG→任一 |
000010dw |
mod reg r/m |
|
|
REG/MEM|=IMME |
1000000w |
mod 001 r/m |
data |
data if w=1 |
AX|=IMME |
0000110w |
data |
data if w=1 |
|
TEST指令 |
|
|
|
|
RET/MEM® |
100010dw |
mod reg r/m |
|
|
REG/MEM&IMME |
1111011w |
mod 000 r/m |
data |
data if w=1 |
AX&IMME |
1010110w |
data |
data if w=1 |
|
SHL/SA/指令 |
110100vw |
mod 100 r/m |
|
|
SHR指令 |
110100vw |
mod 101 r/m |
|
|
SAR指令 |
110100vw |
mod 111 r/m |
|
|
POL指令 |
110100vw |
mod 000 r/m |
|
|
ROR指令 |
110100vw |
mod 001 r/m |
|
|
RCL指令 |
110100vw |
mod 010 r/m |
|
|
RCR指令 |
110100vw |
mod 011 r/m |
|
|
说明:v--0/1表示位移次数1/(CL)。
- 控制转移类指令
JMP指令 |
|
|
|
|
段内-直接短转移 |
11101011 |
disp |
|
|
段内-直接转移 |
11101001 |
disp-low |
disp-high |
|
段内-间接转移 |
11111111 |
mod 100 r/m |
|
|
段间-直接转移 |
11101010 |
offset-low |
offset-high |
seg-low seg-high |
段间-间接转移 |
11111111 |
mod 101 r/m |
|
|
JO指令 |
01110000 |
disp |
|
|
JNO指令 |
01110001 |
disp |
|
|
JC指令 |
01110010 |
disp |
|
|
JNC指令 |
01110011 |
disp |
|
|
JE/JZ指令 |
01110100 |
disp |
|
|
JNE/JNZ指令 |
01110101 |
disp |
|
|
JS指令 |
01111000 |
disp |
|
|
JNS指令 |
01111001 |
disp |
|
|
JP/JPE指令 |
01111010 |
disp |
|
|
JNP/JPO指令 |
01111011 |
disp |
|
|
JA/JNBE指令 |
01110111 |
disp |
|
|
JAE/JNB指令 |
01110011 |
disp |
|
|
JB/JNAE指令 |
01110010 |
disp |
|
|
JBE/JNA指令 |
01110110 |
disp |
|
|
JG/JNE指令 |
01111111 |
disp |
|
|
JGE/JNL指令 |
01111101 |
disp |
|
|
JL/JNGE指令 |
01111100 |
disp |
|
|
JLE/JNG指令 |
01111110 |
disp |
|
|
JCXZ指令 |
11100011 |
disp |
|
|
LOOP指令 |
11100010 |
disp |
|
|
LOOPZ/LOOPE指令 |
11100001 |
disp |
|
|
LOOPNZ/LOOPN指令 |
11100000 |
disp |
|
|
CALL指令 |
|
|
|
|
段内-直接 |
11101000 |
disp-low |
disp-high |
|
段内-间接 |
11111111 |
mod 010 r/m |
|
|
段间-直接 |
10011010 |
offset-low |
offset-high |
seg-low set-high |
段间-间接 |
11111111 |
mod 011 r/m |
|
|
RET指令 |
|
|
|
|
段内-返回 |
11000011 |
|
|
|
段内-加参数返回 |
11000010 |
data-low |
data-high |
|
段间-返回 |
11001011 |
|
|
|
段间-加参数返回 |
11001010 |
data-low |
data-high |
|
INT指令 |
|
|
|
|
常规中断 |
11001101 |
type |
|
|
3号中断 |
11001100 |
|
|
|
INTO指令 |
11001110 |
|
|
|
IRET指令 |
11001111 |
|
|
|
说明:JB/JNE--与JC指令相同;
JAE/JNB--与JNC指令相同;
type--中断类型号;
- 串操作类指令
REP指令 |
1111011z |
|
|
|
MOVS指令 |
1010010w |
|
|
|
CMPS指令 |
1010011w |
|
|
|
SCAS指令 |
1010111w |
|
|
|
LODS指令 |
1010110w |
|
|
|
STOS指令 |
1010101w |
|
|
|
说明:REP--z=0时为REPNE,z=1时为REP和REPZ,8086默认REP对应MOVS、STOS,REPZ对应CMPS、SCAS(比较两者与5条指令配合时的有效性);
- 处理器控制类指令
CLC指令 |
11111000 |
|
|
|
STC指令 |
11111001 |
|
|
|
CMC指令 |
11110101 |
|
|
|
CLI指令 |
11111010 |
|
|
|
STI指令 |
11111011 |
|
|
|
CLD指令 |
11111100 |
|
|
|
STD指令 |
11111101 |
|
|
|
NOP指令 |
10010000 |
|
|
|
HLT指令 |
11110100 |
|
|
|
WAIT指令 |
10011011 |
|
|
|
ESC指令 |
11011xxx |
mod xxx r/m |
|
|
LOCK指令 |
11110000 |
|
|
|
说明:x--可为任意值(0/1);