025.利用有限狀態機判斷輸入的符號是否爲數字

;有限狀態機		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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章