📄 asslandat99.dat
字号:
重复前缀的说明
在串操作指令前加上重复前缀,可以对字符串进重复处理。由于加上重复前缀后,对应的指令代码是不同的,所以指令的功能便具有重复处理 的功能,重复的次数存放在CX寄存器中。
重复前缀形式有:REP ;CX<>0,重复执行字符串指令
REPZ/REPE ;CX<>0,且ZF=1重复执行字符串指令
REPNZ/REPNE ;CX<>0,且ZF=0重复执行字符串指令
REP与MOVS或STOS串操作指令相结合使用,完成一组字符的传送或建立一组相同数据的字符串。
REPZ/REPE常用与CMPS串操作指令结合使用,可以完成两组字符串的比较。当串未结束(CX)<>0且当对应串元素相同(ZF=1)时,继续重复执 行字符串指令。它可用来判定两字符串是否相同。
REPZ/REPE常与SCAS指令结合使用,可以完成在一个字符串中搜索一个关键字。只要当字符串未结束(CX<>0)且当关键字与元素相同(ZF=1) 时,继续重复执行串搜索指令,用于在字符串中查找与关键字不相同的数据的位置。
REPNZ/REPNE与CMPS指令结合使用,表示当串未结束(CX=1)且当对应串元素不相同(ZF=0)时,继续重复执行串比较指令。它可在两字符串 中查找相同数据的位置。
REPNZ/REPNE与SCAS指令结合使用,表示串未结束(CX=1)且当关键字与串元素不相同(ZF=0)时,继续重复执行串搜索指令。它可用来在字 符串中查找关键字相同的的数据位置。
重复前缀应用的程序举例如下:
例1 对两个字符串STR1与STR2进行比较
MOV SI,OFFSET STR1
MOV DI,OFFSET STR2
MOV CX,COUNT ;COUNT为串长度
CLD
REPZ CMPSB
JNZ NEQU ;串不相同,送0FFH标志
MOV AL,0 ;串相同,送0FFH标志
JMP OVR
NEQU:MOV AL,0FFH
OVR:MOV RESULT,AL ;将比较结果送RESULT
HLT
例2 字符串中搜索关键字,记下搜索的次数和关键字在串中的位置
CLD
MOV DI,OFFSET BLOCK ;DI为目的串指针
MOV CX,COUNT ;CX为串长度
MOV AL,CHAR ;AL中为搜索的关键字
REPNE SCASB ;重复搜索关键字
JZ FOUND ;找到,转FOUND
MOV DI,0 ;未找到,退出程序
JMP DONE
FOUND:DEC DI ;DI为关键字的位置
MOV POINTER,DI ;保存关键字的位置
MOV BX,OFFSET BLOCK
SUB DI,BX ;DI中为查找的次数
MOV POINTER+2,DI ;保存搜索次数
DONE:HLT
注意:若找到该关键字,由于DI是自增的,这时DI已经指向关键字的下一个字符,故DI减1才是真正关键字在字符串的位置。当前关键字的位 置减去串首址,即得到搜索的次数。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -