2012-10-23 53 views
0

我試圖在上述裝配版本中實現一個FSM,但似乎在不知道採取哪種方法的情況下會變得很遠。有沒有人有他們願意分享的實施?裝配中的有限狀態機(MASM615)

我主要關心的是如何在這個特定任務中使用跳轉和循環。

此外,有沒有人知道我如何可以在程序集中製作遞歸「方法」,以及這對於此任務是否能很好地工作?

+0

我道歉,如果這個問題是多餘的,但我不能涉及到已經在網站上公佈的那些,他們似乎非常不同。 –

+1

如果有幫助,請先用其他語言實施FSM。此外,總是繪製你的FSM。可視化圖表非常有用。 –

+0

謝謝...虐待嘗試蟒蛇。你能給我一個關於在程序集中使用遞歸的技巧嗎? –

回答

1

我會建議讓您的設計儘可能以數據驅動;儘可能多地描述你的FSM數據。

我實現了DFA作爲狀態和下一狀態的二維表,並根據此表製作了一個簡單的迭代電機,用於讀取輸入並更改狀態。

這是表是什麼樣子(FASM):

dfa_chars  db  '=','<','>','!','/',',','*','(',')','{','}','+','-',' ',';',TAB, CR, LF; N, A 

dfa    db  $07,$04,$05,$06,$0a,$10,$11,$12,$13,$14,$15,$16,$17,$00,$18,$00,$0b,$1d,$08,$09; 0 WS 
       db  $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$0b,$1d,$01,$01; 1 // 
       db  $02,$02,$02,$02,$02,$02,$03,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02; 2 /* 
       db  $02,$02,$02,$02,$1d,$02,$03,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02; 3 /** 
       db  $19,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20; 4 < 
       db  $1a,$21,$21,$21,$21,$21,$21,$21,$21,$21,$21,$21,$21,$21,$21,$21,$21,$21,$21,$21; 5 > 
       db  $1b,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22; 6 ! 
       db  $1c,$23,$23,$23,$23,$23,$23,$23,$23,$23,$23,$23,$23,$23,$23,$23,$23,$23,$23,$23; 7 = 
       db  $24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$08,$24; 8 N 
       db  $25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$25,$09,$09; 9 A+N 
       db  $26,$26,$26,$26,$01,$26,$02,$26,$26,$26,$26,$26,$26,$26,$26,$26,$26,$26,$26,$26; a/
       db  $27,$27,$27,$27,$27,$27,$27,$27,$27,$27,$27,$27,$27,$27,$27,$27,$27,$1d,$27,$27; b CR