アセンブル方法を制御するために、多くのアセンブルオプションが用意されています。単に「LASM」とだけ入力すると、アセンブルオプションの一覧が表示されます。
次のコマンドでは、ソースファイル HELLO.ASM がアセンブルオプション/L および /EERROR.LOG でアセンブルされます。
LASM HELLO /L /EERROR.LOG
各アセンブルオプションは、先頭にスラッシュ (/) またはハイフン (-) を付けて指定します。大文字と小文字は区別されません。各オプションを指定する順番は自由で、オプションをソースファイル名の前に指定することもできます。
以下では、すべてのアセンブルオプションについて、アルファベット順に説明します。
単純な形式のソースプログラムをアセンブルします。このオプションを指定すると、SEGMENT 文などを使用することなく、プロセッサ命令だけを記述できます。付属のサンプルプログラム HELLOA.ASM は、この形式のソースプログラムの一例です。セグメント「CSEG」が自動的に作成されます。
このオプションを指定した場合は、リンク時にオプション /C を指定する必要があります。
「;-C」で始まるコメントの内容をプログラムと見なします。条件アセンブル文を使って同じ機能を実現することもできますが、このオプションの方が簡単です。
テキストマクロを定義します。ソースファイル中に次の文ように記述することと同じです。
<name> EQU <value>
これにより、ソースファイル中の識別子 <name> が <value> に置換されます。
ただし、EQU 文とは異なり、「=<value>」を省略できます。省略すると、<name> は空の文字列に定義されます。
例 LASM TEST /DN=1024 N を 1024 と定義する
画面に出力されたエラー/警告メッセージをエラーファイル <path> にも記録します。<path> を省略すると、ソースファイル名の拡張子を .ERR に代えた名前でエラーファイルが作成されます。
例 LASM TEST /E メッセージが TEST.ERR にも書き出される LASM TEST /EERR.LOG メッセージが ERR.LOG にも書き出される
OFFSET 演算子のデフォルトのフレームを選択します。このオプションは OPTION 文のOFFSET 指定に相当し、次の対応関係があります。
デフォルトでは /G0 が有効です。.Z80 指定時は、これらのオプションは無意味です。
/FO<path>
作成されるオブジェクトファイルの名前を指定します。ディレクトリを含めたパスも指定できます。このオプションを指定しないと、ソースファイル名の拡張子を .OBJ に代えた名前でオブジェクトファイルが作成されます。
ディレクトリ名を指定すると、そのディレクトリの下に通常のファイル名でオブジェクト ファイルが作成されます。
例 LASM TEST TEST.OBJ が生成される LASM TEST /FOT.O T.O が生成される
/I<path>
インクルードファイルの検索ディレクトリを指定します。このオプションは環境変数 LINCA に相当し、ソースコード中の INCLUDE 文に影響を与えます。
インクルードファイルの探索順序は、次のとおりです。
1.カレントディレクトリ
2.オプション /I で指定されたディレクトリ
3.環境変数 LINCA で指定されたディレクトリ
/I オプションは 10 個まで指定でき、先に指定したパスほど優先的に検索されます。
/KN<str>
キーワード <str> を無効にして、識別子などに使用できるようにします。
例 LASM TEST KTYPE 「TYPE」をキーワードと見なさない
/L<path>
アセンブルリスト <path> を作成します。<path> を省略すると、ソースファイル名の拡張子を .LST に代えた名前でアセンブルリストが作成されます。
アセンブルリストには、実際に生成された機械語コードと、セグメント、ラベル、マクロなどの要約情報が記載されます。LASM のアセンブルリストは、それ自身アセンブラのソースファイルであり、再びアセンブルできます。アセンブルすると、最初と同じオブジェクトファイルが作成されます。
ソースファイル中のコメントは、アセンブルリストに複写されません。ただし、「;-L」で始まるコメントの内容だけは、対応する行の前に複写されます。
例 LASM TEST /L アセンブルリスト TEST.LST を作成する LASM TEST /LLIST.LOG アセンブルリスト LIST.LOG を作成する
/N[<line-num>]
指定した行数 <line-num> をソースファイルから読み出すたびに、アセンブルリストにマークを挿入します。<line-num> を省略すると、マークは 10 行ごとに挿入されます。
オプション /L を指定していない場合、このオプションは無効です。/SA も参照してください。
例 LASM TEST /L /N20 ソースファイルの 20 行ごとにマークを入れる
/O、/ON、/OF
ジャンプ命令を最適化します。
つまり、SHORT、NEAR、FAR タイプのジャンプ命令が相互に置き換えられます。また、16 ビットモードの 条件分岐ジャンプ命令 (JA など) には SHORT タイプしかないため、このような命令を最適化すると、必要に応じて JMP 命令が挿入されます。「分岐命令」も参照してください。
相対ジャンプ命令をほかの相対ジャンプ命令に最適化します。NEAR から SHORT へ、および SHORT から NEAR への置き換えが行われますが、NEAR または SHORT から FAR への置き換えや、その逆の置き換えは行われません。
ジャンプ命令を最適化します。ただし、PTR または SHORT 演算子で明示的にタイプ指定されているジャンプは変更しません。この点を除き、末尾に「2」が付かない各オプションを同じです。
フェーズエラー情報を表示します。フェーズエラーは、次のような形式で表示されます。
フェーズエラー : L1 : 誤差 -1h
これは、ラベル L1 の仮定位置が真実よりも 1 バイト小さかったことを示しています。フェーズエラーの詳細については「前方参照とパス」を参照してください。
プロシージャ内のコードラベルのスコープ (有効範囲) をローカルにします。言い換えると、PROC 文と ENDP 文の間でコロン(:)により定義したラベルは、同じプロシージャ内でしか参照できなくなります。これにより、プロシージャ外で同じ名前のラベルを定義できます。
PTR 演算子で明示的にタイプを指定されなかった CALL 命令を、すべて NEAR タイプとして処理します。通常、このような CALL 命令のタイプは、呼び出し先のラベルのタイプに合わされます。
警告が発生したときに LASM が OS 戻り値(リターンコード)1 で MS-DOS/Windows に戻るようにします。通常、警告が発生すると、LASM は戻り値 1 で OS に戻ります。
OS 戻り値は、MS-DOS バッチコマンドの IF ERRORLEVEL 文などで確認できます。多くのプログラムは、LASM.EXE や LIL.EXE と同様に、通常は 0 で OS に戻り、エラーが発生したときにのみ 0 以外の戻り値を返します。
エラーが発生しても LASM が OS 戻り値 0 で MS-DOS/Windows に戻るようにします。通常、エラーが発生すると、LASM は戻り値 2 で OS に戻ります。
画面への表示を最小限に抑えます。この場合でも、エラーと警告のメッセージは表示されます。
/L と併用すると、アセンブルリストにソース行がコメントとして挿入されます。これにより、ソースコードとアセンブルリストとの対応関係が明確になります。/N も参照してください。
このオプションを指定すると、AND, OR, XOR で符号拡張ビット (サインワード) が使用されなくなります。デフォルトでは、LASM はこの 3 命令で符号拡張ビットを使用します。符号拡張ビットを使用すると、命令コードが少し短くなります。しかし、一部の互換プロセッサではこの 3 命令で符号拡張ビットを使用できないため、このオプションが用意されています。
Microsoft MASM は、LASM のデフォルトの動作と同じように、この 3 命令で符号拡張ビットを使用します。しかし、8086 系プロセッサの製造元である Intel 社の命令コード表には、この 3 命令では符号拡張ビットを使用しないように書かれているものがあります。
Intel 社の 8086 系プロセッサでは、この 3 命令で符号拡張ビットを使用できますが、互換プロセッサでは、この 3 命令で符号拡張ビットを使用できない場合があります。そのようなプロセッサで実行するコードを作成する場合は、このオプションを指定してください。
たとえば、and bx,0 からは、次のようなコードが生成されます。
・符号拡張ビット使用時83 E3 00
・符号拡張ビット不使用時81 E3 00 00
NOSBIT 演算子を使用して、明示的に命令の短縮を抑止することもできます。
マクロの開始と終了を示すコメント「; macto XXX」および「; end of macro」をアセンブルリストに出力しません。
作成するアセンブルリストのタブサイズを設定します。<tab-size> には、2、4、8 のいずれかを指定します。デフォルトは 8 です。オプション/L を指定しない場合、このオプションは無意味です。
識別子の大文字と小文字を区別します。デフォルトでは、識別子の大文字と小文字は区別されません。
デフォルトでは、識別子「ABC」と「abc」は等価であり、大文字に変換した名前がオブジェクトファイルに書き込まれます。これに対して、このオプションを指定すると、「ABC」と「abc」は別の名前として扱われ、小文字の名前はそのまま小文字でオブジェクトファイルに書き込まれます。
ただし、このオプションを指定してでも、命令やレジスタ名などのキーワードについては、大文字と小文字が区別されません。
逆に、言語モデルで C、SYSCALL、または STDCALL を指定した外部名は、このオプションにかかわりなく、常に大文字と小文字が区別されます。
メモリ使用量を表示します。16 ビット版の LASM.EXE 専用のオプションです。
警告レベルを指定します。<level> には、0、1、2 のいずれかを指定します。デフォルトは 1 です。
2 を指定すると、発生したエラーとすべての警告が表示されます。1 を指定すると、コードの効率に関する警告が表示されなくなります。0 を指定すると、すべての警告が表示されなくなります。エラーは常に表示されます。
Microsoft MASM では発生しないエラ−や警告を一部抑止します。
警告 <no> の表示を抑止します。<no> には警告の番号を指定します。このオプションは複数個指定できます。
参照されていないシンボルに対して、アセンブルリストに「(参照なし)」というマークを付けます。これにより、使用されていないラベル、マクロ、EQU 定義を発見できます。
アセンブル時に使用するメモリを約 70KB 節約します。代わりにアセンブル速度は少し低下します。メモリ不足エラーが発生する場合は、このオプションを指定してください。16 ビット版の LASM.EXE 専用のオプションです。
デバッグ情報を生成します。LID 以外のデバッガを使用する場合に指定します。デバッガ LID を使用する場合は、/ZH ではなく /ZI を使用します。
このオプションを指定すると、オブジェクトファイル中にデバッグ情報が出力されます。このオブジェクトファイルをリンクすると、デバッグ情報ファイル *.dbg が出力されます。生成される実行コードに影響はありません。
デバッガ LID 向けのデバッグ情報を生成します。
このオプションを指定すると、コード中にソフトウェア割り込み(INT)命令が挿入されるため、コードサイズが平均 25 %ほど増加します。このためにジャンプ命令が届かなくなり、エラーが発生した場合は、オプション/O を指定してください。
ソースコードで機械語命令のバイト数を前提としたコーディングをしている場合、このオプションは指定できません。指定すると警告が発生します。詳細については、「デバッグ」を参照してください。
<interrupt-no> のデフォルト値は 3 です。つまり、<interrupt-no> を省略すると、INT 3 命令が挿入されます。通常はこれが最適です。
ただし、デバッグ対象プログラム自身が INT 3 命令を使用している場合は、デバッグ用の割り込み番号を変更する必要があるため、40h 以上 FFh 以下の 16 進数を <interrupt-no> に指定します。このとき、デバッグ対象プログラムが使用していない割り込み番号を指定するように注意してください。
3 以外の <interrupt-no> を指定すると、プログラムのコードサイズ増加量は、平均で 50 %ほどになります。これは、INT 3 命令が 1 バイトであるのに対して、ほかの INT 命令が 2 バイトを要するためです。また、3 以外の <interrupt-no> を指定して作成したプログラムは、必ずデバッガ LID から起動する必要があります。単独で起動するとシステムが停止します。
コメントによるデバッグ範囲の制御
コメントを使ってソースファイルの一部をデバッグの対象から除外できます。「;-Z0」で始まるコメントを記述すると、以降の行がデバッグ対象から除外され、デバッグ用の割り込み命令が挿入されなくなります。「;-Z1」で始まるコメントを記述すると、以降の行は再びデバッグ対象になります。
すべてのラベルを PUBLIC 宣言します。MS-DOS に付属のデバッガ SYMDEB を使用する場合に有効です。