程式碼:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
TITLE 程式執行時先顯示「輸入密碼」,如果輸入「ncyu CSIE」就顯示「通過」,如果不是顯示「密碼不正確」,如果錯誤三次則顯示「不通過」 (h401.asm) | |
INCLUDE Irvine32.inc | |
;INCLUDE 指令會從位於組譯器的INCLUDE目錄內的Irvine32.inc文字檔中,複製必要的定義與初始資訊 | |
.data | |
;.data標記程式中含有變數的區域 | |
Startstring BYTE "please key in the passwords: ",0 | |
string_1 BYTE 21 DUP(0) ;輸入緩衝區 | |
byteCount DWORD ? ;輸入字元計數器 | |
tag DWORD 0t | |
string_2 BYTE "ncyu CSIE",0 | |
msg1 BYTE "通過",0 | |
msg2 BYTE "密碼不正確",0 | |
msg3 BYTE "不通過",0 | |
.code | |
;.code指引標記著程式碼區段起始的位置,所有可執行的敘述,都會放在程式碼區段內 | |
main PROC | |
;PROC指引標記著程序的起始位置 | |
mov ecx,3 ;ecx表示迴圈跑的次數 | |
mov ebx,0t | |
L1: | |
lea edx,offset startstring ;將字串移至edx暫存器中 | |
call WriteString ;顯示在edx暫存器中的字串 | |
mov edx,OFFSET string_1 ;緩衝區的位移 | |
mov ecx,SIZEOF string_1 ;指定所輸入字元的最大數量 | |
call ReadString ;輸入字串 | |
mov byteCount,eax ;存放所鍵入的字元數量 | |
call compare_strings | |
mov eax,tag | |
cmp eax, 1 | |
je L3 | |
inc ebx | |
cmp ebx ,3t | |
je L2 | |
loop L1 | |
L2: | |
mov edx,OFFSET msg3 | |
call WriteString | |
L3: | |
call Crlf | |
exit ;exit表示將(非直接)呼叫一個預先定義的MS-Windows函式,此函式的作用是停止此程式的執行 | |
main ENDP;ENDP標記main程序的結束位置 | |
compare_strings PROC | |
;比較string_1及string_2 | |
INVOKE str_compare,ADDR string_1,ADDR string_2 | |
.IF ZERO? | |
mov edx, OFFSET msg1 | |
inc tag | |
.ELSE | |
mov edx, OFFSET msg2 | |
.ENDIF | |
call WriteString | |
call Crlf | |
ret | |
compare_strings ENDP | |
END main;標記此程式啟動的程序 | |
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。