;有限狀態機 Finite.asm
include irvine32.inc
ENTER_KEY=13 ;Enter鍵的ASCII碼
.data
InvalidInputMsg BYTE "Invalid input",13,10,0
.code
main PROC
call Clrscr
StateA:
call Getnext ;讀取下一個字符,並送入AL
cmp al,'+' ;前置+?
je StateB ;轉移到狀態B
cmp al,'-' ;前置-?
je StateB ;轉移到狀態B
call IsDigit ;如果AL包含數字,則ZF=1
jz StateC ;到狀態C
call DisplayErrorMsg;發現非法輸入
jmp Quit ;退出
StateB:
call Getnext ;讀取下一個字符,並送入AL
call IsDigit ;如果Al中包含數字,則ZF=1
jz StateC ;
call DisplayErrorMsg;
jmp Quit ;
StateC:
call Getnext ;讀取下一個字符,並送入AL
call IsDigit ;如果Al中包含數字,則ZF=1
jz StateC
cmp al,ENTER_KEY ;按下enter鍵?
je Quit ;是,退出
call DisplayErrorMsg;否,發現非法輸入
jmp Quit ;
Quit:
call WaitMsg ;
call Crlf ;
exit ;
main ENDP ;
;--------------------------------------------------
Getnext proc
;
;從標準輸入中讀入一個字符
;接收:無
;返回:字符保存在AL中
;--------------------------------------------------
call ReadChar ;從鍵盤讀入
call WriteChar ;顯示在屏幕上
ret ;
Getnext ENDP
;--------------------------------------------------
DisplayErrorMsg PROC
;
;顯示一個錯誤消息儀表示輸入流中含有非法輸入
;接收:無
;返回:無
;--------------------------------------------------
push edx
mov edx,OFFSET InvalidInputMsg
call WriteString
pop edx
ret
DisplayErrorMsg ENDP
END main
025.利用有限狀態機判斷輸入的符號是否爲數字
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.