例:
DEFSECT "OVLN@nfunc", DATA, OVERLAY, SHORT DEFSECT "OVLN@main", DATA, OVERLAY, SHORT CALLS 'main', 'nfunc', 5
2.6.6 COMMENT擬似命令
構文:
COMMENT delimiter :
delimiter 説明:
コメント行を開始させます。COMMENT擬似命令は、1行または複数行をコメントとして定義するとき に使用します。COMMENT擬似命令の後に付く最初のブランク以外の文字が、コメント区切り文字に なります。コメントテキストを定義するときは、2つの区切り文字が使用されます。2番目のコメント区 切り文字を含む行が、コメントの最終行と見なされます。コメントテキストには、任意のプリント可能 文字を入れることができ、ソースファイルに出力されるときに、ソースリストで生成されるようにする こともできます。
この擬似命令では、ラベルを使用することができません。
この擬似命令は、IF/ELSE/ENDIF構成体およびMACRO/DUP定義では使用できません。
例:
COMMENT + This is a one line comment +
COMMENT * This is a multiple line comment. Any number of lines can be placed between the two delimiters
*
2.6.7 DB擬似命令
構文:
[label:] DB arg[, arg]...
説明:
定数バイトを定義します。DB擬似命令は、それぞれのarg引数に対して1バイトのメモリを割り当て、初 期化します。argには、数値定数、単一または複数の文字列定数、シンボル、式のいずれでも指定できま す。DB擬似命令は、1つ以上の引数をとることができますが、複数の引数を付ける場合、これらをコン マで区切ります。複数の引数は、連続するアドレスロケーションに格納されます。複数の引数がある場 合、それらのどれについてもNULLにすることができます(2つのコンマを連続して使用)。その場合、対 応するアドレスロケーションに0が入れられます。評価された引数値が、1バイトで表現できない長さに なる場合、エラーが発生します。
labelが指定されている場合、擬似命令の処理を開始する時点でランタイムロケーションカウンタの値が 割り当てられます。
整数引数は、そのまま格納されますが、バイト値でなければなりません(たとえば0〜255の範囲内)。単 一文字または複数文字による文字列は、次のような方法で処理されます。
1. 単一文字の文字列は、1バイトに格納され、その各ビットが文字のASCII値を示します。
例: 'R' = 52H
2. 複数文字の文字列の場合、その文字列を構成する文字のASCII表現によるバイトの集まりになります。
例: 'ABCD' = 41H, 42H, 43H, 44H 参照:
DS、DW 例:
TABLE: DB 14,253,62H,'ABCD' CHARS: DB 'A','B','C','D'
2.6.8 DEFINE擬似命令
構文:
DEFINE symbol string 説明:
置換文字列を定義します。DEFINE擬似命令は、それ以降のすべてのソース行で使用される置換文字列 を定義するときに使用します。それ以降のすべての行でsymbolが検索され、stringで置換されます。この 擬似命令は、ソースプログラムをわかりやすく記述するときに使用すると便利です。symbolは、ラベル の制限に従う必要があります。つまり、最初の文字は英字またはアンダースコア(̲)で、それ以降の文 字が英数字またはアンダースコア(̲)でなければなりません。すでに定義されているシンボルを新しく 定義しようとすると、警告が発生します。マクロの場合は、特殊な状況になります。DEFINE擬似命令 による変換は、マクロ定義が見つかった時点で適用されます。また、マクロが展開されるとき、その時 点でアクティブなDEFINE擬似命令変換が再度適用されます。
この擬似命令では、ラベルを使用することができません。
参照:
UNDEF 例:
次のDEFINE擬似命令が、ソースプログラムの最初の部分で見つかった場合、
DEFINE ARRAYSIZ '10 * SAMPLSIZ' 次のソース行は、
DS ARRAYSIZ
アセンブラによって次のように変換されます。
DS 10 * SAMPLSIZ
2.6.9 DEFSECT擬似命令
構文:
DEFSECT section, type [, attr]...[AT address]
説明:
セクションの名前と宣言属性を定義するとき、この擬似命令を使用します。コードやデータをセクショ ンに置く前に、SECT擬似命令を使用して、そのセクションを起動しておく必要があります。定義には、
宣言属性を入れることができ、セクションの型(type)を指定する必要があります。
セクションの型は、次のいずれかになります。
type: DATA ¦ CODE
セクションの宣言属性は、次のいずれかになります。
attr: グループ1: SHORTSHORTSHORTSHORTSHORT ¦ TINYT I N YT I N YT I N YT I N Y
グループ2: FIT 100HFIT 100HFIT 100HFIT 100HFIT 100H ¦ FIT 8000HFIT 8000HFIT 8000HFIT 8000HFIT 8000H ¦ FIT 10000HFIT 10000HFIT 10000HFIT 10000HFIT 10000H
グループ3: OVERLAYOVERLAYOVERLAYOVERLAYOVERLAY ¦ ROMDATA ROMDATA ROMDATA ROMDATA ROMDATA ¦ NOCLEARNOCLEARNOCLEARNOCLEARNOCLEAR ¦ CLEARCLEARCLEARCLEARCLEAR ¦ INITINITINITINITINIT ¦ M A XM A XM A XM A XM A X グループ4: J O I NJ O I NJ O I NJ O I NJ O I N
各グループはせいぜい1つの属性が指定されます。CLEARセクションは、スタートアップ時に0になり ます。この属性は、DATA型のセクションでのみ使用することができます。
NOCLEAR属性を持つセクションは、スタートアップ時に0に設定されません。これは、DATAセクショ ンのデフォルトです。この属性は、DATAセクションのみ使用することができます。
INIT属性は、DATAセクションに初期化データが含まれることを定義します。この初期化データは、プ ログラムのスタートアップ時にROMからRAMにコピーされます。
OVERLAY属性を指定すると、セクションが重ね書き可能になります。重ね書き可能なのは、DATAセ クションのみです。
(DATA、CODEセクションで使用できる)ROMDATAセクションには、ROM内で置換するデータが含ま れます。このROM領域は実行可能ではありません。
同じ名前を持つDATAセクションが、MAX属性を持ち、さまざまなオブジェクトモジュールにある場 合、リンカは、それぞれのオブジェクトモジュールのうち最大のサイズを、生成するセクションのサイ ズとして採用します。MAX属性は、DATAセクションのみ適用されます。
SHORT属性は、セクションを最初の32K(共通の非バンク領域)内に置かなければならないCODEセク
ションを指定します。SHORT属性がDATAセクションで使用される場合、そのセクションが最初の64K ページ内になければならないことを指定します。
TINY属性は、セクションがデータメモリの最初の64K内の最大256バイトページ、1ページ内になければ ならないことを指定します。
FIT属性は、セクションが一定の境界を越えないことを指定します。そのため、ここで指定したサイズ が、そのセクションで使用可能な最大サイズになります(ただしリンカは、同じ名前を持つすべてのセ クションを一緒にリンクしてから、生成されたセクションについてサイズをチェックする)。そのため、
たとえばFIT 8000Hセクションは、0から7FFFHの範囲、または8000Hと0FFFFHの範囲内にロケート することができます。アドレス8000Hや10000Hを越えて配置することはできません。
JOIN属性を使用すると、複数のセクションを1ページ内にグループ化することができます。JOIN属性は 常に、FIT属性と一緒に使用しなければなりません。たとえば、複数のセクションを同じデータページ 内にロケートする必要がある場合に、この属性を使用します。"2.2.3.3 グループ化セクション"も参照し てください。
セクション、セクションの型、セクション属性などの詳細については、"2.2.3.1 セクション名"を参照し てください。
参照:
SECT 例:
DEFSECT ".text", DATA ;declare section .text
2.6.10 DS擬似命令
構文:
[label:] DS expression 説明:
記憶域を定義します。DS擬似命令は、expressionの値と同じバイト数分、メモリのブロックを予約しま す。この擬似命令を使用すると、オペランドフィールドにある絶対整数式の値の分だけランタイムロ ケーションカウンタが進められます。予約されたメモリのブロックは、どの値にも初期化されることは ありません。式は正の整数にならなければならず、アドレスラベルに対する順方向の参照(まだ定義さ れていないラベル)も入れることができません。
labelが指定されている場合、擬似命令の処理を開始する時点でランタイムロケーションカウンタの値が 割り当てられます。
参照:
DB、DW 例:
S_BUF: DS 12 ; Sample buffer
2.6.11 DUP擬似命令
構文:
[label:] DUP expression :
ENDM 説明:
ソース行のシーケンスを複製します。DUP擬似命令とENDM擬似命令の間にあるソース行のシーケンス は、整数expressionで指定された数だけ複製されます。式が0以下の値に評価された場合、その行のシー ケンスは、アセンブラ出力に入れられません。式の結果は、絶対整数にならなければならず、アドレス ラベルに対する順方向の参照(まだ定義されていないラベル)も入れることができません。DUP擬似命令 は、いくらでもネストすることができます。
labelが指定されている場合、DUP擬似命令の処理を開始する時点でランタイムロケーションカウンタの 値が割り当てられます。
参照:
DUPA、DUPC、DUPF、ENDM、MACRO 例:
次のようなソース入力文のシーケンスがあると仮定します。
COUNT SET 3
DUP COUNT ; SRA BY COUNT
SRA A
ENDM
その場合、次のソースリストが生成されます。
COUNT SET 3
DUP COUNT ; SRA BY COUNT
SRA A
ENDM
; SRA A
; SRA A
; SRA A
2.6.12 DUPA擬似命令
構文:
[label:] DUPA dummy, arg[, arg]...
: ENDM 説明:
引数を付けてシーケンスを複製します。DUPA擬似命令とENDM擬似命令で定義されたソース文のブ ロックは、それぞれの引数で繰り返されます。繰り返されるたびに、ブロック内のダミーパラメータ が、その後の引数文字列で置換されます。引数文字列がNULLの場合、ダミーパラメータが削除されて ブロックが繰り返されます。引数に、組み込みブランクやアセンブラの特殊文字が含まれる場合、一重 引用符で囲む必要があります。
labelが指定されている場合、DUPA擬似命令の処理を開始する時点でランタイムロケーションカウンタ の値が割り当てられます。
参照:
DUP、DUPC、DUPF、ENDM、MACRO 例:
次のような文を持つ入力ソースファイルがあると仮定します。
DUPA VALUE,12,32,34
DB VALUE
ENDM
その場合、アセンブラソースリストは次のようになります。
DUPA VALUE,12,32,34
DB VALUE
ENDM
; DB 12
; DB 32
; DB 34
2.6.13 DUPC擬似命令
構文:
[label:] DUPC dummy, string :
ENDM 説明:
文字を付けてシーケンスを複製します。DUPC擬似命令とENDM擬似命令で定義されたソース文のブ ロックは、stringのそれぞれの文字で繰り返されます。繰り返されるたびに、ブロック内のダミーパラ メータが、その後にある文字列の文字で置換されます。文字列がNULLの場合、ブロックがスキップさ れます。
labelが指定されている場合、DUPC擬似命令の処理を開始する時点でランタイムロケーションカウンタ の値が割り当てられます。
参照:
DUP、DUPA、DUPF、ENDM、MACRO