Changes

ASSEMBLER PASMO JP

126 bytes added, 10:45, 11 December 2020
ソースコードフォーマット
生成されるシンボルテーブルには、プログラムで使用されるすべての識別子が含まれます。ローカルは、-publicオプションを使用しない限り、使用順に8桁の16進数として表されます。その場合、PUBLICディレクティブで指定されたシンボルのみがリストされます。 シンボルテーブル形式は、EQUディレクティブのリストです。そうすれば、別のソースに含めることで、複数のブロックで構成されるプログラムを作成できます。
= Source code format.ソースコードフォーマット=
 == Generalities. 一般的なもの==
ソースコードファイルは、使用するプラットフォームの有効なテキストファイルである必要があります。たとえば、windowsのpasmoでのUNIXテキストファイルの使用はサポートされておらず、結果は未定義です(たとえば、pasmoのビルドに使用されるコンパイラによって異なる場合があります)。垂直タブまたはフォームフィード文字を含むファイルを使用した結果も未定義です。
代わりに<div id=“comment_if0”>IF 0 .... ENDIF</div>を使用できます(ただし、INCLUDEを参照)。
[訳注sample:fill8k.asm “if 0”から”else”までの記述はコメントと同様に処理されないということか0”から”else”までの記述は処理されないのでコメントと同様に使用できる]
; fill8k.asm
[訳注sample]
=== Literals. ==リテラル =
==== Numeric literals. ===数値リテラル=
数値リテラルは、10進数、2進数、8進数、16進数の形式で記述できます。複数のアセンブラのソース形式との互換性を得るために、いくつかの形式が受け入れられます。
loc$stack:
=文字列リテラル===String literals.====文字列リテラルには、単一引用符または二重引用符で区切られた2つの形式があります。 単一引用符で区切られた文字列リテラルはより単純な形式で、すべての文字は特別な解釈なしに文字列に含まれますが、2つの連続した単一引用符が文字列に含まれる1つの単一引用符文字として扱われるという唯一の例外があります。たとえば、単一引用符で区切られた文字列'That<nowiki>''</nowiki>s all folks'は、二重引用符で区切られた"That's all folks"と同じ文字列を生成します。 二重引用符で区切られた文字列リテラルは、CおよびC++言語と同様の方法で解釈されます。 \文字はエスケープ文字として解釈され、次の解釈が行われます。nは改行文字(16進0A)、rは復帰(16進0D)、tはタブレータ(16進09)、aはベル(16進07)、xは、次の2つの文字がcharの16進コードと見なされ、そのコードを持つcharが挿入され、8進数のプレフィックスが最大3桁の8進数で始まり、対応する文字が挿入されることを示す文字列、文字\および "は、文字列に自分自身を挿入することを意味し、その他の文字は将来の使用のために予約されています。 長さ1の文字列リテラルは、含まれる文字の数値と共に数値定数として使用できます。これにより、 'A' + 80hなどの式を期待どおりに評価できます。
文字列リテラルには、単一引用符または二重引用符で区切られた2つの形式があります。 単一引用符で区切られた文字列リテラルはより単純な形式で、すべての文字は特別な解釈なしに文字列に含まれますが、2つの連続した単一引用符が文字列に含まれる1つの単一引用符文字として扱われるという唯一の例外があります。たとえば、単一引用符で区切られた文字列'That<nowiki>''</nowiki>s all folks'は、二重引用符で区切られた"That's all folks"と同じ文字列を生成します。 二重引用符で区切られた文字列リテラルは、CおよびC++言語と同様の方法で解釈されます。 \文字はエスケープ文字として解釈され、次の解釈が行われます。nは改行文字(16進0A)[訳注:CR]、rは復帰(16進0D)[訳注:LF]、tはタブレータ(16進09)、aはベル(16進07)、xは、次の2つの文字がcharの16進コードと見なされ、そのコードを持つcharが挿入され、8進数のプレフィックスが最大3桁の8進数で始まり、対応する文字が挿入されることを示す文字列、文字\および "は、文字列に自分自身を挿入することを意味し、その他の文字は将来の使用のために予約されています。 長さ1の文字列リテラルは、含まれる文字の数値と共に数値定数として使用できます。これにより、 'A' + 80hなどの式を期待どおりに評価できます。 ===Identifiers.==識別子=
識別子は、ラベル、EQUおよびDEFLシンボル、およびマクロ名とパラメーターに使用される名前です。 Z80ニーモニック、レジスタおよびフラグ名、およびpasmoオペランドとアセンブルディレクティブの名前は予約されており、識別子の名前として使用することはできません。大文字と小文字を区別するモードが使用されている場合でも、予約名は大文字と小文字を区別しません。 次の「文字」は、大文字または小文字の英文字を意味します。他の言語の文字に対応する文字は識別子に使用できません。 識別子は文字「_」、「?」、「@」または「.」で始まり、その後にゼロ個以上の文字、10進数、「_」、「?」、「@」、「.」が続きます。または「$」。 「$」は無視されますが、「$」が埋め込まれたまたは追加された予約語はそのように認識されません。 「_」で始まる識別子は、オートローカルモードを使用する場合に特別です。詳細については、-alocalオプションとラベルに関する章を参照してください。 オプション--nocaseを使用しない場合、識別子は大文字と小文字が区別されます。 --nocaseを使用すると、常に大文字に変換されます。
=ファイル名==File names.=== 
ファイル名は、INCLUDEおよびINCBINディレクティブで使用されます。それらは特別なルールに従います。 二重引用符で始まるファイル名は別の二重引用符で終わる必要があり、ファイル名には特別な解釈なしにそれらの間のすべての文字が含まれます。 単一引用符で始まるファイル名は別の単一引用符で終わる必要があり、ファイル名には特別な解釈なしにそれらの間のすべての文字が含まれます。 それ以外の場合は、次の空白または行末までのすべての文字がファイル名の一部と見なされます。空白文字はスペースとタブです。
=ラベル==Labels.=== 
ラベルは、任意の行の先頭、アセンブラーのニーモニックまたはディレクティブの前に配置できます。オプションで「:」を続けることができますが、他のアセンブラとの互換性のために、ディレクティブで使用することは推奨されません。ニーモニックもディレクティブもないラベルのある行も有効です。 ラベルは、MACRO、EQU、およびDEFLディレクティブで特別な意味を持ちます。それ以外の場合、現在のコード生成位置の値がラベルに割り当てられます。 ラベルは定義の前に使用できますが、DEFLで割り当てられたラベルでこれを行った結果は未定義です。 ラベルのすべての割り当てでDEFLを使用しない限り、ラベルの値を変更することはできません。ラベルに割り当てられた値がアセンブリの2つのパスで異なる場合、プログラムは違法ですが、エラーが生成されることは保証されません。ただし、最初のパスで未定義の値を割り当てることは有効です(たとえば、まだ定義されていないラベルを含む式を使用して)。 デフォルトモードでは、MACRO、REPT、またはIRPブロックにLOCALとして宣言されていない限り、ラベルはグローバルです。詳細については、LOCALディレクティブを参照してください。 --alocalコマンドラインオプションを使用して導入された自動ローカルモードでは、「_」で始まるラベルはすべてローカルです。その領域は、次の非ローカルラベル、または次のPROC、LOCAL、MACRO、ENDP、ENDMディレクティブで終了します。 自動および明示的なローカルラベルは両方とも、ソースでのラベルの最初の使用に対応する8桁の16進数としてシンボルテーブルリストに表されます。
==Directives.=ディレクティブ=
Pasmoでサポートされているディレクティブのリスト(アルファベット順)。
===.SHIFT===
:MACRO引数をシフトします。マクロに関する章を参照してください。
===.WARNING===
:.ERRORと同じですが、エラーを生成する代わりに警告メッセージを出力します。 DB バイトを定義します。引数は、文字列リテラルまたは数値式のコンマ区切りリストです。文字列リテラルはオブジェクトコードに挿入され、数値式の結果は単一バイトとして挿入され、必要に応じて切り捨てられます。
===DEFB===
:DEFB DEFine Byte、DBと同じ。
===DEFL===
:DEFL ラベルを定義します。ラベルを前に付ける必要があります。引数は数値式である必要があり、結果はラベルに割り当てられます。使用されるラベルは、他のDEFLディレクティブで再定義できます。
===DEFM===
:DEFineメッセージ、DBと同じ。
===DEFS===
:DSと同じスペースを定義します。
===DEFW===
:DEFW DWと同じ。
===DS===
:DS スペースを定義します。
1つまたは2つのコンマ区切りの引数を取ります。最初または唯一の引数は、定義するスペースの量(バイト単位)です。 2番目は、0が使用される場合にスペースを埋めるために使用される値です。
===DW===
:DW Wordを定義します。引数は、数値式のコンマ区切りリストです。各数値式は2バイトのワードとして評価され、結果はZ80ワード形式のコードに挿入されます。
===ELSE===
:IF参照。
===END===
:アセンブリを終了します。このディレクティブの後のすべての行は無視されます。引数がある場合、数値式として評価され、結果はプログラムのエントリポイントとして設定されます。エントリポイントを設定した結果は、使用するコード生成の種類によって異なりますが、この場合でもドキュメント作成に使用できます。
===ENDIF===
:IF参照。
===ENDM===
:マクロを終了します。マクロに関する章を参照してください。
===ENDP===
:PROCブロックの終了をマークします。PROCを参照してください。
===EQU===
 :等しいラベルを前に付ける必要があります。引数は数値式である必要があり、結果はラベルに割り当てられます。使用されるラベルは再定義できません。
===EXITM===
 :マクロを終了します。マクロに関する章を参照してください。
===IF===
 :条件付きアセンブリ。引数は数値式である必要があります。0の結果はfalse、それ以外はtrueとみなされます。引数がtrueの場合、IFセクションの終わりまたはELSEディレクティブが検出されるまで次のコードがアセンブルされ、そうでない場合は無視されます [訳注:そのため”if 0”は[[#comment_if0|複数行コメント]]のように扱うことができます]。
ELSEディレクトリが存在する場合、引数がtrueであれば次のコードは無視され、falseであればアセンブルされます。 IFセクションは、ENDIFまたはENDMディレクティブで終了します(最後のケースでは、ENDMにも通常の効果があります)。 IFはネストできます。その場合、各ELSEおよびENDIFは対応するIFでのみ有効になりますが、ENDMは保留中のIFセクションをすべて終了します。
===INCLUDE===
ファイルを含めます。引数で使用される規則については、ファイル名の章を参照してください。ファイルが読み取られ、結果は、ファイルがINCLUDE行ではなく現在のファイルにコピーされた場合と同じです。 :ファイルをインクルードします。引数で使用される規則については、ファイル名の章を参照してください。ファイルが読み取られ、結果は、ファイルがINCLUDE行ではなく現在のファイルにコピーされた場合と同じです。 含まれるファイルには、INCLUDEディレクティブなどが含まれる場合があります。 INCLUDEディレクティブはアセンブリフェーズの前に処理されるため、IFディレクティブを使用して条件付きで異なるファイルを含めることはできません。
===INCBIN===
バイナリを含む。バイナリファイルを含めます。バイナリファイルを読み取り、生成されたコードの現在の位置にコンテンツを挿入します。引数で使用される規則については、ファイル名の章を参照してください。:バイナリインクルードです。バイナリファイルをインクルードします。バイナリファイルを読み取り、生成されたコードの現在の位置にコンテンツを挿入します。引数で使用される規則については、ファイル名の章を参照してください。
===IRP===
IRP parameter, argument list.
:引数を置換するコードのブロックを繰り返します。マクロに関する章を参照してください。
===LOCAL===
 :現在のブロックに対してローカルとして識別子をマークします。ブロックは、MACRO、REPT、IRP、またはPROCディレクティブである場合があり、ローカルambitは対応するENDMまたはENDPディレクティブで終了します。アンビットは、ブロックの先頭ではなく、LOCALディレクティブで始まります。注意してください。 同じ識別子の複数のローカル宣言が同じブロックで使用されている場合、最初の宣言のみが有効で、他の宣言は無視されます。
===MACRO===
 :マクロを定義します。マクロに関する章を参照してください。
===ORG===
 :生成されたコードを配置する原点位置を確立します。同じプログラムで複数のORGディレクティブを使用できますが、生成されたコードが以前のコードを上書きする結果になる場合、結果は未定義です。
===PROC===
 :PROCブロックの開始をマークします。唯一の効果は、LOCALディレクティブの領域を定義することです。ブロックは、対応するENDPディレクティブで終了します。 PROCブロックでサブルーチンを囲むことをお勧めしますが、他の状況でも使用できます。
===PUBLIC===
 :引数は、コンマで区切られた識別子のリストです。各識別子はパブリックとしてマークされます。 --publicコマンドラインオプションを使用すると、パブリックとしてマークされた識別子のみがシンボルテーブルリストに含まれます。
===REPT===
ブロックを繰り返します。マクロに関する章を参照してください。
:ブロックを繰り返します。マクロに関する章を参照してください。 =オペレーター=Operators. =一般的なもの====Generalities.===
すべての数値は、必要に応じて2の補数またはトラクティングを使用して、符号なしの16ビットとして取得されます。論理演算子は、trueの場合はFFFF hexを返し、falseの場合は0を返します。引数の0はfalseで、その他の値はtrueです。 括弧を使用して、式の一部をグループ化できます。また、許可または要求するz80命令でインダイレクションを表現するためにも使用されます。これにより、インダイレクションが許可されている場所で括弧で囲まれた式を使用すると、いくつかのエラーが発生する可能性があります。 Pasmoは、いくつかのヒューリスティックを使用して、式を正しく解釈できるようにしますが、完全にはほど遠い状態です。