重复前缀
由于串操作指令只能每次对字符串的一个字符进行处理,所以使用了一个循环,以便完成对整个字符串的处理,为了进一步提高效率,8086和8088还提供了重复指令前缀,重复指令前缀可以加载串操作指令指令之前,已达到重复执行其后串操作指令的目的
重复前缀REP
REP用作为一个串操作指令的前缀,它重复其后面的串操作指令动作,每一次重复都先判断CX是否为0,如果为0 就结束重复,否则CX的值就减1,重复其后面的串操作指令,所以CX等于0 时,就不执行其后面的字符操作指令
重复前缀REP主要用在传送指令MOVS和STOS之前,值得指出的是REP不用在LODSB和LODSW指令之前
【1】重复操作指令REPZ、REPE
REPZ与REPE是一个前缀的两个助记符,下面的介绍REPZ为代表
REPZ用作一个串操作指令的前缀,他重复其后的串操作指令动作,每重复一次,CX的值减少1,重复直到CX为0或者串操作指令使零标志ZF为0,重复结果条件的检查实在重复结果之前进行的
子程序STRCMP功能比较两个字符串是否相同入口参数:DS:SI = 字符串1首地址的段值的偏移 ES:DI = 字符串2首地址的段值的偏移STRCMP PROCCLDPUSH DIXOR AL,AL;先测量一个字符串的长度MOV CX,0FFFFHNEXT:SCANSBJNZ NEXTNOT CXPOP DIREPZ CMPSBMOV AL,[SI-1]MOV BL,ES:[DI-1]XOR AH,AHMOV BH,AHSUB AX,BXRETSTRCMP ENDP
【2】重复前缀REPNZ、REPNE
REPZ用作一个串操作指令的前缀,他重复其后的串操作指令动作,每重复一次,CX的值减少1,重复直到CX为0或者串操作指令使零标志ZF为1,重复结果条件的检查实在重复结果之前进行的
;子程序名称 STRCHR;功能 判断字符是否属于字符串;入口参数:DS:SI搜索字符串首地址的段值:偏移;STRCHR PROC PUSH BX PUSH SI CLD MOV BL,AL TEST SI,1 JZ STRCHR1 LODSB CMP AL,BL JZ STRCHR3 AND AL,AL JZ STRCHR2STRCHR1:LODSW CMP AL,BL JZ SRTCHR4 AND AL,AL JZ STRCHR2 CMP AH,BL JZ STRCHR3 AND AH,AH JNZ STRCHR1STRCHR2:STC JMP SHORT STRCHR5STRCHR3:INC SISTRCHR3:LEA AX,[SI-2]STRCHR5:POP SI POP BX RETSTRCHR ENDP