写一个程序,要求输入两条字符串,判断它们是否相同,不能使
INPUT1 DB 81 ;定义了第一个要输入语句的要使用的空间
DB ?
DB 81 DUP(0)
INPUT2 DB 81 ;定义了第二个要输入语句的要使用的空间
DB ?
DB 81 DUP(0)
MESS1 DB "THE STRING SAME",13,10,"$"
MESS2 DB "THE STRING DON't same",13,10,"$"
MESS3 DB "INPUT THE FIRST STRING",13,10,"$"
MESS4 DB "INPUT THE SECONDE STRING",13,10,"$"
MESS5 DB "YOU HAVE EXIT. ^__^",13,10,"$"
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEA DX,MESS3
CALL DISP ;调用DISP函数输出MESS3
LEA DX,INPUT1
MOV SI,DX
CALL INPUT ;调用INPUT函数输入INPUT1字符串
LEA DX,MESS4
CALL DISP;调用DISP函数输出MESS4
LEA DX,INPUT2
MOV DI,DX
CALL INPUT ;调用INPUT函数输入INPUT2字符串
MOV DH,0 ;DH清零
MOV DL,[DI+1] ;把第二条字符串的长度传到DL
MOV CH,0 ;CH清零
MOV CL,[SI+1] ;把第一条字符串的长度传到CL
CMP CL,DL ;比较第一条和第二条字符串的长度是否一样,不一样
JNZ P1 ;就转到P1处理
INC SI
INC SI
INC DI
INC DI
;SI,DI都自加2,也就是让它们分别指向第一条和第二条字符串实质内容的的首地址。
NEXT: ;通过循环CX次,一个一个的判断两条字符串是否一致.
MOV AL,[SI]
MOV BL,[DI]
CMP AL,BL
JNZ P1 ;如果出现不一样,转到P1处理
INC SI
INC DI
LOOP NEXT ;循环结束,表明一致,进入P2处理
P2: LEA DX,MESS1
CALL DISP
JMP START
P1: LEA DX,MESS2
CALL DISP
JMP START
CHECKEXIT PROC ;检查是否退出,如果出现单个字符'Q'就表示退出.
PUSH AX
MOV AL,[SI]
CMP AL,'Q'
JNZ C1
LEA DX,MESS5
CALL DISP
MOV AH,4CH
INT 21H
CHECKEXIT ENDP
DISP PROC ;定义DISP函数,调用09H的DOS指令,输出字符串
MOV AH,09H
INT 21H
RET
DISP ENDP
INPUT PROC ;定义INPUT函数,在DX开始的地址,输入字符串
;且同时添加'回车','换行','结束',符号。方便以后使用
;输入完毕后,输出刚才输入的字符串
PUSH AX
PUSH CX
PUSH BX
PUSH SI ;把AX,CX,BX放到栈里面,做好现场保护
MOV SI,DX ;把DX里面保存的首地址送到SI里面
MOV AH,0AH
INT 21H
MOV CH,0 ;清零
MOV BX,0 ;清零
MOV CL,[SI+1] ;把字符串的长度送到CL
INC SI
INC SI ;SI自加2,也就是让它指向字符串实质内容的的首地址。
CMP CL,1 ;检查字符串长度是否是1,如果不是,就肯定
;不是'Q'---退出指令,跳过检查,直接转到C1处理
JNZ C1 ;字符串等于1,检查是否是退出指令
CALL CHECKEXIT;检查是否退出
C1: MOV BX,SI
ADD BX,CX ;把SI+CX的位置传到BX,也就是刚输入完的字符串
;结束的下一个地址
MOV [BX],BYTE PTR 0DH ;添加回车符号
ADD BX,1
MOV [BX],BYTE PTR 0AH ;添加换行符号
ADD BX,1
MOV [BX],BYTE PTR '$' ;添加结束符号
MOV DX,SI
CALL DISP ;输出该字符串
POP SI
POP BX
POP CX
POP AX ;现场保护的内容还原
RET
INPUT ENDP
CODE ENDS
END START
浙公网安备 33010602011771号