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