16ビットx86コンパイラを探しています
-
03-07-2019 - |
質問
私は組み込みシステムのプロジェクトに取り組んでいますが、コンパイラがParadigm C ++ IDEにプログラムで埋め込まれているという問題に遭遇しました。建物を自動化できるようにしたい。
プロセッサはAMD186ESです。私はOSを使っていません-ただのベアメタルのものです。 C ++からリアルモードの16ビット8086マシンコードを生成する必要があります。
グーグルは、G ++がそのようなコードをビルドできることを示しています。
質問:
このマシンコードをビルドするようにg ++を構成できますか?
同様にそれを行うことができる他のC ++コンパイラはありますか?
解決
現在gnu as
(binutilsの一部とgccに使用されるアセンブラー)を使用しており、次のように16ビットアセンブリコードを正常にアセンブルしています:
as <file>
ld --oformat binary -Ttext 0x0 -e start <file>
次で始まるアセンブリファイル:
.code16
.globl start
.text
start:
そのプレーンバイナリは行を省略しているため、
.globl start
start:
フラットバイナリはエントリポイントを必要としませんが、単に警告を生成します。
私が苦労して学んだこと;
-Ttext 0x0
は重要です。そうでない場合、 .text
セグメントは16ビットのアドレス範囲外にプッシュされます(理由を聞かないでください)
私は個人的にまだアセンブリを学んでいるので、これは私のやり方であり、必ずしも最善の方法ではありません。
編集:ブートコードを記述する場合は、変更する必要があります
-Ttext 0x7c00
to
<*> ブートコードは通常BIOSによって 0x7c00
にロードされるため、これにより、メモリアドレスが 0x7c00
だけオフセットされます。
他のヒント
あなたの最善の策は、おそらく OpenWatcom です。これにはC ++コンパイラが含まれています。 90年代前半から中期に戻って、私はこれが最高のC / C ++コンパイラだったと信じています。数年前にオープンソース化されました。
チップベンダー(AMD、私は推測します)は、チップのコンパイラへのポインタを持っていませんか?
そうでない場合は、いくつかの16ビットDOSコンパイラを使用できる可能性がありますが、いくつかの大きな問題が発生する可能性があります。
- BIOSまたはMS-DOSに依存しないコンパイラのライブラリを取得する
- デバッグ 組み込みシステム用の
- リンカーは通常、特定のメモリ領域にあるコードの特定をサポートしています。通常はDOS用のコンパイラには含まれていませんが、何らかのトリックを行うリンカー/ロケーターを見つけることができるかもしれません。
まだサポートされており、16ビットコードを生成するコンパイラのカップルは次のとおりです。
このGoogle検索は、gccをクロスコンパイラとして設定するための一連のリンクを示しています。標準のELFバイナリ以外のものをターゲットにするには、出力をフリギングします。 このリンクでは、標準ライブラリの除外と出力形式のカスタマイズについて説明しています。動作させるためにいじる必要があるかもしれません。
代替として openwatcom.org には、Watcomのオープンソースバージョンがあります。 Cコンパイラ。これは、必要なことを実行できる場合もあります。
2014年時点で最新のものは Dev86 です。
GCC 4.3のパッチがあります。 新規バックエンドia16:16ビットIntel x86
そして、ここにアップデートがあります。おそらくあまりうまく機能しないことに注意してください。たとえば、更新された投稿には次のように書かれています:&quot; Constructorsとdestructorsがサポートされました elks設定でのみ動作します。&quot;
このDockerコンテナには、次のビルドがあります: https:// registry.hub.docker.com/u/ysangkok/ia16-gcc-rask
DOSバイナリを作成することができませんでした: GASアセンブリをアセンブルしてOpen Watcom Cライブラリとリンクするにはどうすればよいですか
16ビットx86 Cコンパイラである bcc をご覧ください。たとえば、 Debianパッケージもあります。
わからないが、古いバージョンのborland c ++でそれができたと思う。 バージョン5.5 tをダウンロードできます:こちら 頑張って
パラダイムのものを見てきたのは久しぶりです(まだありますか?)-コンパイラに相当するコマンドラインがないのは確かですか?私の思い出は、それらはBorlandのコンパイラツールチェーンの上に構築されたということです。
- ああ、少し詳しく見てみると、X86ツールを販売しているParadigm(www.devtools.com)がまだあります。 (現金の牛でなければなりません!)
彼らのプロフェッショナル製品にはスクリプトが含まれています...あなたがやろうとしている仕事の量に応じて、弾丸を噛んでその全製品を購入するだけの価値があるかもしれません...
がんばって。