Pentium的指令系统(4)——串操作指令

通过加重复前缀,串操作指令可以实现对一串数据的操作。一条带重复前缀的串操作指令的执行过程往往相当于执行一个循环程序。在每次重复之后,都会自动修改地址指针ESI和EDI,如果在执行串操作指令的过程中,有一个外部中断进入,那么,在完成中断处理以后,将返回去执行串操作指令。

字符串传送指令MOVSB/MOVSW/MOVSD

字符串传送指令是唯一的源操作数和目的操作数都在存储器中的传送指令。
MOVSB/MOVSW/MOVSD指令将位于DS段由ESI(SI)所指的存储单元开始的字节、字或双字传送到位于ES段由EDI(DI)所指的存储单元开始的区域,再修改ESI和EDI,从而指向下一个元素。MOVSB用于传送字节,MOVSW用于传送字,MOVSD用于传送双字。
MOVSB/MOVSW/MOVSD指令前通常加重复前缀REP,以便实现字节串、字串和双字串的传输。
在这里插入图片描述
作用:
1.源地址为DS:1000H
2.目的地址为ES;2000H
3.字符串长100字节
4.方向标志清0,使地址指针按增量方向修改
5.将源地址开始的100个字节传送到目的地址

注意:
1.源地址默认用ESI寄存器指出,目的地址默认用EDI指出,并默认源地址在DS段,目的地址在ES段
2.CX或ECX寄存器中事先存放好要传送的字节数、字数或双字数。但到底对应的是字节、字还是双字,决定于指令形式
3.如果用CLD指令将方向标志清0,则用MOVSB指令时,每传送一次,地址指针ESI和EDI自动增1,用MOVSW指令时,每传送一次,地址指针ESI和EDI自动增2。反过来,如果用STD指令将方向标志DF置1,则每次传送以后,地址指针自动减1,2,4。对带REP重复前缀的串传送指令来说,每传送一次,CX中的数值总是减1。

字符串比较指令CMPSB/CMPSW/CMPSD

字符串比较指令把DS段由ESI所指的字节、字或双字和ES段由EDI所指的字节、字或双字比较,,并在比较之后自动修改地址指针,通过重复前缀的控制,课实现在两个字符串中寻找第一个不相等的元素或第一个相等的元素。
在这里插入图片描述
在这里插入图片描述
作用:
3.清方向标志
4.计数器为4
5.如比较结果相等,则继续比较下一个字节,此时DI和SI分别加1,CX减1
6.如4个字节都符合,则说明已经设好加电标志
7.否则返回

注意:
1.要预先将源字符串的首地址设置到ESI寄存器中,目的字符串的首地址设置到EDI寄存器中,比较的字节数、字数或双字数设置到ECX中,并且要设置方向标志以决定地址指针的修改是增量方向还是减量方向
2.DF=0,指针加
3.CMPSB/SMPSW/CMPSD指令的前缀可有REPNZ/REPNE或REPZ/REPE,前一组表示两字符串不等时继续比较,后一组表示两字符串相等时进行比较,REPNZ和REPNE功能一样

字符串检索指令SCASB/SCASW/SCASD

使用字符串检索指令时,将AL中的字节、AX中的字或EAX中的双字与位于ES段由EDI寄存器所指地址开始的字节、字或双字比较。通过前缀,可实现在EDI所指的字符串中,寻找第一个与AL中的内容不同的字节,或寻找第一个与AL中的内容相同的字节。
在这里插入图片描述
作用:
1.目的字符串首地址送到DI
2.方向标志清零
3.字符串中共有4个字节
4.保存字节数
5.比较结果不等,则继续往下比较
6.AL中值和字符串中所有字节都不等,则转AAAA
7、8.AL中的值与字符串中的某个字节相等,则算出是第几个字节(相等就停止比较,故要多减1)
9.DI中为字符序号
10.使对应的计数单元加1

注意:
1.目的字符串默认在ES段中,字符串首地址必须用EDI或DI指出
2.根据检测ZF来判断是否检测到字符串中的字节与AL中的字节相等

取字符串指令LODSB/LODSW/LODSD

将位于DS段由ESI所指的存储单元的内容取到AL、AX或EAX中。地址方向取决于DF。
注意:
1.不可加前缀,否则AL中的内容会被后一次的数据覆盖

存字符串指令STOSB/STOSW/STOSD

把AL、AX或EAX中的数据存到ES段由EDI或DI寄存器所指单元,并且自动修改地址指针,加上前缀REP以后可使一串内存单元中填满相同的数
在这里插入图片描述
作用:
1.清除方向标志
2.将目的地址0404H送DI
3.共有128个字
4.AX清0
5.将256个字节清0

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值