8086 コンパイラ

Digital Mars C (不採用)

ファイル構成が簡素なのでちょっと気になりつつも、試しに作ったソースのコンパイルは通ったので中身を見ようとと逆アセンブラを呼ぼうとした。逆アセンブラは別途ツールセットを購入せよというビジネスになっていた。コンパイラは無料というのはウソじゃないよね。

というわけで削除。

Borland C (却下)

8086, 80286 はサポート外になってた。

LSI C-86 (保留)

文書が日本語ということもあるが、リンカの使い方が単純明快。C99 が使えるなら即採用なんだけど。

Open Watcom

結局これに戻った。3つの C コンパイラ群のリンカの文書をみていて理解できたことは、セグメントという言葉は CPU のレジスタ以外にも text, data, bss などの attribute の配置にも関連しているということ。この概念がない中で幸せにやっていたことを実感した。

リンカの文書も重要度順ではなくアルファベット順に並んでいるので読みづらくて理解に苦しんだが、text, data などのセグメントの配置方法の記載場所がわかったのでちまちまやる予定。

  • なお、C99 は通るものの、ファイルパスは \ 区切りなので Makefile に通すときはエスケープが必要。(今日2回目)
  • 画面区切りが flush 関連かわからんが cmd.exe じゃないとちゃんと文字が出ない場合が多々ある.
  • アセンブラはわりと優秀でアセンブル可能なソースを出してくれるので別のアセンブラで org 貼りまくって無理矢理動かす選択肢ができた。
  • ただしリンク済みのバイナリには逆アセンブラはかけられない模様。
  • 実行可能 ELF は出せるらしいのでここから objdump で見れるかもしれないとか思っているんだが、 DOS, Windows 専門のコンパイラが言う ELF の言葉はかなり信頼性が低そう