DATAS SEGMENT
;此處輸入資料段代碼
DOC DB 0DH, 0AH, '======================================='
DB 0DH, 0AH, '| Simple password sysytem |'
DB 0DH, 0AH, '| Copy Right By DDDDD 2014-3-28 |'
DB 0DH, 0AH, '=======================================$'
XING DB 0DH, 0AH, '*************************************$'
SETPASS DB 0DH, 0AH, 'Please set your password:$'
RESPASS DB 0DH, 0AH, 'Please set your password again:$'
SORRY DB 0DH, 0AH, 'The two password you have set is not same!!!$'
INPUT DB 0DH, 0AH, 'Please input your password:$'
SUCCESS DB 0DH, 0AH, 'WOW! Your card has 10000 dollars!$'
FAIL DB 0DH, 0AH, 'SORRY! your password is not right$'
TWO DB 0DH, 0AH, 'YOU have only two chance now!$'
ONE DB 0DH, 0AH, 'YOU have only one chance now!$'
ZERO DB 0DH, 0AH, 'YOU have no chance now!$'
PASS DB 7 ;設定密碼 存放位置
DB ?
DB 7 DUP(?)
PASS1 DB 7 ;再次設定密碼 存放位置
PASS2 DB 7 ;輸入密碼 存放位置
DATAS ENDS
STACKS SEGMENT
;此處輸入堆棧段代碼
STACKS ENDS
EXTRA SEGMENT
PASS11 DB 9 DUP(?) ;PASS1 拷貝到PASS11
PASS22 DB 9 DUP(?) ;PASS2 拷貝到PASS22
EXTRA ENDS
CODES SEGMENT
ASSUME CS:CODES, DS:DATAS, SS:STACKS, ES:EXTRA
START:
MOV AX, DATAS
MOV DS, AX
MOV AX, EXTRA
MOV ES, AX
;此處輸入代碼段代碼
MOV AH, 9 ;9号功能,螢幕輸出字元串
LEA DX, DOC ;列印版權,将字元串首位址給DX
INT 21H
MOV AH, 9
LEA DX, XING ;列印*****
MOV AH, 9H
LEA DX, SETPASS ;列印Please set your password:
MOV AH, 0AH ;0AH 等待輸入字元串
LEA DX, PASS ;設定密碼,密碼存放在PASS
LEA DX, RESPASS ;列印Please set your password again:
MOV AH, 0AH
LEA DX, PASS1 ;再次設定密碼,密碼存放在PASS1
CALL CMPPASS01 ;比較兩次設定密碼是否相同
JE SAME
MOV AH, 9H
LEA DX, SORRY ;兩次設定密碼不同,列印The two password you have set is not same!!!
INT 21H
JMP START
SAME: ;密碼設定正确
LEA DX, XING ;列印******
LEA DX, INPUT ;列印please input your password:
INT 21H
MOV AH, 0AH ;輸入密碼
LEA DX, PASS2 ;密碼存放在PASS2
CALL CMPPASS02 ;比較輸入的密碼和設定的密碼
JE RMB ;相同,則會顯示餘額
LEA DX, FAIL ;不相同提示失敗,SORRY! your password is not right
LEA DX, TWO ;還有2次機會,YOU have only two chance now!
INT 21H
LEA DX, XING ;列印*******************
MOV AH, 0AH
LEA DX, PASS2 ;第二次輸入密碼,密碼存放在PASS2
CALL CMPPASS02 ;比較輸入的密碼和設定的密碼
LEA DX, ONE ;還有1次機會,YOU have only one chance now!
LEA DX, XING ;列印**********
LEA DX, PASS2 ;第三次輸入密碼,密碼存放在PASS2
LEA DX, ZERO ;沒有機會了 you have no chance
JMP OVER
RMB:
LEA DX, XING ;列印*****
MOV AH, 9H
LEA DX, SUCCESS ;顯示餘額 your card have 10000 dollars!
INT 21H
OVER:
MOV AH,4CH
INT 21H
CMPPASS01 PROC
LEA SI, PASS1 ;源位址PASS1
LEA DI, PASS11 ;目标位址PASS11
MOV CX, 9
CLD
REP MOVSB ;将輸入的密碼移動到附加段PASS11,位元組移動,重複次數cx
LEA SI, PASS ;源位址PASS,資料段
LEA DI, PASS11 ;目标位址PASS11,附加段
REPE CMPSB ;比較輸入的密碼和設定的密碼,位元組比較重複次數cx,不等于會自動退出比較
RET
CMPPASS01 ENDP
CMPPASS02 PROC
LEA SI, PASS2
LEA DI, PASS22
LAST11:
MOVSB ;采用loop循環進行位元組移動,循環次數cx
LOOP LAST11
LEA SI, PASS
LAST21:
CMPSB
JNE OVER11 ;發現不等于就跳出,不比較了
LOOP LAST21
OVER11:
CMPPASS02 ENDP
CODES ENDS
END START