这是一个判断两个字符串是否相等的程序,需要用户输入字符串。
源代码:
DATAS SEGMENT
BUF DB 10H,?,10 DUP(?) 请问这里的10H,? 是做什么用的?直接写成BUF 10 DUP(?) 为什么运行时还没等用户输入,结果直接就是“Y”
BUF1 DB 10H,?,10 DUP(?)
DATAS ENDS
CODES SEGMENT
ASSUME cs:codes, ES:DATAS,DS:DATAS ;
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,BUF
MOV AH,0AH
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV AX,DATAS
MOV DS,AX
LEA DX,BUF1
MOV AH,0AH
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
MOV AX,DATAS
MOV ES,AX
LEA SI,BUF
LEA DI,BUF1
;比较字符串长度是否相等
MOV AL,ES:[SI+1] ;为什么si+1 ?如果没有加1 指向的是什么?[/color]
MOV BL,DS:[DI+1]
CMP AL,BL
JNZ NO
;比较字符串的内容是否相等
mov cl, [si+1] ;*设置CX计数 这里设置的计数器对后面字符串内容的循环比较有影响吗?
mov ch,0 ;************
inc si ;调指针指向后面实际输入的字符 为什么si+1 之后才指向后面实际输入的字符?如果没有加1 指向的是什么?
inc di ;************
CM:
INC SI
INC DI
MOV AL,ES:[SI]
MOV BL,DS:[DI]
CMP AL,BL
JNZ NO
LOOP CM
mov dl, 'Y' ;************显示‘Y’
mov ah, 2 ;************
int 21h ;************
jmp exit ;************跳过显示‘N’的代码
NO:
MOV DL,'N'
MOV AH,02H
INT 21H
exit: ;************
MOV AH,4CH
INT 21H
CODES ENDS
END START
问题都在代码后面用红色字体标出来了,求教各位大神指点
------解决方案--------------------
存你两次输入的字符