一个汇编小程序:用户登录验证程序

这是我们学汇编时,要求做的一个小实验,感觉挺有趣的,就想发到博客上来的。初学汇编语言的同学,也可以借鉴参考一下。

实验要求:

程序执行后,给出操作提示,请用户键入用户名和密码;用户在键入密码时,程序不回显键入字符,只有当用户键入的用户名、密码字符串和程序内定的字符串相同时,显示欢迎界面,并返回DOS。

代码里面有比较详细的注释,感兴趣的同学可以看看。

代码:

      ;FILENAME: EXERCISE2.ASM
      .486

 DATA       SEGMENT     USE16
 MESG1      DB          0DH,0AH,'Please input username:$'
 MESG2      DB          0DH,0AH,'Please input password:$'
 MESG3      DB          0DH,0AH,'LOGIN INCORRECT!$'
 USERNAME   DB          'B12040331$'
 PASSWORD   DB          '123456789$'
 FLAG       DB          ?
 BUF        DB          30
            DB          ?
            DB          30    DUP(?)
 DATA       ENDS
 
 CODE       SEGMENT     USE16
            ASSUME      CS:CODE,DS:DATA
 BEG:       MOV         AX,DATA
            MOV         DS,AX
            MOV         ES,AX

 AGA:       MOV         FLAG,0
            MOV         AH,9        ;显示提示信息(用户名)
            MOV         DX,OFFSET   MESG1
            INT         21H
            
            MOV         AH,0AH       ;输入用户名
            MOV         DX,OFFSET   BUF
            INT         21H
            MOV         BL,BUF+1
            MOV         BH,0
            MOV         SI,OFFSET   BUF+2
            MOV         BYTE  PTR   [BX+SI],'$'

            MOV         SI,OFFSET   BUF+2      ;验证用户名是否正确
            MOV         DI,OFFSET   USERNAME
            MOV         CX,9
            CLD
            REPE        CMPSB
            MOV         FLAG,CL
        
            MOV         AH,9          ;显示提示信息(密码)
            MOV         DX,OFFSET   MESG2
            INT         21H
            
            MOV         SI,OFFSET BUF+2 ;处理输入密码
INPUT:      MOV         AH,0CH          ;清除键盘缓冲区
            INT         21H
            MOV         AH,8
            INT         21H
            CMP         AL,13
            JZ          NEXT
            MOV         [SI],AL
            INC         SI
            MOV         AH,2
            MOV         DL,2AH
            INT         21H
            JMP         INPUT
            
 NEXT:      CMP         FLAG,0
            JNZ         LERROR
            MOV         SI,OFFSET   BUF+2      ;验证密码是否正确
            MOV         DI,OFFSET   PASSWORD
            MOV         CX,9
            CLD
            REPE        CMPSB
            JNZ         LERROR
            
            MOV         AH,4CH
            INT         21H
            
LERROR:     MOV         AH,9
            MOV         DX,OFFSET   MESG3
            INT         21H
            JMP         AGA
CODE        ENDS
            END         BEG

运行效果如下:

一个汇编小程序:用户登录验证程序_第1张图片

你可能感兴趣的:(微机原理)