.MODEL

構文    .MODEL  <メモリモデル>[,<言語モデル>][,<スタックタイプ>]
        [,OS_DOS]
例    .MODEL    LARGE

<メモリモデル>には、次のメモリモデルのうち1つを指定します。.MODEL 文を指定しない場合は「SMALL」になります。

TINY (コードサイズとデータサイズを合わせて 64KB 以下)
SMALL (コードサイズ、データサイズとも 64KB 以下)
MEDIUM (コードサイズは無制限、データサイズは 64KB 以下)
COMPACT (コードサイズは 64KB 以下、データサイズは無制限)
LARGE (コードサイズ、データサイズとも無制限)
HUGE (コードサイズ、データサイズとも無制限)

「LARGE」と「HUGE」は、@DATASIZE 等価記号を異なる値にセットすること以外はまったく同じです。

「TINY」と「SMALL」は似ていますが、TINY の場合は CS レジスタが DS、ES、SS の各レジスタと同じ場所(実際にはグループの DGROUP)を指すところが異なります。TINY モデルは COM 形式実行ファイルの作成に向いています。

メモリモデルは次のものに影響を与えます。

キ 簡略化セグメントディレクティブにより定義されるセグメントの属性

キ 定義済み等価記号「@CODESIZE」と「@DATASIZE」の値

キ タイプ「PROC」の意味(SMALL/COMPACT なら NEAR、それ以外は FAR)

<言語モデル>は、引数付きの PROC 文で内部生成されるコードに影響します。詳細については、ここをクリックしてください。

<スタックタイプ>には「NEARSTACK」または「FARSTACK」を指定できます。デフォルトは NEARSTACK です。

この指定は、.STARTUP 文で生成されるコードに影響します。それ以外の効果はありません。.STARTUP 文では、NEARSTACK の場合は SS を DS の値(DGROUP の値)に再設定しますが、FARSTACK の場合は SS の初期値を変えずに維持します。

いずれの場合も、スタックセグメント(.STACK で定義するセグメント)は DGROUP に所属します。本来、FARSTACK の場合はスタックセグメントと DGROUP は無関係なはずですが、Microsoft MASM V6.0 の仕様に合わせてこうなっています。

「OS_DOSは、.STARTUP 文や .EXIT 文で MS-DOS 用のコードを生成することを指示します。これはデフォルトの設定なので、OS_DOS は指定しても指定しなくても同じです。

Microsoft MASM V6.0 では「OS_OS2」という指定も可能ですが、LASM では OS_OS2 をサポートしていません。

[目次]