注册 登录
编程论坛 汇编论坛

求助,字符串的比较

zheng6611264 发布于 2007-06-11 22:33, 854 次点击

输入字符串与已知字符串比较:输入CORRECT,则输出:ok!否则:Error.Input again.

(下面哪里错了,各位高手帮忙看下)
DATAS SEGMENT
STR DB"please input the password:$"
BUF DB 20
DB ?
DB 20 DUP (?)
CRLF DB 0AH,0DH,"$"
STR2 DB 'CORRECT'
STR3 DB"Error!Input again:$"
COUNT EQU $-STR2
DATAS ENDS


CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,ES:DATAS
START: MOV AX,DATAS
MOV DS,AX
MOV ES,AX

LEA DX,STR
MOV AH,9
INT 21H

MOV AH,10
LEA DX,BUF
INT 21H

LEA DX,CRLF
MOV AH,9
INT 21H

LEA SI,BUF+2
LEA DI,STR2
MOV CX,COUNT
CLD
REPE CMPSB
jnz no
mov dl,'O'
mov ah,02h
int 21h
MOV DL,'K'
INT 21H
MOV DL,'!'
MOV AH,02H
INT 21H
jmp pend
no:
LEA DX,STR3
MOV AH,9
INT 21H

pend:

MOV AH,4CH
INT 21H
CODES ENDS
END START


[此贴子已经被作者于2007-6-12 0:40:43编辑过]

5 回复
#2
cool1986672007-06-12 02:41

我夜在做楼主这道题,下面是我自己写的,可是进入DEBUG观察发现就算我是输入CORRECT, REPE CMPSB 只执行了一次就跳到AGAIN段,听别人说CMPS指令是比较容易出错的...逐个字符比较的方法比较好,可是老师规定要用串比较..郁闷,望高手出来指点下



NAME EX6_1
DATA SEGMENT
S1 DB 'please input the password:$'
S2 DB 'OK!$'
S3 DB 'Error!Input again:$'
SC DB 'CORRECT'

CRLF DB 0AH,0DH,"$";此处输入数据段代码 ;回车换行
COUNT EQU $-OFFSET SC
DATA ENDS
EXDATA SEGMENT
STY DB 20
DB ?
DB 20 DUP(?)
EXDATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA ,ES:EXDATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,EXDATA
MOV ES,AX
LEA DX,S1
MOV AH,09H
INT 21H
TYPEIN:
LEA DX,STY
MOV AH,0AH
INT 21H ;输入字符串
LEA DX,CRLF
MOV AH,09h
INT 21H

COMPARE:
LEA SI,SC
LEA DI,STY
MOV CX,COUNT
CLD
REPE CMPSB ;比较两字符串,相等则继续,不相等则跳AGAIN再重新输入
JNZ AGAIN
LEA DX,S2 ;相等则显示'OK!'
MOV AH,09H
INT 21H
JMP OVER
AGAIN:
LEA DX,S3
MOV AH,09H ;显示"ERROR...."
INT 21H
MOV DL,0AH
MOV AH,02H ;回车
INT 21H
MOV DL,0DH
MOV AH,02H ;换行
INT 21H
JMP TYPEIN

OVER:
MOV AH,4CH
INT 21H
CODE ENDS
END START

#3
菜鸟上路2007-06-12 08:27
有字符串比较指令CMPSB
#4
zheng66112642007-06-12 10:36

2楼的问题不是和我的一样吗?郁闷!!!

#5
菜鸟上路2007-06-12 14:36
把STR改成其他名字
#6
爱以走远2007-06-12 21:05
我没看代码
就看到这个
STR DB"please input the password:$"
错拉
1