📄 shibie.asm
字号:
DISP MACRO VAR ;输出字符串
PUSH DX
MOV AH,9
LEA DX,VAR
INT 21H
POP DX
ENDM
DATA SEGMENT USE16
STRING DB 'LIUMEI 123 LIHUA 345 XIAOKE 9834 '
INWORD DB '*$'
LENS EQU $-STRING
BUF DB LENS+1
DB ?
DB LENS+1 DUP(?)
MESG DB 0DH,0AH,'$'
MESG1 DB "INPUT NAME AND PASSWORD:",0DH,0AH,"$"
MESG2 DB 0AH,"WELCOME!$"
MESG3 DB 0AH,"SORRY,NAME OR PASSWORD IS WRONG!$"
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,ES:DATA
BEG:MOV AX,DATA
MOV ES,AX
MOV DS,AX
DISP MESG1
LEA SI,STRING
MOV AH,0AH ;用户名输入
LEA DX,BUF
INT 21H
MOV AL,BUF+1 ;用户名长度
CMP AL,0
JZ NFOUND
CLD
;比较时预先将需比较的字符串长度输入AH
AGAIN:PUSH SI
MOV AH,0
NEXT:CMP STRING[SI],'$'
JZ NFOUND
CMP STRING[SI],20H ;每个字符串都以空格为结束符
JZ LAST
INC AH ;AH<=字符串长度
INC SI
JMP NEXT
LAST:CMP AH,AL
JZ MATCH
INC SI ;搜索下一字符串匹配
JMP AGAIN
MATCH:POP SI ;相同长度的用户名匹配
MOV DI,OFFSET BUF+2
MOV CL,AL
MOV CH,0
REPE CMPSB
JZ FOUND
JNZ AGAIN
;密码匹配
FOUND:DISP MESG
INC SI
PUSH DI
INPUT:MOV AH,08
INT 21H
CMP AL,0DH ;判断密码是否输入结束
JZ INEND
MOV [DI],AL
INC DI
DISP INWORD ;输出*
JMP INPUT
;密码匹配比较
INEND:MOV AX,DI
POP DI
SUB AX,DI ;输入密码长度存入AL
CMP AL,0
JZ NFOUND
MOV CL,AL
MOV CH,0
CLD
REPE CMPSB ;密码是否匹配
JNZ NFOUND
CMP STRING[SI],20H ;需匹配的密码是否完全匹配,若未完全匹配则匹配失败
JNZ NFOUND
DISP MESG2
JMP EXIT
NFOUND:DISP MESG3
EXIT:MOV AH,4CH
INT 21H
CODE ENDS
END BEG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -