专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

汇编:判断两个字符串是否相等(匹配)

作者:佚名   来源:本站原创   点击数:  更新时间:2013年12月01日   【字体:

 ;编程从键盘输入两个字符串到内存缓冲区,并比较两个字符串是否相同;
;如相同,输出‘match’;如不同,输出‘no match’。
;经修改的代码能够循环使用
DATAS SEGMENT
 data1    DB  100 DUP(?)
 data2    DB  100 DUP(?)
 string   DB  0DH,0AH,'$'
 tital1   DB 'Please input the first string :',0DH,0AH,'$'
 tital2   DB 'Please input the second string :',0DH,0AH,'$'
 tital3   db 'Do you want to have a try  again(if yes,input y,else input n ): ',0dh,0ah,'$'
    result1  db 'match',0dh,0ah,'$'
    result2  db 'no match',0dh,0ah,'$' 
 temp DW 0
DATAS ENDS
CODES SEGMENT
 ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS
    MOV DS,AX
    MOV si,0
tip1:               ;输出抬头1
 LEA dx,tital1
 MOV ah,09h
 INT 21H
first:           ;输入第一个字符串
 MOV ah,01h   ;输入字符放在AL中
 INT 21H     ;以回车作为结束符
 cmp al,0dh
 je  tip2
 MOV data1[si],AL;保存在内存中
 INC si
 JMP first
tip2:
 LEA dx,string
 MOV AH,09H
 INT 21H
 MOV temp,si ; 保存si使得下一个字符串和它做比较
 MOV si,0         ;输出抬头2
 LEA dx,tital2
 MOV ah,09h
 INT 21H
second:       ;输入第二个字符串
 MOV AH,01H  ;输入字符放在AL中
 INT 21H    ;同样以回车作为结束符
 CMP AL,0DH
 je output           
 mov data2[si],al   ;保存到内存
 inc si
 jmp second
output:
 LEA dx,string
 MOV AH,09H
 INT 21H
 CMP temp,si      ;判断长度是否相等
 JNE nomatch
 MOV si,0
pipei:MOV AL,DATA1[si];判断是否每个字符都相等
 MOV AH,DATA2[si]
 INC si
 CMP AL,AH
 JNE nomatch
 CMP si,temp
 JE MATCH
 JMP pipei
MATCH: LEA DX,result1   ;不匹配就输出结论1
     MOV AH,09H
     INT 21H
     JMP EXIT
nomatch:LEA DX,result2   ;匹配就输出结论2
  MOV AH,09H
  INT 21H
EXIT:                     ;询问是否要继续进行
     lea dx,tital3
     mov ah,09h
     int 21h
     mov ah,01h
     int 21h
     cmp al,'y'
     lea dx,string
     mov ah,09h   
     int 21h
     je start
     cmp al,'n'
     je over
     jmp exit
       
over:                ;结束
MOV AH,4CH
  INT 21H
CODES ENDS
 END START
 

关闭窗口

相关文章