まず、8086というのは16ビットCPUです。以後の話は 厳密な意味では正しくない可能性がありますが、理解する上には わかりやすいでしょう。
16ビットで表せる数値は16進で0000hからFFFFhまでです。 10進では0から65535であることはすでにご存知のことと思います。 メモリのアドレスを表す場合0番地から65535番地までは 16ビットあれば足ります。しかしこれより後の番地は16ビット では表すことができません。これを解決するために セグメンテーション(segmentation)という概念が必要になってきます。 すなわちセグメントの先頭と、その先頭からいくつ進んだ所かで 表すことが可能です。 FFFFh番地の次は10000h番地ですね。 これを
その次を(1000h:0000h)
というように表せば16ビットの2つの組み合わせで (0000h:0000h)番地から(FFFFh:FFFFh)番地まで表すことができます。 最初の数値を16倍して後の数値を足せば 絶対的な番地が求まります。(1000h:0001h)
これは、入門書などにはよく出ているプログラムです。
これをいろいろなメモリモデルでコンパイルして実行してみましょう。
たとえばスモールメモリモデルならば、結果は次のようになるはずです。
今度は、これをラージメモリモデルでコンパイルして実行してみましょう。
これで、少しメモりモデルの意味が分かったでしょうか。
Update Mar/07/1997 By Y.Kumei