汇编语言从入门到精通-指令汇总

时间:2021-02-21 01:10:15

目录

1、数据传送指令

2、标志位操作指令

3、算术运算指令

4、逻辑运算指令

5、移位操作指令

6、位操作指令

7、比较运算指令

8、循环指令

9、转移指令

10、条件设置字节指令

11、字符串操作指令

12、ASCII-BCD码运算调整指令

13、处理器指令

14、协处理器指令

 

指令汇总

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、处理器指令

HLT

Hlt

12

NOP

nop

1

WAIT

wait

1

LOCK

lock

1

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