汇编小程序:字符串匹配
- 再创世纪·代码厨房
- 2007-11-22
- 335热度
- 0评论
实验内容:编写程序实现两个字符串比较。如果相同,则屏幕显示“MATCH”,否则屏幕显示“NOMATCH”
DATAS SEGMENT
PRODUCTION DB 'Welcome to the system!',13,10,13,10
DB 'The function of the program is judging 2 strings same or not.',13,10
DB 'If the 2 strings are the same,the scream will show "Match",or else,show "No match".',13,10,13,10
DB 'Best wishes!',13,10,13,10,'$'
MESSAGE1 DB 'Please enter the first string.',13,10,'$'
MESSAGE2 DB 'Please enter the second string.',13,10,'$'
CR DB 13,10,'$' ;回车换行
MATCH DB 'Match!$'
NOMATCH DB 'No Match!$'
STRING1 DB 100
DB ?
DB 100 DUP(0)
STRING2 DB 100
DB ?
DB 100 DUP(0)
AGAIN DB 'Do you want to try again?(Y or N)',13,10,'$'
ERROR DB 'ERROR!',13,10,'Please enter the right commonds.',13,10,'$' ;错误提示
DATAS ENDS
CODES SEGMENT
MAIN PROC FAR
ASSUME CS:CODES, DS:DATAS, ES:DATAS
START:
HEAD: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
LEA DX,PRODUCTION
MOV AH,09H
INT 21H
;以下输入第一个字符串
LEA DX,MESSAGE1
MOV AH,09H
INT 21H
LEA DX,STRING1
MOV AH,0AH
INT 21H
LEA DX,CR
MOV AH,09H
INT 21H
;以下输入第二个字符串
LEA DX,MESSAGE2
MOV AH,09H
INT 21H
LEA DX,STRING2
MOV AH,0AH
INT 21H
LEA DX,CR
MOV AH,09H
INT 21H
LEA SI,STRING1
LEA DI,STRING2
ADD SI,02H
ADD DI,02H
MOV CL,[SI-1]
MOV CH,[DI-1]
CMP CL,CH
JA NEXT
MOV CL,[DI-1] ;把比较次数输入CX,CX=MAX(LENGTH(STRING1,STRING2))
NEXT: MOV CH,0H
REPZ CMPSB ;字符串比较
MOV AH,09H ;Prepare for the INT21H
JNZ NO_MATCH
MOV DX,OFFSET MATCH
INT 21H
JMP EXIT
NO_MATCH: MOV DX,OFFSET NOMATCH
INT 21H
JMP EXIT
OVERFLOW:
LEA DX,CR
MOV AH,09H
INT 21H
LEA DX,ERROR
MOV AH,09H
INT 21H
EXIT:
LEA DX,CR
MOV AH,09H
INT 21H
LEA DX,AGAIN ;提示是否再试一次
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
PUSH AX
LEA DX,CR
MOV AH,09H
INT 21H
POP AX
CMP AL,'Y'
JZ HEAD
CMP AL,'y'
JZ HEAD
CMP AL,'N'
JZ OVER
CMP AL,'n'
JZ OVER
JMP OVERFLOW
OVER:
MOV AH,4CH
INT 21H
RET
MAIN ENDP
CODES ENDS
END START
没有调整字符对齐,不过无伤大雅。
这个程序设有两个附加功能,即提示错误和提示是否重试一次。有一些汇编程序会在这里出错,只要删掉是否重试即可运行。
其实现在已经很少人在用手动汇编了,主流的方法是把需要的程序用高级语言编号后生成.exe文件,然后用反汇编工具实现。最后如有需要,再用汇编对反汇编得出的结果进行小面积的修改。
本文原链接:http://hi.baidu.com/xiamengy/blog/item/c8fec2bfbe1e3b0918d81f2d.html