GNU Assemblerの本

プログラミングの力を生み出す本―インテルCPUのGNUユーザへ

プログラミングの力を生み出す本―インテルCPUのGNUユーザへ

教室で読んでいたらそれっぽい二人が発見して、「gasの本だ!」と興奮していた。

アセンブラコンパイラ

ハードウェアの課題で簡単な仕様のアセンブラを、機械語に翻訳する課題が出た。みんなそれっぽい言語で、caseで激しく条件分岐、みたいなことをやっていたので、「case使ったら負けかなと思っている」と吐き捨てて自分はSchemeで書いた。

caseを使わないでどうやったかというと

  • 命令列をPEGを使って解析。1命令はオペコード、オペランド、ラベルを要素にもつリストに変換されて、命令列は命令のリストになる
  • 命令のタイプごとに、それぞれの命令を処理する関数を生成して、オペコードをキーにしたハッシュテーブルに関数を登録していく。
  • mapを使って、命令のリストにハッシュテーブルに登録した関数を適用していく