既存のプロセッサならアセンブラは用意されていると思います.自分で仕様を決めたりして独自命令セットになっている場合の話.方法は色々ありますが,とりあえず自分のやった方針だけ.スマートではないです.
方針
- アセンブリコードを1行ずつ読み込む.
- 読み込んだコードからコメントと空白行を除去し,中間ファイルに出力.
- 中間ファイルから1行ずつ読み込んでラベルを探し,出現する行数とセットで記録する.
- もう一度中間ファイルから1行ずつ読み込んで機械語へ変換する.分岐命令では3.で記録したラベル情報を参照する.
出来上がったあとで思ったこと
アセンブラを書いたあとの講義で,パイプラインプロセッサの命令スケジューリングを行う課題が出ました.そのとき先生の用意したコードを見て思ったことです.
- 中間ファイルに出力する必要はない.命令を格納する構造体を作っておけばよい.
- 最初の読み込み段階でラベルのリストアップも同時に行うべきだった.
- ラベルの記録に連想配列が使えたらもっと楽だった.
余談
- 先生から「スクリプト言語を習得したほうが後々便利.C系とスクリプト系を一つずつ使えれば,ちょこっとプログラム組むぐらいのことにはほとんど対応できる.」と言われました.
- テキストエディタの置換機能を使って,アセンブラとして動作するマクロを作っている人もいました.その手があったか….一本取られた感じ.