南郵彙編實驗
使用者登陸驗證程式的設計
第二次實驗,名稱“使用者登陸驗證程式的設計”,實驗要求:
1)運作程式後,界面首先出現自己的學号,例如“B18060701”
2)在學号下方輸入登入密碼,密碼長度不超過30個字元。密碼内容不能顯示在螢幕上,要求用字元*替代。
3)驗證輸入密碼與事先設定的密碼是否相同,如果密碼正确,給出提示“OK”,程式結束;如果密碼不正确,重新輸出學号,繼續輸入密碼。
4)選作内容:如果連續5次密碼輸入都不正确,界面提示“LOCKED”,退出程式。
提示: 1)為了實作在學号下方輸入登入密碼,輸出學号時後面要跟着回車換行符
2)密碼輸入不能用DOS的0A号功能調用,雖然該功能允許鍵盤輸入字元串,但是會明碼顯示在界面上,可以使用DOS的8号功能調用
3)程式包括資料段和代碼段。其中資料段至少需要定義4個字元串,一個是自己的學号,一個是事先設定的密碼,一個是鍵盤輸入的密碼,一個是“OK”。(實作選作功能時,可以再增加2個變量)
4)記錄鍵盤輸入的密碼串時,需要用到循環操作。密碼輸入如果不滿30就結束,可以自行設定結束标記 5)
判斷輸入密碼串與事先設定的密碼串是否相等,請使用LOOP實作循環判斷。雖然使用大家上課沒有學過的串操作指令也可以實作兩個字元串的比較,但是不利于大家對課堂已學内容的掌握和鞏固,是以請不用使用串操作指令。
;.486
DATA SEGMENT
MESG1 DB 'B18060522$'
MESG2 DB 'INPUT PASSWORD:$'
PWD DB 30 DUP(?)
PWDLENGTH DB 0
U DB 'B18xxxxxx'
ULENGTH EQU $-U
P DB 'xxxxxx'
MLENGTH EQU $-P
WELCOME DB 'OK$'
ERROR DB 'LOCKD$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
BEG: MOV AX,DATA
MOV DS,AX
MOV DI,5
NEXT0:
CMP DI,0
JZ ERR
MOV PWDLENGTH,0
MOV AH,09H
MOV DX,OFFSET MESG1 ;顯示學号
INT 21H
MOV AH,02H
MOV DL,0AH ;換行
INT 21H
MOV AH,09H
MOV DX,OFFSET MESG2 ;顯示input pwd
INT 21H
MOV CX,MLENGTH
MOV SI,OFFSET PWD
NEXT1:
MOV AH,07H ;無回顯從鍵盤讀入一個字元
INT 21H
CMP AL,0DH
JE NEXT2 ;等于回車符号則跳轉IND
MOV [SI],AL
MOV AH,02H ;顯示字元
MOV DX,'*'
INT 21H
INC PWDLENGTH ;輸入的密碼長度+1
INC SI ;密碼源變址寄存器的位址+1
JMP NEXT1
NEXT2:
MOV AH,02H
MOV DL,0AH ;換行
INT 21H
DEC DI
MOV BX,OFFSET P
MOV SI,OFFSET PWD
MOV CL,PWDLENGTH
MOV CH,0
CMP CX,MLENGTH ;比較密碼長度
JNZ NEXT0
MOV CX,MLENGTH
NEXT3:
MOV AL,[BX]
CMP [SI],AL
JNZ NEXT0
INC SI
INC BX
LOOP NEXT3
JMP WEL
WEL: MOV AH,09H
MOV DX,OFFSET WELCOME
INT 21H
JMP EXIT
ERR: MOV AH,09H
MOV DX,OFFSET ERROR
INT 21H
JMP EXIT
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END BEG