始めから特定の値にマクロ定義されている名前がいくつかあります。これらの名前のことを「定義済み等価記号」を呼びます。この定義は、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