18

私は組み込みシステム プロジェクトに取り組んでおり、コンパイラが Paradigm C++ IDE にプログラム的に組み込まれているという問題に遭遇しました。ビルドを自動化できるようにしたい。

プロセッサは AMD186ES です。私はOSで作業していません-ベアメタルのものだけです。C++ からリアルモードの 16 ビット 8086 マシン コードを生成する必要があります。

私のグーグルは、G ++がそのようなコードを構築できることを示しています。

私の質問は次のとおりです。

このマシン コードをビルドするように g++ を構成できますか?

それを行うことができる他の C++ コンパイラはありますか?

4

10 に答える 10

11

あなたの最善の策は、おそらくC++ コンパイラを含むOpenWatcomです。90 年代前半から半ばまでさかのぼると、これが最高の C/C++ コンパイラだったと思います。数年前にオープンソース化されました。

于 2008-10-22T22:36:59.783 に答える
8

現在、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 0x0

-Ttext 0x7c00

通常、ブート コードはBIOS によって0x7c00ロードされるため、メモリ アドレスがオフセットされます。0x7c00

于 2012-10-10T23:05:08.670 に答える
7

あなたのチップ ベンダー (AMD だと思います) は、チップのコンパイラへのポインタを持っていませんか?

そうでない場合は、16 ビット DOS コンパイラを使用できる可能性がありますが、いくつかの大きな問題が発生する可能性があります。

  1. BIOS や MS-DOS に依存しないコンパイラのライブラリを取得する
  2. デバッグ
  3. 組み込みシステムのリンカーは、通常、特定のメモリ領域にコードを配置するための特定のサポートを備えています。これは通常、DOS 用のコンパイラには含まれていませんが、このトリックを実行するある種のリンカー/ロケーターを見つけることができる場合があります。

現在もサポートされており、16 ビット コードを生成するコンパイラは次のとおりです。

于 2008-10-22T22:42:01.410 に答える
7

この Google 検索では、gcc をクロス コンパイラとして設定するための一連のリンクが表示されます。標準の ELF バイナリ以外のものをターゲットにするには、出力をフリッグすることができます。 このリンクでは、標準ライブラリの除外と出力形式のカスタマイズについて説明しています。それを機能させるには、いくつかの操作が必要になる場合があります。

別の方法として、openwatcom.orgには、Watcom C コンパイラのオープン ソース バージョンがあり、これも必要なことを実行できる可能性があります。

于 2008-10-22T22:42:17.510 に答える
6

GCC 4.3 用のパッチがあります:新しいバックエンド ia16: 16 ビット Intel x86

そして、これがその更新です。たとえば、更新された投稿には、「コンストラクターとデストラクタがサポートされるようになりましたが、何らかの理由で elks 構成でのみ機能します」と書かれています。

この Docker コンテナーにはビルドがあります: https://registry.hub.docker.com/u/ysangkok/ia16-gcc-rask

まだ DOS バイナリを作成できませんでした: GAS アセンブリをアセンブルして Open Watcom C ライブラリとリンクするにはどうすればよいですか?

于 2013-05-01T21:03:19.647 に答える
5

16 ビット x86 C コンパイラであるbccを見てください。たとえば、そのための Debian パッケージもあります。

于 2008-10-22T22:48:55.140 に答える
4

2014 年現在の最新のものはDev86です。

于 2014-08-24T16:32:55.523 に答える
2

確かではありませんが、古いバージョンの borland c++ ではそれが可能だったと思います。 バージョン5.5 t をダウンロードできます

于 2008-10-22T22:49:17.950 に答える
1

80186 無料の C コンパイラ:

http://coding.derkeiler.com/Archive/General/comp.arch.embedded/2005-09/msg01063.html

于 2008-10-25T12:16:01.203 に答える
0

私が Paradigm のものを見てから長い時間が経ちました (それらはまだありますか?) -- コンパイラに相当するコマンドラインがないのですか? 私の記憶では、それらは Borland のコンパイラ ツールチェーンの上に構築されたということです... ということは、Borland コンパイラの古いコピーでうまくいくのではないでしょうか?

-- ああ、もう少し調べてみると、Paradigm がまだ (www.devtools.com) X86 ツールを販売していることがわかります。(キャッシュカウに違いない!)

彼らの専門的な製品にはスクリプトが含まれています...あなたが計画している作業の量によっては、弾丸をかじって完全な製品を購入する価値があるかもしれません...

幸運を。

于 2008-10-22T22:50:58.460 に答える