
1.串传送指令

D为方向 标志(Direction Flag):
D=1 ,串操作时地址自动减量 , 指令 STD
D=0 ,串操作时地址自动增量。 指令 CLD
(1)字节串传送指令 MOVSB

常用于把某一内存缓冲区中内容复制到另一个缓冲区中
(2)字串传送指令 MOVSW

*MOVS = MOVSB或MOVSW
(3)重复前缀指令 REP MOVSB
REP MOVSW
;重复执行MOVS,直至CX = 0,每执行一次MOVS时,CX<-- CX – 1 ,

CX≠ 0(计数没结束)时循环
MOVS = MOVSB或MOVSW
例1: 将数据段中起始地址为Souce的100个字节的数据传送到附加段的Dest指向的单元中。

MOVSB执行过程

例1-1: 字传送

MOVSW执行过程

例2:与 REP 指令配合传送100个数。

REP MOVSB执行过程

2.串比较指令

D为方向 标志(Direction Flag):
D=1 ,串操作时地址自动减量 , 指令 STD;D=0 ,串操作时地址自动增量。指令 CLD
REPE和REPZ 是同一条指令的两种不同表示形式。
REPNE和REPNZ 是同一条指令的两种不同表示形式。
(1)字节串比较指令 CMPSB

常用于在比较两个内存缓冲区中的数据
(2)字串比较指令 CMPSW

*CMPS = CMPSB或CMPSW
(3)当相等/为零重复前缀指令
REPE/REPZ CMPSB
REPE/REPZ CMPSW
;重复 CMPSB 或CMPSW 的操作,直到 CX =0 或 Z=0,每执行一次CMPS时,CX<-- CX – 1。

- CX≠ 0(计数没结束) 且 Z=1(两数相等)时循环,
- CMPS = CMPSB或CMPSW
(4)当不相等/不为零重复前缀指令
REPNE/REPNZ CMPSB
REPNE/REPNZ CMPSW
;重复 CMPSB 或 CMPSW 的操作,直到 CX =0 或 Z=1,每执行一次CMPS时,CX<-- CX – 1。

- CX≠ 0(计数没结束) 且 Z=0(两数不相等)时循环,
- CMPS = CMPSB或CMPSW
例3:在内存的DS和ES段中,各有长度为50字节的字符串,试比较它们是否相同。

例3-1:字比较。

例3-2:在内存的DS和ES段中,各有长度为50字节的字符串,试比较它们是否相同。( 与 Repe / Repz 配合使用)

例3-2:在内存的DS和ES段中,各有长度为50字节的字符串,试比较它们是否相同。( 与 Repne / Repnz 配合使用)

3.串扫描指令

D为方向 标志(Direction Flag):
D=1 ,串操作时地址自动减量 , 指令 STD;D=0 ,串操作时地址自动增量。指令 CLD
REPE和REPZ 是同一条指令的两种不同表示形式。
REPNE和REPNZ 是同一条指令的两种不同表示形式。
(1)字节串扫描指令 SCASB
![]()
常用于在某一内存缓冲区中找指定字符
(2)字串扫描指令 SCASW

SCAS = SCASB或SCASW
(3)当相等/为零重复前缀指令
REPE/REPZ SCASB
REPE/REPZ SCASW
;重复 SCASB 或SCASW 的操作,直到 CX =0 或 Z=0,每执行一次SCAS时,CX<-- CX – 1。

- CX≠ 0(计数没结束) 且 Z=1(两数相等)时循环,
- SCAS = SCASB或SCASW
(4)当不相等/不为零重复前缀指令
REPNE/REPNZ SCASB
REPNE/REPNZ SCASW
;重复 SCASB 或SCASW 的操作,直到 CX =0 或 Z=1,每执行一次SCAS时,CX<-- CX – 1。

- CX≠ 0(计数没结束) 且 Z=0(两数不相等)时循环,
- SCAS = SCASB或SCASW
例4:寻找字符串中是否有字符 ‘A’ 。

例4-1:寻找字符串中是否有字符 ‘A’ 。

例4-2:寻找字符串中是否有字符 ‘A’ 。与 Repe / Repz , Repne / Repnz 配合使用。

4.写串指令(串存入指令)

D为方向 标志(Direction Flag):
D=1 ,串操作时地址自动减量 , 指令 STD;D=0 ,串操作时地址自动增量。指令 CLD
(1)写字节串指令 STOSB
![]()
常用于初始化某一内存缓冲区
(2)写字串指令 STOSW
![]()
STOS = STOSB或STOSW
(3)重复前缀指令 REP STOSB
REP STOSW
;重复执行STOS,直至CX = 0,每执行一次STOS时,CX<--CX – 1 ,

- CX≠ 0(计数没结束)时循环
- STOS = STOSB或STOSW
例5:初始化内存,使其内容全部位0。

例5-1:初始化内存,使其内容全部位0。

例5-2:初始化内存,使其内容全部位0。与 Rep 指令 配合使用。

5.读串指令(串装入指令)

本指令一般不与 REP 联用
D为方向 标志(Direction Flag):
D=1 ,串操作时地址自动减量 , 指令 STD;D=0 ,串操作时地址自动增量。指令 CLD
(1)读字节串指令 LODSB
![]()
适用于将内存中的一串字符逐一取出测试用。
(2)读字串指令 LODSW
![]()
LODS = LODSB或LODSW
例6:在数据段DS中有一字符串,试将其每一个字符加 1 后送入附加段ES中。

例6-1:在数据段DS中有一字符串,试将其每一个字加一后送入附加段ES中。


例8:在起始地址为Block的内存中有一数据块,其中有正数,也有负数,要求将正负数分开,分别送至同一段的两个区域 p_data和M_data中



