×
嵌入式 > 技术百科 > 详情

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

发布时间:2020-10-28 发布时间:
|
;编程从键盘输入两个字符串到内存缓冲区,并比较两个字符串是否相同;
;如相同,输出‘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
 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
iPhone将是质的飞跃:苹果A14处理器+高通X55基带