首页 > 代码库 > 简单应用程序的设计 -重复前缀

简单应用程序的设计 -重复前缀

重复前缀

由于串操作指令只能每次对字符串的一个字符进行处理,所以使用了一个循环,以便完成对整个字符串的处理,为了进一步提高效率,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