Brainf*ck
MonoDevelopの練習の一環としてBrainf*ckのGUIシミュレータの作成手順をまとめました。Gtk#とBrainf*ckの両方が一度に勉強できる内容となっています。 mdev-bf.docx
x86の分岐命令は相対アドレス指定のため、分岐元と分岐先のアドレスが決まらなければ相対アドレスを求められません。Brainf*ckではループの先頭と末尾で分岐が出てきます。相互に分岐しているので少し複雑です。 ループの先頭 loop_begin: cmp byte ptr[esi]…
第3回 コンパイラ実装会で@uho_iiotokoさんがBrainf*ckのトランスレータを実装されているとき、ちょっと面白いことが起きました。元はC言語で実装されたBrainf*ckからアセンブラへのトランスレータです。トランスレート対象がC言語でも同じ結果となるため、P…
前回に引き続きBrainf*ckのトランスレータを見ていきます。 まとめ: 実装例: https://github.com/mason-/cmpimpl/blob/master/python/bftran.py Mac OS Xではデフォルトで位置独立コード(PIC)が要求されます。プログラムがどのアドレスにロードされるか決…
前回に引き続きBrainf*ckのトランスレータを見ていきます。 まとめ: 実装例: https://github.com/mason-/cmpimpl/blob/master/python/bftran.py Brainf*ckでは変数の指すメモリの中身が0以外の間だけ回るループがあります。 # while (*(char *)esi) { ... } …
前回に引き続きBrainf*ckのトランスレータを見ていきます。 まとめ: 実装例: https://github.com/mason-/cmpimpl/blob/master/python/bftran.py Brainf*ckには変数が1つあります。トランスレータではこれをレジスタに割り当てます。ABIにより関数呼び出しで…
前回に引き続きBrainf*ckのトランスレータを見ていきます。 まとめ: 実装例: https://github.com/mason-/cmpimpl/blob/master/python/bftran.py 今回のトランスレータでは、OSごとの差異を吸収するためシステムコールを直接呼ばずにlibcを呼びます。以下に呼…
第3回 コンパイラ実装会でざっくりとx86アセンブリのトランスレータについて説明しました。資料は特に用意せずに即席で説明したため、いくつか不備な点がありました。 64bit シンボル名のプレフィックス 記法 具体的なコードについて取り上げる前に、これら…