.model small ; 簡略化セグメントの宣言
.code ; コード セグメントの開始
.startup ; 各レジスタの初期化
mov dx, offset msg
mov ah, 09h
int 21h
.exit 0 ; ax = 4C00h で int 21h を行う
.data ; データ セグメントの開始
msg db 'Hello !',0Dh,0Ah,'$'
.stack 100h ; スタック セグメント
end ; .startup があるので開始ラベルは不要
アセンブル、リンク方法は、簡略化セグメントを使わないスタンダードなプログラムの場合と同じです。
簡略化セグメントを使用したプログラムから実際にどのようなコードが生成されるか知りたい場合は、アセンブル時に /L を付けてアセンブル リストを作成してください。アセンブル リストには、実際に生成されたアセンブラ コードが出力されます。
このプログラムについて
では、このプログラムについて詳しく見ていきます。スタンダードな EXE プログラムと同じコードについては説明を省略しますので、そちらも合わせてご覧ください。
.model 文によるプログラムの開始
.model small
簡略化セグメントを使用する場合は、最初に必ず .model 文を記述します。パラメータには C 言語などで使われている「メモリ モデル」を指定します。メモリ モデルについてはここでは詳しく述べませんが、tiny、small、medium、compact、large の 5 つがあり、コードとデータがそれぞれ 64KB 以下の比較的小さな EXE プログラムならば small モデルが最適です。
コード セグメントの開始
.code
.startup
コード セグメントは .code 文で開始します。small モデルの場合、セグメントの名前は自動的に _TEXT になります。コード セグメントの先頭では、.startup 文を記述して初期化コードを作成します。.startup 文はセグメント レジスタなどを適切な値にセットします。プログラムは .startup 文から開始されます。
終了コード
.exit 0
.exit 文は終了コードを生成します。パラメータには OS 戻り値を指定します。上の .exit 文からは、次のコードが生成されます。
mov ax, 4C00h
int 21h
.data
データ セグメントは .data 文で開始します。small モデルの場合、セグメントの名前は _DATA になります。コード セグメントはこの .data 文によって自動的に終了するので、.data 文の前に ends 文を記述する必要はありません。
スタックの定義
.stack 100h
簡略化セグメントを使用すると、このようにスタックを 1 行で定義できます。パラメータの 100h は、スタックのサイズです。
1997/5/29 created