简单应用程序的设计 -重复前缀
重复前缀
由于串操作指令只能每次对字符串的一个字符进行处理,所以使用了一个循环,以便完成对整个字符串的处理,为了进一步提高效率,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 PROC CLD PUSH DI XOR AL,AL;先测量一个字符串的长度 MOV CX,0FFFFH NEXT:SCANSB JNZ NEXT NOT CX POP DI REPZ CMPSB MOV AL,[SI-1] MOV BL,ES:[DI-1] XOR AH,AH MOV BH,AH SUB AX,BX RET STRCMP 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 STRCHR2 STRCHR1:LODSW CMP AL,BL JZ SRTCHR4 AND AL,AL JZ STRCHR2 CMP AH,BL JZ STRCHR3 AND AH,AH JNZ STRCHR1 STRCHR2:STC JMP SHORT STRCHR5 STRCHR3:INC SI STRCHR3:LEA AX,[SI-2] STRCHR5:POP SI POP BX RET STRCHR ENDP