English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

試設計一個密碼程式,密碼為七位英文或數字。程式執行後會要求輸入密碼,密碼輸入時,不會顯示密碼(參考18-1~18-5頁),而是顯示*號。密碼正確時,顯示正確訊息並結束程式。密碼錯誤時,顯示錯誤訊息並要求重新輸入。若連續三次錯誤,則顯示電腦當機並結束程式

拜託了要註解喔

2007-12-19 16:33:13 · 1 個解答 · 發問者 ? 1 in 電腦與網際網路 程式設計

1 個解答

.MODEL SMALL
.STACK 100H
.DATA
MSG1 DB 0AH,0DH,'please input the password: $'
MSG2 DB 0AH,0DH,'it is wrong!, please input : $'
MSG3 DB 0AH,0DH,'the password is correct $'
MSG4 DB 0AH,0DH,'you have tried 3 times$'
BUFFER DB 7 DUP(?) ;存放輸入密碼之緩衝區
PASSWORD DB '1234567$' ;存放密碼為1234567
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
MOV ES,AX ;ES與DS指向同一個資料節區起始位址
XOR SI,SI ;為了指向BUFFER第一個位址
MOV BH,3 ;允許密碼錯誤次數設定
MOV AH,9
LEA DX,MSG1
INT 21H
NEXT:
MOV CX,7 ;輸入7位數 ,迴圈設7
N:
MOV AH,8
INT 21H ;8號程式 ,輸入不顯示出來
MOV BUFFER[SI],AL ;密碼存入BUFFER
INC SI
MOV AH,2
MOV DL,'*'
INT 21H
LOOP N
CLD ;設定DF為0
LEA SI,PASSWORD ;令DS指向PASSWORD起始位址
LEA DI,BUFFER ;令ES指向BUFFER起始位址
MOV CX,7
REPZ CMPSB ;DS與ES相減 比較7次(重覆作到CX為0或ZF=0就中斷執行)
JZ RIGHT ;比較結束後,若ZF=1 表示2字串相減結果皆為0 ,密碼正確
DEC BH
CMP BH,0
JE WRONG
MOV AH,9
LEA DX,MSG2
INT 21H
JMP NEXT
WRONG:
MOV AH,9
LEA DX,MSG4
INT 21H
MOV AH,1
INT 21H
JMP DOS
RIGHT:
MOV AH,9
LEA DX,MSG3
INT 21H
MOV AH,1
INT 21H
DOS:
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
;題目:輸入7位數密碼正確顯示正確訊息並離開DOS,錯誤則顯示錯誤訊息並要求重輸入
;錯誤3次就令系統當機出現當機訊息(利用 INT 61H 指令),另外輸入密碼時不顯示輸入字元(利用8號程式將字元讀入AL但不顯示在螢幕)
;輸入密碼時只顯示* 字符號
;筆者密碼設:1234567
;REPZ CMPSB 2字串相減為0表示2數相同 密碼正確,所以只要檢查ZF是否最後為1 即正確,若最後ZF=0即錯誤。表示其中有2數相減不為0
如果你仍看不懂那我將要刪文謝謝

2007-12-20 14:10:15 · answer #1 · answered by eric 7 · 0 0

fedest.com, questions and answers