标题:长度为10的字符串比较为什么不能输入直接就出来了.哪里不对,初学者请教!
只看楼主
tdl2000
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-4-30
 问题点数:0 回复次数:16 
长度为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
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
得分:0 
现在没时间拉 明天给你看哈
呵呵

   好好活着,因为我们会死很久!!!
2007-05-09 23:38
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
得分:0 

S5 DB 10 DUP(?)
S6 DB 10 DUP(?)
改成
S5 DB 10
DB ?
DB 10 DUP(?)
S6 DB 10
DB ?
DB 10 DUP(?)

不过你这程序有错

2007-05-10 10:12
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
得分:0 

你没定义 es ASSUME CS:CODE,DS:DATA,es:data


   好好活着,因为我们会死很久!!!
2007-05-10 12:46
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
得分:0 

还有一个错误就是 dx不等做偏移地址 把改为bx


   好好活着,因为我们会死很久!!!
2007-05-10 12:50
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
得分:0 
还有就是感觉你的程序有错
你在lp 和ok那里
你自己改改哈 呵呵

[此贴子已经被作者于2007-5-10 13:02:34编辑过]


   好好活着,因为我们会死很久!!!
2007-05-10 13:01
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
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
得分:0 
你调试出来没错吗
神奇拉 呵呵 还是错的哈
我大慨看拉一哈 你把si改为2干吗 你定义的是字节嘛


   好好活着,因为我们会死很久!!!
2007-05-10 14:15
tdl2000
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-4-30
得分:0 

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

2007-05-10 17:28



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




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

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