请教各位高手一个问题~~~~~

speed1277 2009-12-31 04:03:25
这是一个密码申请时的校验程序,就是有键盘随机输入两个字符串作比较,相同的话就提示密码正确,不同就提示错误。现在存在的问题是,无法实现两个字符串的比较,不论输入是否正确都提示错误,望各位大侠帮忙看看,谢谢了~~~~

data segment
;;;;
inputcount db 0
;;;;
string0 db 'Please input the password:$'
string1 db 'Please input the password again:$'
password db 50,0,50 dup(?)
string2 db 50,0,50 dup(?)
string3 db 'Welcome to use!$'
string4 db 'Password error!$'
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov al,0
;;;;;;;;;;
mov inputcount, al
;;;;;;;;;;
start_2:mov ah,9
lea dx,string0
int 21h
mov ah,2
mov dl,10
int 21h
mov ah,2
mov dl,13
int 21h
mov ah,0ah
lea dx,password
int 21h
start_1:mov ah,9
lea dx,string1
int 21h
mov ah,2
mov dl,10
int 21h
mov ah,2
mov dl,13
int 21h
mov ah,0ah
lea dx,string2
int 21h
lea si,string2[1]
lea di,password
mov dl,[si]
cmp dl,9
jne error
mov cx,0
mov cl,9
lop:inc si
mov bh,[si]
mov bl,[di]
cmp bh,bl
jne error
inc di
loop lop
jmp r
error: mov ah,9
lea dx,string4
int 21h
mov ah,2
mov dl,10
int 21h
mov ah,2
mov dl,13
int 21h
;;;;;;;;;
mov al, inputcount
;;;;;;;;;
inc al
;;;;;;;;;
mov inputcount, al
;;;;;;;;;
cmp al,3
jne start_1
jmp exit
r:mov ah,9
lea dx,string3
int 21h
exit:mov ah,4ch
int 21h
code ends
end start
...全文
89 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
speed1277 2010-01-02
  • 打赏
  • 举报
回复
结贴了,在我空间回答吧,谢了~~~
speed1277 2010-01-02
  • 打赏
  • 举报
回复
lea si,string2[1]
;修改此处
;lea di,password
lea di,password[2]
;----此处判断输入的字符是不是9位,如果不需要9位,可将此处代码删除-------------
;mov dl,[si]
;cmp dl,9
;jne error
;-----------------------------------------------------------------------------
为什么不能改成
lea si,string2[1]

lea di,password
lea di,password[2]

mov dl,[si]
cmp dl,9
jne error
我是说为什么不能把分号去掉???
speed1277 2010-01-01
  • 打赏
  • 举报
回复
似乎还是不行啊,不满足要求。要求是正确的话推出,要是两个字符串不同的话也能比较三次才退出,不过你的只能比较一次。
eTouX 2010-01-01
  • 打赏
  • 举报
回复
都被回答了。
friendly_ 2010-01-01
  • 打赏
  • 举报
回复

showcrlf macro
mov ah,2
mov dl,10
int 21h
mov ah,2
mov dl,13
int 21h
endm

data segment
;;;;
inputcount db 0
;;;;
string0 db 'Please input the password:$'
string1 db 'Please input the password again:$'
password db 50,0,50 dup(?)
string2 db 50,0,50 dup(?)
string3 db 'Welcome to use!$'
string4 db 'Password error!$'
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov al,0
;;;;;;;;;;
mov inputcount, al
;;;;;;;;;;
start_2:
mov ah,9
lea dx,string0
int 21h
showcrlf

mov ah,0ah
lea dx,password
int 21h
showcrlf

start_1:
mov ah,9
lea dx,string1
int 21h
showcrlf

mov ah,0ah
lea dx,string2
int 21h
showcrlf

lea si,string2[1]
;修改此处
;lea di,password
lea di,password[2]
;----此处判断输入的字符是不是9位,如果不需要9位,可将此处代码删除-------------
;mov dl,[si]
;cmp dl,9
;jne error
;-----------------------------------------------------------------------------
mov cx,0
mov cl,9
lop:
inc si
mov bh,[si]
mov bl,[di]
cmp bh,bl
jne error
inc di
loop lop
jmp r
error: mov ah,9
lea dx,string4
int 21h
showcrlf

;;;;;;;;;
mov al, inputcount
;;;;;;;;;
inc al
;;;;;;;;;
mov inputcount, al
;;;;;;;;;
cmp al,3
jne start_1
jmp exit
r:mov ah,9
lea dx,string3
int 21h
exit:
mov ah,4ch
int 21h
code ends
end start
suchx 2009-12-31
  • 打赏
  • 举报
回复

CR=0DH
LF=0AH
DSEG SEGMENT PARA
STRLEN = 50
BUFSIZE = STRLEN + 1
STR1 DB BUFSIZE
DB 0
DB BUFSIZE DUP(0)
STR2 DB BUFSIZE
DB 0
DB BUFSIZE DUP(0)
INMES DB 'PLEASE INPUT STRING : ','$'
EMPTY DB 'EMPTY INPUT .',CR,LF,'$'
EQUMES DB 'EQUAL .',CR,LF,'$'
NEQMES DB 'NOT EQUAL .',CR,LF,'$'
CRLF DB CR,LF,'$'
DSEG ENDS
SSEG SEGMENT PARA STACK
STKSIZE=40H
DB STKSIZE DUP(0)
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,SS:SSEG,DS:DSEG,ES:DSEG
START : NOP
MOV AX,DSEG
MOV DS,AX
MOV ES,AX
LEA DX,STR1
CALL READSTR
LEA DX,STR2
CALL READSTR
LEA SI,STR1
MOV CH,[SI+1]
LEA DI,STR2
MOV CL,[DI+1]
CMP CH,CL
JNZ S1
XOR CH,CH
ADD SI,2
ADD DI,2
CLD
REPZ CMPSB
JNZ S1
S3:LEA DX,EQUMES
CALL DISPMES
JMP SHORT S2
S1:LEA DX,NEQMES
CALL DISPMES
S2:MOV AX,4C00H
INT 21H
READSTR PROC
R2:MOV BX,DX
LEA DX,INMES
CALL DISPMES
MOV DX,BX
MOV AH,0AH
INT 21H
XOR CH,CH
MOV CL,[BX+1]
LEA DX,CRLF
CALL DISPMES
JCXZ R1
RET
R1:LEA DX,EMPTY
CALL DISPMES
JMP SHORT R2
READSTR ENDP
DISPMES PROC
PUSH AX
MOV AH,9
INT 21H
POP AX
RET
DISPMES ENDP
CSEG ENDS
END START

这样貌似就可以了
suchx 2009-12-31
  • 打赏
  • 举报
回复
di默认的是ES段请先
mov ax,data
mov ds,ax
mov es,ax
另外你要注意
mov ah,9
int 21h
你最后输入的回车也会被读入,所以能读入的最大的字符串长度是49
cnzdgs 2009-12-31
  • 打赏
  • 举报
回复
你的代码要求输入9个字符,不是9个就报错。
炎热的夏季已经过去,家乡想必也要开始落叶了。如果我是小学生,让我以《秋》为题目作文,开头一定是“秋天是收获的季节”。是的,经过了春天的骚动,夏季的彷徨,来到了秋。这是新生报到的季节,动物贮藏食物的季节,马上就到十一长假的季节,这个季节更是收获的季节。 我们在播种时,势必首先考虑收成。种庄稼如此,学习语言更是如此。于是,“语言之争”是各个编程论坛必定讨论的话题,很多甚至是“X经”话题。对此,我的观点是:语言没有好坏之分,只有顺手不顺手和你能发挥到什么程度的问题。我们没有必要追求最新,“最先进”的编程方式,只需要学习好力所能及的语言。 VC的无所不能缺点是繁杂,稍有不慎就不知道什么地方出了包;VB常常被人耻笑过于简单,发布之后要带上一个“仓库”;Delphi虽然有快速开发的优势,但却姥姥不疼舅舅不爱的日渐西山…… 其实对于大多数人来说,我们使用什么应该是需求决定而不是语言本身决定需求,比如:我们希望自动根据数据生成表格,没有必要非用Delphi VC 调用 COM ,我们用用VBA就好了。因此,眼中只有那三种基本结构:判断 循环 跳转就差不多了,再高级一点,弄清楚什么是面向对象面向过程,随便一门语言都不会逃出这点东西。 我很佩服俄罗斯的软件,他们就是将语言工具发挥到极致的例子。比如:我在网上搜索到DOS下硬盘速度测试软件,竟然是Pascal编写的。 至于“学习好力所能及的语言”,我的意思是如果你身边有C语言的高手不妨向他请教或者同他切磋;如果你有学好数据结构的理想,不妨买一本Java描述数据结构的图书慢慢啃;如果你有网络数据库+界面的需求不妨考虑一下Delphi…… 因此,我的观点就是“语言没有好坏之分”,关键是你能掌握到什么程度。 当然,如果你能掌握汇编语言,这一切就更不在话下了。我很希望各位能够将学习语言当作乐趣,我们的杂志也将会以如何让读者在阅读中感到快乐感到成就感为目的。

21,498

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧