マイクロCコンパイラmccにようやくFOR文を拡張することができました。
2023年7月4日のブログ「コンパイラ作成の試み その2 言語の拡張(コメントとFOR文など)」(https://flexonsbd.blogspot.com/2023/07/for.html)の続きです。
ブログ用画像の表示のために置いてあります |
その際には、繰り返し変数が初期値の次の値から始まってしまうという不具合があり、スタックを使用している言語のため、初期値、終了条件、増分を順に読んでいくしかないので、それが解消できないようだと書きました。
そのため、このマイクロCコンパイラを6809用に改造しようという意欲が失せてしまい、そのまま放置してあったのですが、GAMEインタプリタ・コンパイラの移植、TL/1コンパイラの移植が完了しましたので、これについても何とかしたいと考えていました。そんな時に手持ちの書籍(末尾の参考文献)を読んでいましたら、FORステートメントの実装の説明として、下図のFOR生成2のようなコード生成方式の方が実装が簡潔化できるとありました。
2つのFOR生成方式 |
なるほどと思い、この形で実装できないかと試みてみました。具体的には、必要な個所にラベルを設定し、そのラベルへのジャンプ命令を追加することで、処理の順序を変えることができました。
そのプログラムを示します。
このようなサンプルプログラムも正常に動作しました。
6809用コンパイラへ...とりあえずデータ幅8ビットで...
これで必要な(と思われる)拡張が済みましたので、次はいよいよ6809用コンパイラへの移植ですが、このコンパイラはデータ幅が16ビット、レジスタも16ビットを想定していますので、そのままでは6809への適用はかなり難しそうです。
しかし、TL/1コンパイラのようなデータ幅が8ビットのコンパイラもありますので、まず第一段階としてデータ幅やレジスタが8ビットでも動作しないだろうかと考えました。
それを確認するために、コンパイラが生成した仮想CPU用のアセンブルリストを手作業で6809のアセンブルリストに書き換えて走らせてみました。いくつかの注意点がありましたが、ほぼ機械的に書き換えることができました。使用したのは上記のサンプルプログラムからfor文を取り除いて短くしたものです。コンパイラが生成したアセンブルリスト(.CS)と手動で書き換えた6809用のリスト(.TXT)を示します。
仮想CPU用のアセンブルリストです。
0 件のコメント:
コメントを投稿