定義済み等価記号

始めから特定の値にマクロ定義されている名前がいくつかあります。これらの名前のことを「定義済み等価記号」を呼びます。この定義は、EQU 文による定義と同等です。定義済み等価記号に対しては、新たな定義を行うことはできません。

次にすべての定義済み等価記号を示します。

@CURSEG

現在のセグメント名を表します。

@FILENAME

現在のソースファイル名のベース名、つまり拡張子を除いたソースファイル名を表します。

@DATE

現在のシステム時間による年月日を示す文字列を表します。

@TIME

現在のシステム時間による時分秒を示す文字列を表します。

@CODESIZE

デフォルトでは 0 を表しますが、.MODEL 文によって MEDIUM,LARGE,HUGE のいずれかのメモリモデルを指定している場合は 1 を表します。

@DATASIZE

デフォルトでは 0 を表しますが、.MODEL 文によって COMPACT,LARGE のいずれかのメモリモデルを指定している場合は 1 を、HUGE メモリモデルを指定している場合は 2 を表します。

@CODE
@DATA
@DATA?
@CONST
@STACK
@FARDATA
@FARDATA?

これらの等価記号は簡略化セグメントディレクティブで定義されたセグメント名を表します。

@UseSize

現在有効なセグメントのビット モードを判定します。16 ビット セグメントなら 2、32 ビット セグメントなら 4 を返します (.USE16/32 参照)。

@UseStackSize

スタックのビット モードを判定します。16 ビット スタックなら 2、32 ビット スタックなら 4 を返します (.USESTACK16/32 参照)。

@Cpu

現在有効になっている命令セットを 16 ビット値で通知します。次のようになります。

命令セット (16 ) (2 )
.808601010000 0001 0000 0001
.808701010000 0001 0000 0001
.18601030000 0001 0000 0011
.28605070000 0101 0000 0111
.28705870000 0101 1000 0111
.286p05870000 0101 1000 0111
.3860D0F0000 1101 0000 1111
.3870D8F0000 1101 1000 1111
.386p0D8F0000 1101 1000 1111
.4860D1F0000 1101 0001 1111
.4870D9F0000 1101 1001 1111
.486p0D9F0000 1101 1001 1111
.5860D3F0000 1101 0011 1111
.586p0DBF0000 1101 1011 1111
.no87x0xxxxxx 0000 xxxx xxxx
.mmx2xxxxx1x xxxx xxxx xxxx

@LasmVersion

現在の LASM.EXE のバージョンを数値で返します。たとえば、V2.14A ならば、21400 + 'A' の値が返されます。V4.3 なら 43000 になります。

@SizeStr( <string> )

文字列 <string> の長さを返します。たとえば、@SizeStr("abc") は 3 になります。

@CatStr( <string> ,... )

複数の文字列を連結します。たとえば、@SizeStr('abc', 'de', 'fg') は 'abcdefg' になります。

例    ASSUME    CS:@CURSEG
    DB    @FILENAME
    DB    @DATE
    DB    @TIME
    MOV    AX, @CODESIZE
    MOV    AX, @DATASIZE
    MOV    AX, @DATA:[BUF]

ftrs    macro    str
    db    @SizeStr(str)
    db    str
    endm

[目次]