⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.asm

📁 计算机硬件技术课程设计
💻 ASM
📖 第 1 页 / 共 2 页
字号:
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 + -