コンパイラを作るためのコンパイラ

 

別にyaccみたいなコンパイラコンパイラのことじゃあありません。それ系で探してきた人はゴメンナサイ。

えーっと、ネイティブコンパイラを作るためのコンパイラ、というと、別にコンパイラじゃなくても何でもいいんですよね。ファイルの入出力機能と、テキスト処理が出来れば。べつにperlだってphpだって、気合さえ入れればdataセクションスキームを使ったりして、javascriptでネイティブコンパイラを作ることさえ可能でしょう。やばいwjavascript製ネイティブコンパイラとか燃えるwwww


まぁそれはそうと、ネイティブコンパイラを作るとなると、必然的にアセンブラを書かなければなりません。要はpop eaxは、IA32でどんなバイト列に対応しているのか、ということを調べる必要があります(ちなみに答えは0x58です)。

まぁこんなことはIntelアーキテクチャマニュアルを見れば一発なんですが。あれ、さすがに見にくいんですよね。
そんなわけで、お勧めの方法は適当なコンパイラに、適当なコードをコンパイルさせて、ダンプを見ればうまい具合にソースと対応したアセンブリリストが見れるので簡単に把握できます。

そういう用途にお勧めなのが、delphiです。とくに6以前。Delphi6personalが、まだどっかに落ちてると思うので、入手するといいでしょう。ブレークポイントを設定して、デバッグウインドウのCPUウィンドウを表示すれば、いい感じにアセンブリリストと、ダンプコードが手に入ります。

つってもまぁこれぐらいのことは、まともなシンボリックデバッガがあれば可能なんですけどね。それでもあえてdelphiをお勧めするのは、コンパイルがクーガー兄貴も納得の超速だからです。
つまりトライアル&エラーがしやすいってことで。後、gdbが吐くアセンブリリストに比べて、可読性が高いと思います。最適化機能が馬鹿だから、最適化をONにしていても素直なコードを吐いてくれるのもうれしいですね。なんてお買い得! 問題は6がvistaで動くかは分からないことでしょうか。誰か知ってます?XPでは元気に動いてます。turbo delphiもフリーだけど、スッゲー重いんだよね。IDE


あ、gdbは関係ないけど、gccインラインアセンブラ使うときのシンタックスって終わってません?スッゲー書くの面倒くさいんですけど。まさかインラインアセンブラ使って最適化するのをシャットアウトするための処置・・?