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

长度为10的字符串比较为什么不能输入直接就出来了.哪里不对,初学者请教!

tdl2000 发布于 2007-05-09 23:19, 1568 次点击

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

16 回复
#2
爱以走远2007-05-09 23:38
现在没时间拉 明天给你看哈
呵呵
#3
菜鸟上路2007-05-10 10:12

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

不过你这程序有错
#4
爱以走远2007-05-10 12:46

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

#5
爱以走远2007-05-10 12:50

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

#6
爱以走远2007-05-10 13:01
还有就是感觉你的程序有错
你在lp 和ok那里
你自己改改哈 呵呵

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

#7
tdl20002007-05-10 13:46

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,应该没错吧.呵呵太菜了不懂解释一下
谢谢

#8
tdl20002007-05-10 14:00

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.
这是什么原因?

#9
爱以走远2007-05-10 14:15
你调试出来没错吗
神奇拉 呵呵 还是错的哈
我大慨看拉一哈 你把si改为2干吗 你定义的是字节嘛

#10
tdl20002007-05-10 17:28

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

#11
tdl20002007-05-10 17:40
在MASM FOR WINDOWS集成实验环境里真的是可以的,我也不知道为什么?
不信你试试,呵呵........可能在DOS里不可以吧
谁叫我是菜鸟呢,呵呵所以乱写的.

#12
爱以走远2007-05-10 17:50
我才睡拉一会 呵呵
可能是吧 我也有哪个 但是没用 呵呵
不过我还是觉得你的程序有错哈 呵呵 对拉 你以后不要7有这样的错误
MOV ES,AX 你有拉这一句 前面ASSUME CS:CODE,DS:DATA ,ES:DATA
就要那样 你重想一种方法看 感觉你那样不行
#13
tdl20002007-05-10 21:58

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
啊,总算可以了呀.现在要多谢谢爱以走远.
我要好好学习!

#14
爱以走远2007-05-10 22:00
呵呵 加油 我也没帮什么忙 就是要自己慢慢做
多调试 这样就慢慢提高拉
#15
菜鸟上路2007-05-10 22:03
不过你程序有错哈
只有本站会员才能查看附件,请 登录

#16
爱以走远2007-05-10 22:16
不过ls 说的没错哈
你的程序还有错
我还没看
自己在好好想想
#17
tdl20002007-05-10 22:35
是这样的,我知道原因了,ES:DATA 只是关联,在加MOV ES AX就对了
试试我这里可以的
1