目录
指令汇总
1、数据传送指令
1.1、传送指令
| 指令的语法 |
举例 |
周期数 |
| MOV reg,reg |
mov bp,sp |
1 |
| MOV mem,reg |
mov array[di],bx |
1 |
| MOV reg,mem |
mov bx,pointer |
1 |
| MOV mem,immed |
mov [bx],15 |
1 |
| MOV reg,immed |
mov cx,256 |
1 |
| MOV mem,accum |
mov total,ax |
1 |
| MOV accum,mem |
mov al,string |
1 |
| MOV segreg,reg16 |
mov ds,ax |
2, 3 |
| MOV segreg,mem16 |
mov es,psp |
2, 3 |
| MOV reg16,segreg |
mov ax,ds |
1 |
| MOV mem16,segreg |
mov stack_save,ss |
1 |
| MOV reg32,controlreg |
mov eax,cr0 |
22 |
| mov eax,cr2 |
12 |
|
| mov eax,cr3 |
21, 46 |
|
| mov eax,cr4 |
14 |
|
| MOV controlreg,reg32 |
mov cr0,eax |
4 |
| MOV reg32,debugreg |
mov edx,dr0 |
DR0-DR3, DR6,DR7=11 |
| DR4,DR5=12 |
||
| MOV debugreg,reg32 |
mov dr0,ecx |
DR0-DR3, |
| DR4,DR5=12 DR6,DR7=11 |
1.2、传送-填充指令
| MOVSX reg,reg |
movsx bx,al |
3 |
| MOVSX reg,mem |
movsx eax,bsign |
3 |
| MOVZX reg,reg |
movzx bx,al |
3 |
| MOVZX reg,mem |
movzx eax,bunsign |
3 |
1.3、交换指令
| XCHG reg,reg |
xchg cx,dx |
3 |
| XCHG reg,mem |
xchg bx,pointer |
3 |
| XCHG mem,reg |
xchg [bx],ax |
3 |
| XCHG accum,reg |
xchg ax,cx |
2 |
| XCHG reg,accum |
xchg cx,ax |
2 |
1.4、取段地址和有效地址指令
| LDS reg,mem |
lds si,fpointer |
4 |
| LES reg,mem |
les di,fpointer |
4 |
| LFS reg,mem |
lfs edi,fpointer |
4 |
| LGS reg,mem |
lgs bx,fpointer |
4 |
| LSS reg,mem |
lss bp, fpointer |
4, pm=8 |
| LEA reg,mem |
lea bx,npointer |
1 |
1.5、进栈指令
| PUSH reg |
push dx |
1 |
| PUSH mem |
push [di] |
2 |
| PUSH segreg |
push es |
1 |
| PUSH immed |
push 15000 |
1 |
| PUSHA |
pusha |
5 |
| PUSHAD |
pushad |
5 |
| PUSHF |
pushf |
4, pm=3 |
| PUSHFD |
pushfd |
4, pm=3 |
1.6、出栈指令
| POP reg |
pop cx |
1 |
| POP mem |
pop param |
3 |
| POP segreg |
pop es |
3 |
| POPA |
popa |
5 |
| POPAD |
popad |
5 |
| POPF |
popf |
6, pm=4 |
| POPFD |
popfd |
6, pm=4 |
1.7、转换指令
| XLAT [[segreg:]mem] |
xlat |
4 |
| XLATB [[segreg:]mem] |
xlatb es:table |
4 |
1.8、输入指令
| IN accum,immed |
in ax,60h |
7, pm=4,21*(注), vm=19 |
| IN accum,DX |
in ax,dx |
7, pm=4,21*, vm=19 |
| INS [ES:]dest, DX |
ins es:instr,dx |
9, pm=6,24*, vm=22 |
| INSB |
Insb |
9, pm=6,24*, vm=22 |
| INSW |
Insw |
9, pm=6,24*, vm=22 |
| INSD |
Insd |
9, pm=6,24*, vm=22 |
注:当CPL≤IOPL时,执行时间是第一个时钟周期,否则是第二个时钟周期。
1.9、输出指令
| OUT immed8,accum |
out 60h,al |
12, pm=9,26, VM=24 |
| OUT DX,accum |
out dx,ax |
12, pm=9,25 VM=24 |
| OUTS DX,[segreg:]src |
outs dx,buffer |
13, pm=10,27, VM=24 |
| OUTSB [DX,[segreg:]src] |
outsb |
13, pm=10,27, VM=24 |
| OUTSW [DX,[segreg:]src] |
outsw |
13, pm=10,27, VM=24 |
| OUTSD [DX,[segreg:]src] |
outsd |
13, pm=10,27, VM=24 |
2、标志位操作指令
2.1、标志位操作指令
| 指令的语法 |
举例 |
周期数 |
| CLC |
clc |
2 |
| CMC |
cmc |
2 |
| STC |
stc |
2 |
| CLD |
cld |
2 |
| STD |
std |
2 |
| CLI |
cli |
7 |
| STI |
sti |
7 |
2.2、标志位存取操作指令
| SAHF |
Sahf |
2 |
| LAHF |
lahf |
2 |
2.3、标志位堆栈操作指令
| PUSHF |
pushf |
4, pm=3 |
| PUSHFD |
pushfd |
4, pm=3 |
| POPF |
popf |
6, pm=4 |
| POPFD |
popfd |
6, pm=4 |
3、算术运算指令
3.1、加法指令
| 指令的语法 |
举例 |
周期数 |
| ADC reg,reg |
adc dx,cx |
1 |
| ADC mem,reg |
adc word ptr m16[2],dx |
3 |
| ADC reg,mem |
adc dx,dword ptr m32[2] |
2 |
| ADD reg,reg |
add ax,bx |
1 |
| ADD mem,reg |
add total, cx |
3 |
| ADD reg,mem |
add cx,incr |
2 |
| ADD reg,immed |
add bx,6 |
1 |
| ADD mem,immed |
add pointers[bx][si],6 |
3 |
| ADD accum,immed |
add ax,10 |
1 |
| INC reg |
inc bx |
1 |
| INC mem |
inc vpage |
3 |
| XADD reg,reg |
xadd dl,al |
3 |
| XADD mem,reg |
xadd string,bl |
4 |
3.2、减法指令
| SUB reg,reg |
sub ax,bx |
1 |
| SUB mem,reg |
sub array[di],bi |
3 |
| SUB reg,mem |
sub al,[bx] |
2 |
| SUB reg,immed |
sub bl,7 |
1 |
| SUB mem,immed |
sub total,4000 |
3 |
| SUB accum,immed |
sub ax,32000 |
1 |
| SBB accum,immed |
sbb ax,320 |
1 |
| SBB reg,immed |
sbb dx,45 |
1 |
| SBB mem,immed |
sbb word ptr m32[2],40 |
3 |
| SBB reg,reg |
sbb dx,cx |
1 |
| SBB mem,reg |
sbb word ptr m32[2],dx |
3 |
| SBB reg,mem |
sbb dx,word ptr m32[2] |
2 |
| DEC reg |
dec ax |
1 |
| DEC mem |
dec counter |
3 |
| NEG reg |
neg ax |
1 |
| NEG mem |
neg balance |
3 |
3.3、乘法指令
| MUL reg |
mul bx |
|
| MUL memX |
mul word ptr [bx] |
8,16-bit=11 |
| 32-bit=10 |
||
| IMUL reg |
imul dx |
11 |
| IMUL mem |
imul factor |
11 |
| IMUL reg,immed |
imul cx,25 |
10 |
| IMUL reg,reg,immed |
imul dx,ax,18 |
10 |
| IMUL reg,mem,immed |
imul bx,[si],60 |
10 |
| IMUL reg,reg |
imul cx,ax |
10 |
| IMUL reg,mem |
imul dx,[si] |
10 |
3.4、除法指令
| DIV reg |
div cx |
byte=17 word=25 |
| DIV mem |
div [bx] |
dword=41 |
| IDIV reg |
idiv dl |
8-bit=22;16-bit=30 |
| IDIV mem |
idiv itemp |
32-bit=46 |
3.5、类型转换指令
| CBW |
cbw |
3 |
| CWD |
cwd |
2 |
| CWDE |
cwde |
3 |
| CDQ |
cdq |
2 |
4、逻辑运算指令
4.1、逻辑与操作指令
| 指令的语法 |
举例 |
周期数 |
| AND reg,reg |
and dx,bx |
1 |
| AND mem,reg |
and bitmask,bx |
3 |
| AND reg,mem |
and bx,masker |
2 |
| AND reg,immed |
and dx,0F7h |
1 |
| AND mem,immed |
and masker,100lb |
3 |
| AND accum,immed |
and ax,0B6h |
1 |
4.2、逻辑与操作指令
| OR reg,reg |
or ax,dx |
1 |
| OR mem,reg |
or bits,dx |
3 |
| OR reg,mem |
or dx,color[di] |
2 |
| OR reg,immed |
or dx,110110b |
1 |
| OR mem,immed |
or flag_rec,8 |
3 |
| OR accum,immed |
or ax,40h |
1 |
4.3、逻辑与操作指令
| NOT reg |
not ax |
1 |
| NOT mem |
not masker |
3 |
4.4、逻辑异或操作指令
| XOR reg,reg |
xor cx,bx |
1 |
| XOR reg,mem |
xor cx,flags |
2 |
| XOR mem,reg |
xor [bp+10],cx |
3 |
| XOR reg,immed |
xor bl,1 |
1 |
| XOR mem,immed |
xor switches[bx],101b |
3 |
| XOR accum,immed |
xor ax,01010101b |
1 |
5、移位操作指令
5.1、算术左移指令
| 指令的语法 |
举例 |
周期数 |
| SAL reg,1 |
sal bx,1 |
1 |
| SAL mem,1 |
sal word ptr m32[0],1 |
3 |
| SAL reg,CL |
sal ah,cl |
4 |
| SAL mem,CL |
sal BYTE PTR [di],cl |
4 |
| SAL reg,immed |
sal cx,6 |
1 |
| SAL mem,immed |
sal array[bx+di],14 |
3 |
5.2、算术右移指令
| SAR reg,1 |
sar di,1 |
1 |
| SAR mem,1 |
sar count,1 |
3 |
| SAR reg,CL |
sar bx,cl |
4 |
| SAR mem,CL |
sar sign,cl |
4 |
| SAR reg,immed |
sar bx,5 |
1 |
| SAR mem,immed |
sar sign_count,3 |
3 |
5.3、逻辑左移指令
| SHL reg,1 |
shl si,1 |
1 |
| SHL mem,1 |
shl index,1 |
3 |
| SHL reg,CL |
shl di,cl |
4 |
| SHL mem,CL |
shl index,cl |
4 |
| SHL reg,immed |
shl di,2 |
1 |
| SHL mem,immed |
shl unsign,4 |
3 |
5.4、逻辑右移指令
| SHR reg,1 |
shr dh,1 |
1 |
| SHR mem,1 |
shr unsign[di],1 |
3 |
| SHR reg,CL |
shr dx,cl |
4 |
| SHR mem,CL |
shr word ptr m32[2],cl |
4 |
| SHR reg,immed |
shr bx,8 |
1 |
| SHR mem,immed |
shr mem16,11 |
3 |
5.5、双精度左移指令
| SHLD reg16,reg16,immed8 |
shld ax,dx,10 |
4 |
| SHLD reg32,reg32,immed8 |
||
| SHLD mem16,reg16,immed8 |
shld bits,cx,5 |
4 |
| SHLD mem32,reg32,immed8 |
||
| SHLD reg16,reg16,CL |
shld ax,dx,cl |
4 |
| SHLD reg32,reg32,CL |
||
| SHLD mem16,reg16,CL |
shld masker,ax,cl |
5 |
| SHLD mem32,reg32,CL |
5.6、双精度右移指令
| SHRD reg16,reg16,immed8 |
shrd cx,si,3 |
4 |
| SHRD reg32,reg32,immed8 |
|
|
| SHRD mem16,reg16,immed8 |
shrd [di],dx,5 |
4 |
| SHRD mem32,reg32,immed8 |
|
|
| SHRD reg16,reg16,CL |
shrd ax,dx,cl |
4 |
| SHRD reg32,reg32,CL |
|
|
| SHRD mem16,reg16,CL |
shrd [bx],ax,cl |
5 |
| SHRD mem32,reg32,CL |
|
|
5.7、循环左移指令
| 指令的语法 |
举例 |
周期数 |
| ROL reg,1 |
rol ax,1 |
1 |
| ROL mem,1 |
rol bits,1 |
3 |
| ROL reg,CL |
rol ax,cl |
4 |
| ROL mem,CL |
rol color,cl |
4 |
| ROL reg,immed8 |
rol ax,13 |
1 |
| ROL mem,immed8 |
rol byte ptr [bx],10 |
3 |
5.8、循环右移指令
| ROR reg,1 |
ror ax,1 |
1 |
| ROR mem,1 |
ror word ptr [bx],1 |
3 |
| ROR reg,CL |
ror dx,cl |
4 |
| ROR mem,CL |
ror color,cl |
5 |
| ROR reg,immed8 |
ror bl,3 |
1 |
| ROR mem,immed8 |
ror bits,6 |
3 |
5.9、带进位的循环左移指令
| RCL reg,1 |
rcl dx,1 |
1 |
| RCL mem,1 |
rcl WORD PTR [si],1 |
3 |
| RCL reg,CL |
rcl dx,cl |
7-24 |
| RCL mem,CL |
rcl masker,cl |
9-26 |
| RCL reg,immed8 |
rcl bx,5 |
8-25 |
| RCL mem,immed8 |
rcl word ptr [bp+8],3 |
10-27 |
5.10、带进位的循环右移指令
| RCR reg,1 |
rcr bl,1 |
1 |
| RCR mem,1 |
rcr word ptr m32[0],1 |
3 |
| RCR reg,CL |
rcr bl,cl |
7-24 |
| RCR mem,CL |
rcl word ptr [bx=di],cl |
9-26 |
| RCR reg,immed8 |
rcr si,9 |
8-25 |
| RCR mem,immed8 |
rcr masker,3 |
10-27 |
6、位操作指令
6.1、正向位扫描指令
| 指令的语法 |
举例 |
周期数 |
| BSF reg16,reg16 |
bsf cx,bx |
6-34 |
| BSF reg32,reg32 |
bsf cx,bx |
6-42 |
| BSF reg16,mem16 |
bsf ecx,bitmask |
6-35 |
| BSF reg32,mem32 |
bsf ecx,bitmask |
6-43 |
6.2、正向位扫描指令
| BSR reg16,reg16 |
bsr cx,dx |
7-39 |
| BSR reg32,reg32 |
bsr ecx, edx |
7-71 |
| BSR reg16,mem16 |
bsr ax,bitmask |
7-40 |
| BSR reg32,mem32 |
bsr eax,bitmask |
7-72 |
6.3、正向位扫描指令
| BT reg16,immed8*(注) |
bt ax,4 |
4 |
| BT mem16,immed8 |
bt [bx],4 |
4 |
| BT reg16,reg16 |
bt ax,bx |
4 |
| BT mem16,reg16 |
bt [bx],dx |
9 |
(注) 操作数也可以是32位数。
6.4、正向位扫描指令
| BTC reg16,immed8* |
btc edi,4 |
7 |
| BTC mem16,immed8* |
btc color[di],4 |
8 |
| BTC reg16,reg16* |
btc eax,ebx |
7 |
| BTC mem16,reg16* |
btc [bp+8],si |
13 |
6.5、正向位扫描指令
| BTR reg16,immed8* |
btr bx,17 |
7 |
| BTR mem16,immed8* |
btr [bx],27 |
8 |
| BTR reg16,reg16* |
btr cx,di |
7 |
| BTR mem16,reg16* |
btr rotate,cx |
13 |
6.6、正向位扫描指令
| BTS reg16,immed8* |
bts ax,4 |
7 |
| BTS mem16,immed8* |
bts maskit,4 |
8 |
| BTS reg16,reg16* |
bts bx,ax |
7 |
| BTS mem16,reg16* |
bts flags[bx],cx |
13 |
6.7、正向位扫描指令
| TEST reg,reg |
test dx,bx |
1 |
| TEST mem,reg |
test flags,dx |
2 |
| TEST reg,immed |
test cx,30h |
1 |
| TEST mem,immed |
test masker,1 |
2 |
| TEST accum,immed |
test ax,90h |
1 |
7、比较运算指令
7.1、比较指令
| 指令的语法 |
举例 |
周期数 |
| CMP reg,reg |
cmp dl,cl |
1 |
| CMP mem,reg |
cmp array[si],bl |
2 |
| CMP reg,mem |
cmp bh,array[si] |
2 |
| CMP reg,immed |
cmp bx,24 |
1 |
| CMP mem,immed |
cmp tester,4000 |
2 |
| CMP accum,immed |
cmp ax,1000 |
1 |
7.2、比较交换指令
| CMPXCHG mem,reg |
cmpxchg string,bl |
6 |
| CMPXCHG reg,reg |
cmpxchg bx,cx |
6 |
| CMPXCHG8B reg,mem64 |
cmpxchg8b ax,[bx] |
10 |
8、循环指令
8.1、循环指令
| LOOP label |
loop wend |
5, 6 |
| LOOPE label |
loope again |
7, 8 |
| LOOPZ label |
loopz again |
7, 8 |
| LOOPNE label |
loopne for_next |
7, 8 |
| LOOPNZ label |
loopnz for_next |
7, 8 |
8.2、循环指令
| JCXZ label |
jcxz notfound |
6,5 |
| JECXZ label |
jecxz notfound |
6,5 |
9、转移指令
9.1、无条件转移指令
| 指令的语法 |
举例 |
周期数 |
| JMP label |
jmp NEAR PTR distant |
1 |
| jmp distant |
3 |
|
| JMP reg16 |
jmp ax |
2 |
| JMP mem16 |
jmp table[di] |
2 |
| JMP reg32 |
jmp eax |
3 |
| JMP mem32 |
jmp fpointer[si] |
2 |
| JMP mem48 |
jmp FWORD PTR [di] |
4 |
9.2、条件转移指令
| Jcondition label |
je next |
1 |
9.3、子程序调用指令
| CALL label |
call upcase |
1 |
| call distant |
4 |
|
| CALL reg |
call ax |
2 |
| CALL mem32 |
call [bx] |
2 |
| CALL mem32 |
call dword ptr [bx] |
5 |
9.4、子程序返回指令
| RETN |
retn |
2 |
| RETN immed16 |
retn 8 |
3 |
| RETF |
retf |
4, 23 |
| RETF immed16 |
retf 32 |
4, 23 |
9.5、中断指令
| INT immed8 |
int 25h |
16, pm=31, 48*(注) |
| INT 3 |
int 3 |
13, pm=27, 44* |
| INTO |
Into |
13, pm=27, 44* |
注:第一时间是同等优先级的中断时间,第二时间为高优先级的中断时间。
9.6、中断返回指令
| IRET |
Iret |
8*(注),10, pm=27 |
| IRETD |
Iretd |
10, pm=27 |
| IRETF |
Iretf |
|
| IRETDF |
Iretdf |
|
10、条件设置字节指令
| SETcondition reg8 |
setc dh |
1 |
| SETcondition mem8 |
setle flag |
2 |
11、字符串操作指令
11.1、取字符串数据指令
| 指令的语法 |
举例 |
周期数 |
| LODS [segreg:]src |
lods es:source |
2 |
| LODSB [[segreg:]src] |
Lodsb |
2 |
| LODSW [[segreg:]src] |
Lodsw |
2 |
| LODSD [[segreg:]src] |
Lodsd |
2 |
11.2、置字符串数据指令
| STOS [ES:]dest |
stor es:dstring |
3 |
| STOSB [[ES:]dest] |
stosb |
3 |
| STOSW [[ES:]dest] |
stosw |
3 |
| STOSD [[ES:]dest] |
stosd |
3 |
11.3、字符串传送指令
| MOVS [es:]dest, [segreg:]src |
movs dest,es:source |
4 |
| MOVSB [[es:]dest, [segreg:]src] |
movsb |
4 |
| MOVSW [[es:]dest, [segreg:]src] |
movsw |
4 |
| MOVSD [[es:]dest, [segreg:]src] |
movsd |
4 |
11.4、输入字符串指令
| INS [ES:]dest, DX |
ins es:instr,dx |
9, pm=6,24*, vm=22 |
| INSB |
Insb |
9, pm=6,24*, vm=22 |
| INSW |
Insw |
9, pm=6,24*, vm=22 |
| INSD |
Insd |
9, pm=6,24*, vm=22 |
11.5、输出字符串指令
| OUTS DX,[segreg:]src |
outs dx,buffer |
13, pm=10,27, VM=24 |
| OUTSB [DX,[segreg:]src] |
outsb |
13, pm=10,27, VM=24 |
| OUTSW [DX,[segreg:]src] |
outsw |
13, pm=10,27, VM=24 |
| OUTSD [DX,[segreg:]src] |
outsd |
13, pm=10,27, VM=24 |
11.6、字符串比较指令
| CMPS [segreg:] src, [ES:]dest |
cmps source,es:dest |
5 |
| CMPSB [[segreg:[src,] ES:] dest] |
cmpsb |
5 |
| CMPSW [[segreg:[src,] ES:]dest] |
cmpsw |
5 |
| CMPSD [[segreg:[src,] ES:] dest] |
cmpsd |
5 |
11.7、字符串扫描指令
| SCAS [ES]:dest |
scas es:destin |
4 |
| SCASB |
Scasb |
4 |
| SCASW |
Scasw |
4 |
| SCASD |
Scasd |
4 |
11.8、重复前缀指令
| REP INS dest,DX |
rep ins dest,dx |
11+3n, pm=(8,25)+3n* |
| REP MOVS dest,src |
rep movs dest,source |
6, 13n |
| REP OUTS DX,src |
rep outs dx,source |
13+4n, pm=(10,27)+4n* |
| REP LODS dest |
rep lods dest |
7, 7+3n |
| REP STOS dest |
rep stos dest |
6, 9+3n |
注:当CPL≤IOPL时,执行时间是第一个时钟周期,否则是第二个时钟周期。
11.9、相等重复前缀指令
| REPE CMPS src,dest |
repe cmps src,dest |
7, 9+4n |
| REPE SCAS dest |
repe scas dest |
7, 9+4n |
11.10、不相等重复前缀指令
| REPNE CMPS src,dest |
repne cmps src,dest |
7, 8+4n |
| REPNE SCAS dest |
repne scas dest |
7, 9+4n |
12、ASCII-BCD码运算调整指令
| 指令的语法 |
举例 |
周期数 |
| AAA |
aaa |
3 |
| AAD |
aad |
10 |
| AAM |
aam |
18 |
| AAS |
aas |
3 |
| DAA |
daa |
3 |
| DAS |
das |
3 |
13、处理器指令
14、协处理器指令
| 指令的语法 |
举例 |
周期数 |
| FBLD membcd | fbld packbck | 48-58 |
| FBSTP membcd | fbstp bcds[bx] | 148-154 |
| FLD reg | fld st(3) | 1 |
| FLD mem32real | fld longreal | 1 |
| FLD mem64real | 1 | |
| FLD mem80real | 3 | |
| FST reg | fst st | 1 |
| FST memreal | fst longs[bx] | 2 |
| FSTP reg | fstp st(3) | 1 |
| FSTP mem32real | fstp longreal | 2 |
| FSTP mem64real | 2 | |
| FSTP mem80real | 3 | |
| FXCH [reg] | fxchg st(3) | 1 |
| FILD memint | fild quads[si] | 3, 1 |
| FIST memint | fist doubles[8] | 6 |
| FISTP memint | fistp longint | 6 |
