汇编 字符串比较实验.doc
文本预览下载声明
实验3. 字符串比较实验
1.实验内容与要求
程序员在屏幕上分别输入两行字符串,比较两个字符串,输出其中相同的字符,并统计个数。要求相同的字符大于10(即统计数要两位)。并且每行都要有提示信息。
2.源代码
DATAS SEGMENT
??? STR1??? DB 100,?,100 DUP(?)?????????????????????????? ;定义字符串
??? STR2??? DB 100,?,100 DUP(?)
??? STR3??? DB 100 DUP(?)???????????????????????????????? ;存放含相同字符的新字符串
??? INS1??? DB Input the first str: $?????????????????? ;提示信息
??? INS2??? DB Input the second str: $
??? OUTCNT? DB Num of the same elem: $
??? OUTELM? DB The same elems are: $
??? CRLF??? DB 0DH,0AH,$???????????????????????????????? ;回车换行
??? COUNT?? DB 0?????????????????????????????????????????? ;未过滤字符串的长度
??? NUM???? DB 0 ??????????????????????????????????????????;过滤后字符串的长度
DATAS ENDS
CODES SEGMENT
??? ASSUME CS:CODES,DS:DATAS
START:
??? MOV AX,DATAS
??? MOV DS,AX
??? MOV AH,9
??? LEA DX,INS1
??? INT 21H?????????????????? ;显示输入提示信息
??? MOV AH,0AH
??? LEA DX,STR1
??? INT 21H?????????????????? ;输入原字符串
??? MOV AH,9
??? LEA DX,CRLF?????????????? ;回车换行
??? INT 21H
?
??? MOV AH,9
??? LEA DX,INS2
??? INT 21H
??? MOV AH,0AH
??? LEA DX,STR2
??? INT 21H
??? MOV AH,9
??? LEA DX,CRLF
??? INT 21H
???
??? MOV CL,STR1+1???????????? ;把字符串长度送到CL,BL
??? XOR CH,CH
??? MOV BL,STR2+1
??? XOR BH,BH
??? LEA SI,STR1+2???????????? ;把字符串首地址送到SI,DI
??? LEA DI,STR2+2
??? LEA BP,STR3?????????????? ;把目标字符串首地址送BP
??? CMP2:???????????????????? ;外部循环
??? CMP1:???????????????????? ;内部循环
??? MOV AL,[SI]???? ??????????;逐一比较两字符串的每个字符
??? CMP AL,[DI]
??? JNE NEXT?????????????????????????????
??? MOV AH,[SI]
??? MOV [BP],AH
??? INC BP
??? INC COUNT???????????????? ;统计STR3的长度
NEXT:INC DI
???? DEC BL
???? JZ? OVER1
???? JMP CMP1
???? OVER1:?????????????????? ;重新设置内部循环次数,并重新定位DI指针
???? INC SI
???? MOV BL,STR2+1
???? LEA DI,STR2+2
???? LOOP CMP2
???? MOV AH,9???????????????? ;输出结果提示信息
???? LEA DX,OUTELM
???? INT 21H
???? call clear?????????????? ;调用过滤字符串子程序,并输出
???? MOV AH,9???????????????? ;输出相同字符个数
???? LEA DX,OUTCNT
???? INT 21H
???? XOR AH,AH
???? MOV AL,NUM
???? CALL DISPLAY????????????? ;处理输出结果,使输出两位数字
???
??? MOV AH,
显示全部