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