第5节 串操作指令
推荐给好友
打印
加入收藏
更新于2009-06-01 10:44:25


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中。


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


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

 

 

上一节                    下一节

相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.