ITEEDU

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