1. 程式人生 > >一個彙編小程式:使用者登入驗證程式

一個彙編小程式:使用者登入驗證程式

這是我們學彙編時,要求做的一個小實驗,感覺挺有趣的,就想發到部落格上來的。初學組合語言的同學,也可以借鑑參考一下。

實驗要求:

程式執行後,給出操作提示,請使用者鍵入使用者名稱和密碼;使用者在鍵入密碼時,程式不回顯鍵入字元,只有當用戶鍵入的使用者名稱、密碼字串和程式內定的字串相同時,顯示歡迎介面,並返回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

執行效果如下: