2012-03-19 13 views
4

特にこの問題は、リアルモードのフラットでセグメント化されたモデルに関するものです。私は、DOSでCOMファイルがフラットメモリモデルを使用し、EXEファイルがセグメント化されたメモリモデルを使用していることを述べているアセンブリについての本を読んでいます。しかし、私はどのメモリモデルを使用するのかDOSに何を伝えるのか理解していません。私はブートローダについて読んでいるので、この質問をしています。メモリモデルを決定する要因は何ですか?

答えて

4

COMファイルは、プログラムが同じセグメントを指すようにロードされたときに、セグメントレジスタがDOSによってすべて設定され、すべてのコードとポインタが、セグメントレジスタの1つの値。

EXEファイル形式では、セグメントを異なるオフセットでロードすることができます。 DOSはセグメントレジスタをデフォルト値に設定しませんでした。それはコードそのものだった。コードがセグメントレジスタを管理する必要があるため、16ビットのEXEコードは非常に複雑です。

今日、多くのEXEコードはセグメント・レジスタを多少無視します。使用可能なアドレスを生成するために32または64ビットのレジスタをセグメントレジスタに追加する必要はありません。

+0

COMファイルの場合にDOSでセグメントレジスタを設定し、EXEファイルの場合はそのままにしておいてください。 – vjain27

+0

DOSは何をしましたか?これは、DOSコードがしたものです。私はあなたの質問に答える方法がわかりません.DOSをプログラムしたプログラマがそれを指示しました。 –

+0

DOS EXEフォーマットには、CS:IPおよびSS:SP以外のレジスタ設定のための規定がありません。それがあった場合、プログラマはDSとESのセグメントを特別な方法でマークする必要があり、アセンブラ、コンパイラ、およびリンカは特別にマークされたセグメントを特別な方法でサポートする必要があります。おそらく、それはそれに値するものではないと判断されました。結局のところ、正式には、あなたのセグメント化されたプログラムは、データセグメントを持つ必要はありません。最小のものはコードとスタックセグメントです。 –

1

実行可能ファイルのCOMおよびEXEファイルのヘッダーには、EXE headerCOM (MS-DOS) headerというメモリ要件があります。プログラムで< 64KBが必要な場合は、フラットスペースを使用します(> 64KB)。セグメント化されたメモリを使用します。

1

DOSには、セグメント化されたメモリモデルを使用しているCOMファイルを停止することはできません.DOSにはメモリ管理ポリシーが適用されていないのでアプリケーションには適用されません。

COM filesについてのウィキペディアの記事を読むことができます。これは、これらの古い問題についての洞察を提供します。

関連する問題