;有限状态机 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.利用有限状态机判断输入的符号是否为数字
最新推荐文章于 2021-06-18 16:26:20 发布