Light Macro Assembler ホームページへ

簡略化セグメントを使った EXE プログラム

簡略化セグメントを使った EXE プログラムのソースコード例です。


        .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