3.3.4.3 串重复前缀


  REP 重复执行串指令,(CX)=重复次数
  执行操作:
  ① (CX)=0时,串指令执行完毕,否则执行② ~ ④
  ② (CX)←(CX)-1
  ③ 执行串指令(MOVS或STOS)
  ④ 重复执行①

  REPE / REPZ 相等/为零时重复执行串指令,(CX)=比较/扫描的次数
  执行操作:
  ① (CX)=0或ZF=0时,结束执行串指令,否则继续② ~ ④
  ② (CX)←(CX)-1
  ③ 执行串指令(CMPS或SCAS)
  ④ 重复执行①

  REPNE / REPNZ 不等/不为零时重复执行串指令,(CX)=比较/扫描的次数
  执行操作:
  ① (CX)=0或ZF=1,结束执行串指令,否则继续② ~ ④
  ② (CX)←(CX)-1
  ③ 执行串指令(CMPS或SCAS)
  ④ 重复执行①

  
REP对其后的串指令(MOVS或STOS)只有一个结束条件,即重复次数(CX)=0。在进行串比较和串扫描时,串指令前应加前缀REPE(REPZ)或REPNE(REPNZ),这两条重复前缀用重复次数(CX)和比较结果(ZF)来控制串指令的结束。当(CX)=0时,说明每个串数据都比较(或扫描)过了,此时串操作正常结束;当因ZF=1或0而结束串操作时,说明在满足比较结果相等或不等的条件下,可提前结束串操作。