📄 1.asm
字号:
DATA SEGMENT
MESS1 DB 0AH,0DH,' PLEASE INPUT PASSWORD!' ;输入提示
DB ' SET PASSWORD PLEASE PRESS S!','$'
MESS2 DB 0AH,0DH,' PLEASE INPUT ADM_PASSWORD:','$' ;输入管理员密码提示
MESS3 DB 0AH,0DH,' PASSWORD WERE ALTERED!','$' ;密码修改成功提示
MESS4 DB 0AH,0DH,' INPUT 6 NUMKEYS AS A NEW PASSWORD!','$' ;输入新六密码提示
MESSNO DB 0AH,0DH,'$' ;换行
WELCOME DB ' welcome',0DH,0AH,'$' ;欢迎提示
WARING DB ' Warning! password is WRONG!','$' ;密码错误提示
CHECK DB 0 ,0 ;计数器
PASSWORD DB '1','1','1','1','1','1' ;密码存放处
ADM_PASS DB 'password' ;管理员密码存放处
BUF DB 7 ;输入密码存放区
DB ?
DB 7 DUP (?)
BUF_SET DB 9 ;输入的管理员密码存放区
DB ?
DB 9 DUP (?)
ERR_W DB 0AH,0DH,' WRONG PASSWORD!' ;密码错误提示要求重新输入
DB ' PLEASE INPUT PASSWORD AGAIN!','$'
ERRNUM DB 0AH,0DH,'PLEASE INPUT NUMKEY!','$'
FREQ DW 330,330,349,392,392,349,330,294 ;定义乐曲对应的频率表
DW 262,262,294,330,330,294,294 ;定义乐曲对应的频率表
DW 330,330,349,392,392,349,330,294 ;定义乐曲对应的频率表
DW 262,262,294,330,294,262,262,0 ;定义乐曲对应的频率表
TIME DW 8 dup(0FFFH) ;定义乐曲对应的节拍表
DW 4 DUP(0FFFH),1FFEH,2 DUP(0FFFH) ;定义乐曲对应的节拍表
DW 8 DUP(0FFFH) ;定义乐曲对应的节拍表
DW 4 DUP(0FFFH),1FFEH,2 DUP(0FFFH) ;定义乐曲对应的节拍表
F DW 8 DUP(3000,330),0 ;定义乐曲对应的频率表
T DW 8 DUP(1FFEH) ;定义乐曲对应的节拍表
F_D DW 523,349,523,0 ;定义乐曲对应的频率表
T_D DW 3 DUP(1FFFH) ;定义乐曲对应的节拍表
M DW 3 DUP(4EH),3 DUP(4FH),13 DUP(50H),1 DUP(51H) ;汉字横坐标
DW 10 DUP(52H),3 DUP(53H),3 DUP(54H),3 DUP(55H)
DW 7 DUP(56H),4EH,7 DUP(4FH),9 DUP(50H),5 DUP(51H)
DW 6 DUP(52H),4 DUP(53H),3 DUP(54H),3 DUP(55H)
DW 5 DUP(56H),0
N DW 49H,4DH,50H,48H,4CH,51H,47H,48H ;汉字纵坐标
DW 49H,4AH,4BH,4CH,4DH,4EH,4FH,50H,51H
DW 52H,53H,4AH,49H,4AH,4BH,4CH,4DH,4EH
DW 4FH,50H,51H,52H,48H,4AH,51H,47H,4BH
DW 4FH,46H,4CH,4DH,46H,4AH,4BH,4FH,50H
DW 51H,52H
DW 0F1H,0E6H,0E7H,0E8H,0E9H,0EAH,0EBH
DW 0ECH,0E6H,0E9H,0ECH,0EEH,0EFH,0F0H
DW 0F1H,0F2H,0F3H,0E6H,0E9H,0ECH,0EFH
DW 0F1H,0E6H,0E9H,0ECH,0EEH,0EFH,0F1H
DW 0E6H,0E9H,0ECH,0EDH,0E9H,0EBH,0F1H
DW 0E7H,0ECH,0F1H,0E6H,0EFH,0F0H,0F1H
DW 0F2H
M1 DW 2 DUP(62H),2 DUP(63H),2 DUP(64H),2 DUP(65H) ;警报符号横坐标
DW 2 DUP(66H),2 DUP(67H),2 DUP(68H),2 DUP(69H)
DW 2 DUP(6AH),2 DUP(6BH),0
N1 DW 9CH,0A5H,9DH,0A4H,9EH,0A3H,9FH,0A2H,0A0H,0A1H ;警报符号纵坐标
DW 0A0H,0A1H,9FH,0A2H,9EH,0A3H,9DH,0A4H,9CH,0A5H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX,20BH ;8255初始化
MOV AL,85H
OUT DX,AL
MOV AL,05H
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_PIC
T_INT:
NOP
JMP T_INT
MOV AH,4CH
INT 21H
DOOR PROC NEAR ;主程序
LEA DX,MESS1 ;信息提示
FRIST:
CALL NOR_PIC ;门画面
CALL SHENGYIN ;提示声音
LEA DX,BUF ;等待键入6个数字密码
MOV AH,0AH
INT 21H
LEA DI,BUF ;准备比较
LEA SI,PASSWORD
INC DI
INC DI
MOV CX,6 ;比较次数为六次
MOV AL,[DI]
CMP AL,'s' ;如果第一个字母是s则转入设置程序
JNZ L0
CALL SET
LEA DX,MESS1
JMP FRIST ;处理完毕循环
L0:
MOV AL,[DI] ;开始比较
CMP AL,[SI]
JNZ ERROR ;发现错误转入错误程序
INC DI ;增位准备下次比较
INC SI
LOOP L0
CALL WELCOME_PIC ;密码正确,进入欢迎画面
CALL WELCOME_SOUND ;发出欢迎声音
JMP FUWEI ;转入复位程序
ERROR: ;密码错
LEA BP,CHECK ;计数
MOV AL,[BP]
CMP AL,2 ;是否三次?
JNZ L1 ;不是,继续
CALL WARNING_PIC ;是,转入警告画面
CALL WARNING_SOUND ;转入警告声音
JMP FUWEI ;转入复位程序
L1:
INC AL ;计数器增加
MOV [BP],AL
LEA DX,ERR_W ;错误的文字提示
JMP FRIST ;循环
FUWEI: LEA BP,CHECK ;计数器清零
MOV AL,[BP]
MOV AL,0
MOV [BP],AL
MOV AL,20H ;中断程序复位
OUT 20H,AL
IRET
DOOR ENDP
;-----------------------------------;set子程序
SET PROC NEAR
LEA DX,MESS2 ;输入管理员密码提示
FIRST_S:
CALL NOR_PIC ;提示画面
CALL SHENGYIN ;提示声音
LEA DX,BUF_SET ;等待键入8位管理员密码
MOV AH,0AH
INT 21H
LEA DI,BUF_SET ;准备比较
LEA SI,ADM_PASS
INC DI
INC DI
MOV CX,8 ;循环8次
L0_S:
MOV AL,[DI] ;开始比较
CMP AL,[SI]
JNZ ERROR_S ;有错转入错误程序
INC DI
INC SI
LOOP L0_S ;循环
LEA DX,MESS4 ;输入新6位密码提示
CALL NOR_PIC ;提示画面
CALL SHENGYIN ;提示声音
IN_NEW:
LEA DX,BUF ;等待键入6个新数字密码
MOV AH,0AH
INT 21H
LEA DI,BUF ;准备修改密码
LEA SI,PASSWORD
INC DI
INC DI
MOV CX,6
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
LEA DX,MESS3 ;密码修改成功提示
CALL NOR_PIC ;提示画面
CALL SHENGYIN ;提示声音
JMP DONE_S ;转入复位程序
ERR_NUM:
LEA DX,ERRNUM ;错误数字提示
CALL NOR_PIC ;提示画面
CALL SHENGYIN ;提示声音
JMP IN_NEW ;提示再次输入
ERROR_S: ;密码错
LEA BP,CHECK[1] ;错误计数
MOV AL,[BP]
CMP AL,2 ;是否三次?
JNZ L1_S ;不是,继续
CALL WARNING_PIC ;是,警告画面
CALL WARNING_SOUND ;警告声音
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
;--------------------------------------;nor_pic子程序
NOR_PIC PROC NEAR
MOV AH,00H ;设置屏幕显示方式
MOV AL,0DH
INT 10H
MOV AH,0BH ;设置调色板
MOV BH,0
MOV BL,1
INT 10H
MOV AH,9 ;显示文字提示信息
INT 21H
MOV DX,1EH ;起始点设置
MOV CX,60H
L1_NOR: MOV AH,0CH ;设置绘图颜色
MOV AL,14
INT 10H
INC DX
CMP DX,0AFH ;绘图到行末尾结束
JNZ L1_NOR
MOV DX,1EH
INC CX
CMP CX,0E0H ;绘图到列末尾结束
JNZ L1_NOR
MOV DX,1EH ;起始点设置
MOV CX,60H
L2_NOR: MOV AH,0CH ;设置绘图颜色
MOV AL,6
INT 10H
INC DX
CMP DX,0AFH ;到行末尾结束
JNZ L2_NOR
L3_NOR: MOV AH,0CH ;设置绘图颜色
MOV AL,6
INT 10H
INC CX
CMP CX,0E0H ;到列末尾结束
JNZ L3_NOR
MOV DX,1EH ;起始点设置
MOV CX,60H
L4_NOR: MOV AH,0CH
MOV AL,6 ;设置绘图颜色
INT 10H
INC CX
CMP CX,0E0H ;到列末尾结束
JNZ L4_NOR
L5_NOR: MOV AH,0CH
MOV AL,6 ;设置绘图颜色
INT 10H
INC DX
CMP DX,0AFH ;到行末尾结束
JNZ L5_NOR
MOV DX,58H ;打点
MOV CX,0C0H
MOV AH,0CH
MOV AL,6
INT 10H
MOV DX,58H ;打点
MOV CX,0D0H
MOV AH,0CH
MOV AL,6
INT 10H
MOV DX,58H ;打点
MOV CX,0C8H
MOV AH,0CH
MOV AL,6
INT 10H
MOV DX,1EH ;起始点设置
MOV CX,46H
L6_NOR: MOV AH,0CH ;设置绘图颜色(左对联)
MOV AL,4
INT 10H
INC DX
CMP DX,0AFH ;到行末尾结束
JNZ L6_NOR
MOV DX,1EH
INC CX
CMP CX,5BH ;到行末尾结束
JNZ L6_NOR
MOV DX,1EH
MOV CX,0E5H
L7_NOR: MOV AH,0CH ;设置绘图颜色(右对联)
MOV AL,4
INT 10H
INC DX
CMP DX,0AFH ;到行末尾结束
JNZ L7_NOR
MOV DX,1EH
INC CX
CMP CX,0FAH ;到行末尾结束
JNZ L7_NOR
LEA DI,M
LEA SI,N
L8_NOR: MOV DX,[DI] ;汉字打点
MOV CX,[SI]
MOV AH,0CH
MOV AL,0
INT 10H
INC DI
INC SI
CMP [DI],0H
JNZ L8_NOR
RET
NOR_PIC ENDP
;-------------------------------------;welcome_pic 子程序
WELCOME_PIC PROC NEAR
MOV AH,00H ;设置屏幕显示方式
MOV AL,0DH
INT 10H
MOV AH,0BH ;设置调色板
MOV BH,0
MOV BL,1
INT 10H
MOV DX,1EH ;起始点设置
MOV CX,60H
L1_WEL: MOV AH,0CH ;设置绘图颜色
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -