重复前缀
由于串操作指令只能每次对字符串的一个字符进行处理,所以使用了一个循环,以便完成对整个字符串的处理,为了进一步提高效率,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
简单应用程序的设计 -重复前缀,布布扣,bubuko.com