DATAS SEGMENT
mima db 7
db 7 dup(?)
string db "123456"
cout1 db 0dh,0ah,"MATCH","$"
cout2 db 0dh,0ah,"NO MATCH","$";此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov dx,seg mima
mov ds,dx
mov dx,offset mima
mov ah,10
int 21h
lea si,mima
lea di,string
mov bx,[di]
mov cx,6
all: cmp bx,[si]+1
jnz again
inc si
inc bx
loop all
mov ah,09h
mov dx,offset cout1
int 21h
again:mov ah,9
mov dx,offset cout2
int 21h ;
MOV AH,4CH
INT 21H
CODES ENDS
END START
即使我输入123456 也只会输出 NO MATCH 求指点
------解决方案--------------------------------------------------------
在那个比较的 cmp 指令上设断点,看看为什么会不对。
首先,数据定义不对。int21h 的 0ah 功能的输入区,你少定义了一个字节。其次,比较逻辑错误,逐字节比较,用 bx 不合适吧;逐字节比较,后来就不管 di 了?
------解决方案--------------------------------------------------------
以前做过的练习,供楼主参考。
- Assembly code
assume cs:code,ds:data,es:datadata segmentmsg1 db 'Error!$'msg2 db 'Congratulation!$'buff db 10 dup (0) ;输入缓冲区pw db '123456' ;密码data endscode segmentstart: mov ax,data mov ds,ax mov es,ax mov cx,3 ;3次输入机会s: push cx mov si,offset buff mov cx,sizeof pw ;取密码长度s1: mov ah,8 ;无回显输入 int 21h mov byte ptr [si],al mov dl,'*' ;用*号显示输入字符 mov ah,2 int 21h inc si loop s1;回车 mov ah,2 mov dl,13 int 21h mov dl,10 int 21h;煮字节比较 mov cx,sizeof pw mov si,offset buff mov di,offset pw cld repz cmpsb jne jx jmp okjx: mov dx,offset msg1 mov ah,9 int 21h mov ah,2 mov dl,13 int 21h mov dl,10 int 21h pop cx loop s jmp doneok: mov dx,offset msg2 mov ah,9 int 21h done: mov ah,4ch int 21hcode endsend start
------解决方案--------------------------------------------------------