0

アセンブリで記述された単純な (非常に単純な) リアル モード カーネルがあり、できる限り C に移植しようとしています。そのために、16 ビットのバイナリ コードに OpenWatcom コンパイラを使用しています。

私のファイル「os.c」で、この行を書き留めると動作します:

char msg[50];

しかし、私がこれを行うと:

char msg[50] = "hello";

うまくいきません。文字列を書くたびに、壊れてしまいます。私はいたるところを検索し、ナンセンスなことをたくさん試しましたが、何もしませんでした。

誰かがそれが何であるかの手がかりを持っていますか?

2 つ以上のリンクを投稿することはできないため、必要な 4 つのリンクはすべて Pastebin にあります。前もって感謝します。

例: http://pastebin.com/xz96N91A

4

1 に答える 1

0

私はopenwatcomをインストールしたので、それが何を与えるかを見ることができました。どうやらそれはすべて大きな混乱であり、データセクションはコードの途中などに適用されているようです。

COM代わりに、フォーマット ファイルを作成することをお勧めします。それは少なくともうまくいくようです。あなたの代わりに使用したコマンドwcl -s -zls -0 -q -ms -bcl=com os.cを使用して作成しました。また、com エントリ ポイントを考慮して、ローダーのファー ジャンプを更新しました。いくつかのセグメント レジスタもセットアップする必要があるかもしれませんが、このテストではそれなしで機能しました。os.comos.binjmp far 0x0040:0x0100

ファイルには64kの制限があったと思いCOMますが、watcomがそれを強制しているかどうかはわかりません. その場合、64k 以上が必要な場合は、さらに調査する必要があります。

本当にリアルモードを使わなければならない場合を除いて、時間を無駄にするべきではありません。

于 2014-02-27T01:26:10.030 に答える