📄 zhk1.asm
字号:
DATA SEGMENT
MESS1 DB ' PLEASE INPUT PASSWORD!'
DB 0AH,0DH, ' SET PASSWORD PLEASE PRESS A!'
DB 0AH,0DH, ' CANCEL PASSWORD PLEASE INPUT C!'
DB 0AH,0DH,'$'
MESS2 DB 0AH,0DH,' PLEASE INPUT ADM_PASSWORD'
DB 0AH,0DH,'$'
MESS3 DB 0AH,0DH,' PASSWORD WERE ALTERED!','$'
MESS4 DB 0AH,0DH,' INPUT 6 NUMKEYS AS A NEW PASSWORD!'
DB 0AH,0DH,'$'
MESS5 DB 0AH,0DH,' INPUT NEW PASSWORD AGAIN!'
DB 0AH,0DH,'$'
MESS6 DB 0AH,0DH,' WARNING! PASSWORD IS DIFFERENT!'
DB 0AH,0DH, ' INPUT 6 NUMKEYS AGAIN!'
DB 0AH,0DH,'$'
MESS7 DB 0AH,0DH,' PASSWORD HAS BEEN CANCELED!','$'
MESSNO DB 0AH,0DH,'$'
WELCOME DB 0AH,0DH, ' WELCOME',0DH,0AH,'$'
WARING DB 0AH,0DH, ' WARNING! PASSWORD IS WRONG!','$'
CHECK DB 0 ,0
PASSWORD DB 1,2,3,4,5,6
ADM_PASS DB 6,5,4,3,2,1
KEYTAB DB 0E7H,0D7H,0B7H,077H,0EBH,0DBH
DB 0BBH,07BH,0EDH,0DDH,0BDH,07DH
DB 0EEH,0DEH,0BEH,07EH
BUF1 DB 7 DUP(?)
BUF2 DB 7 DUP(?)
FLAG DB 1
ERR_W DB 0AH,0DH,' WRONG PASSWORD!'
DB' PLEASE INPUT PASSWORD AGAIN!'
DB 0AH,0DH,'$'
ERRNUM DB 0AH,0DH,'PLEASE INPUT NUMKEY!','$'
FREQ DW 262,294,330,330,330,349,330,294
DW 294,262,294,294,392,294,262,247
DW 262,262,262,330,330,262,262,220
DW 247,247,330,247,0
TIME DW 10 DUP(0FFFH),01FFEH,2 DUP(0FFFH),01FFEH
DW 10 DUP(0FFFH),01FFEH,2 DUP(0FFFH),01FFEH
DW 2 DUP(0FFFH)
F DW 15 DUP(3000),0
T DW 15 DUP(1FFEH)
F_D DW 523,349,0
T_D DW 1 DUP(1FFFH),0FFFH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV DX,20BH
MOV AL,85H
OUT DX,AL
MOV AL,0EH
OUT DX,AL
MOV AX,0
MOV ES,AX
MOV DI,0BH*4
LEA AX,DOOR
MOV ES:[DI],AX
MOV AX,SEG DOOR
MOV ES:[DI+2],AX
IN AL,21H
AND AL,0F7H
OUT 21H,AL
STI
LEA DX,MESSNO
CALL NOR_PIC1
T_INT:
NOP
JMP T_INT
MOV AH,4CH
INT 21H
DOOR PROC NEAR
LEA DX, MESS1
FIRST:
MOV AL, FLAG
CMP AL, 0
JZ WELCOME1
CALL NOR_PIC
CALL DDONG
CALL INPUT
MOV CX,6
LEA SI, PASSWORD
LEA DI,BUF1
MOV AL, [DI]
CMP AL, 0AH
JNZ M1
CALL SET
JMP DONE
M1:
CMP AL, 0CH
JNZ MMMM
CALL CLEAR
JMP DONE
MMMM:
MOV AL,[SI]
CMP AL,[DI]
JNZ ERROR
INC SI
INC DI
LOOP MMMM
WELCOME1:
CALL WELCOME_PIC
CALL WELCOME_SOUD
JMP DONE
ERROR:
LEA BP, CHECK
MOV AL,[BP]
CMP AL,2
JNZ LL1
CALL WARNING_PIC
CALL WARNING_SOUD
JMP DONE
LL1:
INC AL
MOV [BP], AL
LEA DX, ERR_W
JMP FIRST
DONE:
LEA BP, CHECK
MOV AL,[BP]
MOV AL,0
MOV [BP],AL
MOV AL,20H
OUT 20H,AL
MOV DX,20BH
MOV AL,85H
OUT DX,AL
MOV AL,0EH
OUT DX,AL
IRET
DOOR ENDP
SET PROC NEAR
LEA DX, MESS2
FIRST_S:
CALL NOR_PIC
CALL DDONG
CALL INPUT
LEA DI, BUF1
LEA SI, ADM_PASS
MOV CX, 6
L0_S:
MOV AL, [DI]
CMP AL, [SI]
JNZ ERROR_S
INC DI
INC SI
LOOP L0_S
LEA DX, MESS4
CALL NOR_PIC
CALL DDONG
IN_NEW:
CALL INPUT
LEA SI,BUF1
LEA DI,BUF2
MOV CX,6
L9:
MOV AL, [SI]
MOV [DI], AL
INC SI
INC DI
LOOP L9
LEA DX, MESS5
CALL NOR_PIC
CALL DDONG
CALL INPUT
MOV CX, 6
LEA SI, BUF1
LEA DI, BUF2
MMMMM:
MOV AL, [SI]
CMP AL, [DI]
JZ ASDAD
LEA DX,MESS6
CALL NOR_PIC
CALL DDONG
JMP IN_NEW
ASDAD:
LOOP MMMMM
MOV CX,6
LEA DI,BUF1
LEA SI,PASSWORD
L_NUM:
MOV AL, [DI]
CMP AL, 0
JB ERR_NUM
CMP AL, 9
JA ERR_NUM
MOV [SI], AL
INC DI
INC SI
LOOP L_NUM
MOV FLAG, 1
LEA DX, MESS3
CALL NOR_PIC
CALL DDONG
JMP DONE_S
ERR_NUM:
LEA DX, ERRNUM
CALL NOR_PIC
CALL DDONG
JMP IN_NEW
ERROR_S:
LEA BP,CHECK[1]
MOV AL,[BP]
CMP AL,2
JNZ L1_S
CALL WARNING_PIC
CALL WARNING_SOUD
JMP DONE_S
L1_S:
INC AL
MOV [BP], AL
LEA DX, ERR_W
JMP FIRST_S
DONE_S:
LEA BP, CHECK[1]
MOV AL, [BP]
MOV AL, 0
MOV [BP], AL
RET
SET ENDP
CLEAR PROC NEAR
LEA DX,MESS2
FIRST_C:
CALL NOR_PIC
CALL DDONG
CALL INPUT
LEA DI, BUF1
LEA SI, ADM_PASS
MOV CX, 6
L0_C:
MOV AL,[DI]
CMP AL,[SI]
JNZ ERROR_C
INC DI
INC SI
LOOP L0_C
LEA DX, MESS7
CALL NOR_PIC
CALL DDONG
MOV FLAG,0
JMP DONE_C
ERROR_c:
LEA BP,CHECK[1]
MOV AL,[BP]
CMP AL,2
JNZ L1_C
CALL WARNING_PIC
CALL WARNING_SOUD
JMP DONE_C
L1_C:
INC AL
MOV [BP], AL
LEA DX, ERR_W
JMP FIRST_C
DONE_C:
LEA BP, CHECK[1]
MOV AL, [BP]
MOV AL, 0
MOV [BP], AL
RET
CLEAR ENDP
INPUT PROC NEAR
MOV AL, 89H
MOV DX, 20BH
OUT DX, AL
LEA DI,BUF1
AGN: MOV AL, 0
MOV DX, 208H
OUT DX, AL
L0: MOV DX, 20AH
IN AL, DX
AND AL, 0FH
CMP AL, 0FH
JZ AGN
MOV BH, AL
CALL DELAY
MOV AL, 0FEH
MOV BL, AL
L1: MOV DX, 208H
OUT DX, AL
MOV DX, 20AH
IN AL ,DX
AND AL, 0FH
CMP AL, 0FH
JNZ L2 ;有键按下,转L2
ROL BL, 1
MOV AL, BL
JMP L1
L2: MOV CL, 4
SAL BH, CL
AND BL, 0FH
OR BL, BH
CALL DELAY
LEA SI, KEYTAB
MOV BH, 0
L3: MOV AL, [SI]
CMP AL, BL
JE L4
INC BH
INC SI
JMP L3
L4: MOV DX, 20AH
L5: IN AL, DX
AND AL, 0FH
CMP AL, 0FH
JNE L5
CALL DELAY
MOV [DI], BH
INC DI
AND AL, 0FH
MOV AL, BH
ADD AL, 30H
CMP AL, 3AH
JL TTL
ADD AL, 7H
TTL: MOV DL, AL
MOV AH, 02H
INT 21H
MOV AL ,BH
CMP AL,0AH
JZ EXIT
CMP AL, 0BH
JZ EXIT
CMP AL, 0CH
JNZ AGN
EXIT: RET
INPUT ENDP
DELAY PROC NEAR
PUSH AX
PUSH CX
PUSH DX
MOV CX, 1
MOV DX, 10
MOV AH, 86H
INT 15H
POP DX
POP CX
POP AX
RET
DELAY ENDP
NOR_PIC1 PROC NEAR
MOV AH,00H
MOV AL,0DH
INT 10H
MOV AH,0BH
MOV BH,0
MOV BL,2
INT 10H
MOV AH,9
INT 21H
MOV DX,1EH
MOV CX,50H
L1_NORF1: MOV AH,0CH
MOV AL,14
INT 10H
INC DX
CMP DX,46H
JNZ L1_NORF1
MOV DX,1EH
INC CX
CMP CX,0F0H
JNZ L1_NORF1
MOV DX,47H
MOV CX,50H
L2_NORF1: MOV AH,0CH
MOV AL,1
INT 10H
INC DX
CMP DX,0AFH
JNZ L2_NORF1
MOV DX,47H
INC CX
CMP CX,0A0H
JNZ L2_NORF1
MOV DX,47H
MOV CX,0A1H
L5_NORF1: MOV AH,0CH
MOV AL,1
INT 10H
INC DX
CMP DX,0AFH
JNZ L5_NORF1
MOV DX,47H
INC CX
CMP CX,0F0H
JNZ L5_NORF1
MOV DX,46H
MOV CX,50H
L3_NORF1: MOV AH,0CH
MOV AL,5
INT 10H
INC CX
CMP CX,0F0H
JNZ L3_NORF1
MOV DX,46H
MOV CX,0A0H
L4_NORF1: MOV AH,0CH
MOV AL,5
INT 10H
INC DX
CMP DX,0AFH
JNZ L4_NORF1
MOV DX,1EH
MOV CX,50H
L6_NORF1: MOV AH,0CH
MOV AL,5
INT 10H
INC DX
CMP DX,0AFH
JNZ L6_NORF1
MOV DX,1EH
MOV CX,0F0H
L7_NORF1: MOV AH,0CH
MOV AL,5
INT 10H
INC DX
CMP DX,0B0H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -