0

前述のバージョンのアセンブリでFSMを実装しようとしていますが、どのアプローチを取るべきかを知らずに遠くまで行くことはできないようです。共有したい実装を持っている人はいますか?

私の主な関心事は、この特定のタスクにジャンプとループを使用する方法です。

さらに、アセンブリで再帰的な「メソッド」を作成する方法と、それがこのタスクでうまくいくかどうかを知っている人はいますか?

4

1 に答える 1

1

設計を可能な限りデータ駆動型にすることをお勧めします。FSMを可能な限りデータで説明する。

状態と次の状態の 2 次元テーブルとして 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 
于 2012-11-02T17:56:32.453 に答える