标题:长度为10的字符串比较为什么不能输入直接就出来了.哪里不对,初学者请教!
取消只看楼主
tdl2000
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-4-30
 问题点数:0 回复次数:6 
长度为10的字符串比较为什么不能输入直接就出来了.哪里不对,初学者请教!

DATA SEGMENT
S1 DB 'Please input string1: $'
S2 DB 'Please input string2: $'
S3 DB 'MATCH$'
S4 DB 'NO MATCH$'
S5 DB 10 DUP(?)
S6 DB 10 DUP(?)

DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA ;put data to DS
MOV DS,AX
MOV ES,AX

LEA DX,S1 ;show message1
MOV AH,09H
INT 21H

LEA DX,S5 ;input string1
MOV AH,0AH
INT 21H
CALL CLRF

LEA DX,S2 ;show message2
MOV AH,09H
INT 21H


LEA DX,S6 ;input string2
MOV AH,0AH
INT 21H

CALL CLRF
mov si,0
ok: mov al,s5[si]

lea di,s6
mov cx,10
cld
lp: scasb
jz match
dec cx
jcxz lp

cmp si,10
inc si
jb ok


LEA DX,S4 ;show no match
MOV AH,09H
INT 21H

JMP FINISH ;go to finish

MATCH: LEA DX,S3 ;show info of match
MOV AH,09H
INT 21H

FINISH: MOV AH,4CH ;return to Dos
INT 21H
CLRF PROC NEAR
MOV DL,0DH ;cr
MOV AH,02H
INT 21H
MOV DL,0AH ;next line
MOV AH,02H
INT 21H
ret
CLRF ENDP

CODE ENDS
END START

搜索更多相关主题的帖子: DATA 字符 SEGMENT 长度 
2007-05-09 23:19
tdl2000
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-4-30
得分:0 

S5 DB 10 DUP(?)
S6 DB 10 DUP(?)
改成
S5 DB 10
DB ?
DB 10 DUP(?)
S6 DB 10
DB ?
DB 10 DUP(?)
这是为什么呢?要多开辟两个单元?还有你说的DX是这里的
LEA DX,S6
MOV AH,0AH
INT 21H
吗?这里是输入字符串S6,应该没错吧.呵呵太菜了不懂解释一下
谢谢

2007-05-10 13:46
tdl2000
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-4-30
得分:0 

DATA SEGMENT
S1 DB 'Please input string1: $'
S2 DB 'Please input string2: $'
S3 DB 'MATCH$'
S4 DB 'NO MATCH$'
S5 DB 10
DB ?
DB 10 DUP(?)
S6 DB 10
DB ?
DB 10 DUP(?)

DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA ;put data to DS
MOV DS,AX
MOV ES,AX

LEA DX,S1 ;show message1
MOV AH,09H
INT 21H

LEA DX,S5 ;input string1
MOV AH,0AH
INT 21H
CALL CLRF

LEA DX,S2 ;show message2
MOV AH,09H
INT 21H


LEA DX,S6 ;input string2
MOV AH,0AH
INT 21H

CALL CLRF
mov si,2
ok: mov al,s5[si]

lea di,offset s6+2
mov cx,10
cld
lp: scasb
jz match
dec cx
jcxz lp

cmp si,10
inc si
jb ok


LEA DX,S4 ;show no match
MOV AH,09H
INT 21H

JMP FINISH ;go to finish

MATCH: LEA DX,S3 ;show info of match
MOV AH,09H
INT 21H

FINISH: MOV AH,4CH ;return to Dos
INT 21H
CLRF PROC NEAR
MOV DL,0DH ;cr
MOV AH,02H
INT 21H
MOV DL,0AH ;next line
MOV AH,02H
INT 21H
ret
CLRF ENDP

CODE ENDS
END START
红色的地方是我改过的,仍然是没定义ES,但加了两个单元就可以了.
这个程序是如果两字符串有一个相同就MATCH否者就NO MATCH.
这是什么原因?

2007-05-10 14:00
tdl2000
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-4-30
得分:0 

我是在ASM FOR WINDOWS 里运行的,是可以的呀.因为我一开始多了两个字节,两个字节后
才是字符串开始.

2007-05-10 17:28
tdl2000
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-4-30
得分:0 
在MASM FOR WINDOWS集成实验环境里真的是可以的,我也不知道为什么?
不信你试试,呵呵........可能在DOS里不可以吧
谁叫我是菜鸟呢,呵呵所以乱写的.

2007-05-10 17:40
tdl2000
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-4-30
得分:0 

DATA SEGMENT
S1 DB 'Please input string1: $'
S2 DB 'Please input string2: $'
S3 DB 'MATCH$'
S4 DB 'NO MATCH$'
S5 DB 10,0,10 DUP(0)
S6 DB 10,0,10 DUP(0)

DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA

START: MOV AX,DATA ;put data to DS
MOV DS,AX

LEA DX,S1 ;show message1
MOV AH,09H
INT 21H

LEA DX,S5 ;input string1
MOV AH,0AH
INT 21H
CALL CLRF

LEA DX,S2 ;show message2
MOV AH,09H
INT 21H


LEA DX,S6 ;input string2
MOV AH,0AH
INT 21H

CALL CLRF

MOV SI,2
OK: MOV DI,OFFSET S6+2
MOV AL,S5[SI]
MOV CL,S6[1]
MOV CH,0
CLD
LP: SCASB
JZ MATCH
DEC CX
JNZ LP

MOV CL,S5[1] ;characters of s5
CMP CX,SI ;the end of s5?
INC SI
JNB OK

LEA DX,S4 ;show no match
MOV AH,09H
INT 21H

JMP FINISH ;go to finish
CLRF PROC NEAR
MOV DL,0DH ;cr
MOV AH,02H
INT 21H
MOV DL,0AH ;next line
MOV AH,02H
INT 21H
RET
CLRF ENDP
MATCH: LEA DX,S3 ;show info of match
MOV AH,09H
INT 21H

FINISH: MOV AH,4CH ;return to Dos
INT 21H

CODE ENDS
END START
啊,总算可以了呀.现在要多谢谢爱以走远.
我要好好学习!

2007-05-10 21:58
tdl2000
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-4-30
得分:0 
是这样的,我知道原因了,ES:DATA 只是关联,在加MOV ES AX就对了
试试我这里可以的
2007-05-10 22:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-138057-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.812977 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved