全面掌握汇编语言:由入门到精通的指令集指南
指令汇总
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 |
上一篇: 玩转机器学习:数据清理中的异常值检测技巧 下一篇: 了解计算机 |
---|