Changes

Jump to: navigation, search

ASSEMBLER PASMO JP

1,064 bytes added, 17:24, 20 December 2020
数値リテラル
[訳注:理解を深めるために原文にはないサンプルからの引用を一部追加しています。また、スマートフォン表示時の利便性のため、原文から節の構成を一部変更しています。]
 
=概要=
=コマンドラインからの使用=
<div id=“command_line”"command_line"></div>
Pasmoは、コマンドラインから次のように呼び出されます。
===--msx===
:[[#msx_mode|MSX形式のオブジェクトファイル]]を生成します。
===--public===
<div id="public_mode"></div>
:[訳注:3項目の引数の]file.symbol名を使用して[訳注:通常のfile.symbolではなくfile.publicsとして]パブリックシンボルテーブルのみが生成されます。このオプションを使用する場合、file.symbolは指定しないでください。[訳注:引数を4項指定するとエラーになります]
:エラー出力ではなく標準出力にエラーメッセージを送信します(オプションのエラーを除く)。
===--mocasenocase===
:識別子の大文字と小文字を区別しません。
=コード生成モード=
<div id=“code_generation_mode"code_generation_mode" ></div>
=== デフォルト===
もし、生成モードが指定されない場合は--binモードがデフォルトとして使用されます。
=== --bin mode. ===
<div id=“bin_mode”"bin_mode" ></div>
:--binモードは、ヘッダーなしで使用される最初の位置から生成されたコードをダンプするだけです。このモードは、コードの先頭でORG 100Hディレクティブを使用することを想定したCP/MまたはMSXのCOMファイルの直接生成、または他のプログラムでINCBINされるコードブロックの生成に使用できます。
=== --msx mode.===
<div id=“msx_mode”"msx_mode"></div>
:MSX BasicのBLOADで使用するヘッダー付きのオブジェクトファイルを生成します。
ld a,iyl
代わりに<div id=“comment_if0”"comment_if0">IF 0 .... ENDIF</div>を使用できます(ただし、INCLUDEを参照)。
[訳注sample:fill8k.asm “if 0”から”else”までの記述は処理されないのでコメントと同様に使用できる]
#で始まるリテラルは16進定数です。ただし、2つの接詞#がある場合を除きます。[[#operator_doublesharp|##演算子を参照]]してください。
&で始まるリテラルは、&に続く文字に応じて、16進数、8進数、または2進数の定数になります。Hは16進数、Oは8進数、X 16進数を意味します。 16進数。 このいずれでもない場合、文字は有効な16進数である必要があり、定数は16進数です。
%で始まるリテラルはバイナリ定数です。ただし、リテラルが%記号のみである場合を除きます。その場合は演算子です。%で始まるリテラルは2進数の定数です。ただし、リテラルが%記号のみである場合を除きます。その場合は演算子です。[[#operator_percent|以下を参照]]してください。
10進数で始まるリテラルは、10進数、2進数、8進数、または16進数です。数字が0で、次の文字がXの場合、数字は16進数です。そうでない場合、リテラルの接尾辞が調べられます。Dは10進数、Bは2進数、Hは16進数、OまたはQは8進数を意味し、その他の場合は10進数と見なされます。たとえば、FFFFhは16進定数ではなく、識別子です。0FFFFhとして接尾辞表記を使用して記述する必要があります。
すべての数値形式では、数字の間に$記号を使用して読みやすくすることができます。それらは無視されます。
[訳注sample:echovars.asm]=文字列リテラル= 文字列リテラルには、単一引用符または二重引用符で区切られた2つの形式があります。
. . . begin: ld hl, 0 add hl, sp ld (ret$stack), hl ld sp, loc$stack ld c, pstring ld de, test$msg call next ld hl, (ret$stack) ld sp, hl ld hl, 0031h ld c, 12 call next ret test$msg: db cr, lf, 単一引用符で区切られた文字列リテラルはより単純な形式で、すべての文字は特別な解釈なしに文字列に含まれますが、2つの連続した単一引用符が文字列に含まれると、1つの単一引用符文字として扱われるという唯一の例外があります。たとえば、単一引用符で区切られた文字列'***** ECHOVERS *****$That<nowiki>' ret$stack: dw 0 ds 32 loc$stack:'</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進数で始まり、対応する文字が挿入されます。文字\および "は、文字列に自分自身を挿入することを意味し、その他の文字は将来の使用のために予約されています。
文字列リテラルには、単一引用符または二重引用符で区切られた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などの式を期待どおりに評価できます。
=識別子=
 識別子は、ラベル、EQUおよびDEFLシンボル、およびマクロ名とパラメーターに使用される名前です。 Z80ニーモニック、レジスタおよびフラグ名、およびpasmoオペランドとアセンブルディレクティブの名前は予約されており、識別子の名前として使用することはできません。大文字と小文字を区別するモードが使用されている場合でも、予約名は大文字と小文字を区別しません。 次の「文字」は、大文字または小文字の英文字を意味します。他の言語の文字に対応する文字は識別子に使用できません。 識別子は文字「_」、「?」、「 以降の「文字」は、大文字または小文字の英文字を意味します。他の言語の文字に対応する文字は識別子に使用できません。  識別子は文字、「_」、「?」、「@」または「.」で始まり、その後にゼロ個以上の文字、10進数、「_」、「?」、「@」、「.」が続きます。または「」または「$」。 」が続きます。 「$」は無視されますが、「$」が埋め込まれたまたは追加された予約語はそのように認識されません。  「_」で始まる識別子は、オートローカルモードを使用する場合に特別です。詳細については、-alocalオプションとラベルに関する章を参照してください。 alocalオプションと[[#label|ラベルに関する章]]を参照してください。  オプション--nocaseを使用しない場合、識別子は大文字と小文字が区別されます。 --nocaseを使用すると、常に大文字に変換されます。
=ファイル名=
<div id="filename"></div>
ファイル名は、INCLUDEおよびINCBINディレクティブで使用されます。それらは特別なルールに従います。 二重引用符で始まるファイル名は別の二重引用符で終わる必要があり、ファイル名には特別な解釈なしにそれらの間のすべての文字が含まれます。 単一引用符で始まるファイル名は別の単一引用符で終わる必要があり、ファイル名には特別な解釈なしにそれらの間のすべての文字が含まれます。 それ以外の場合は、次の空白または行末までのすべての文字がファイル名の一部と見なされます。空白文字はスペースとタブです。
ラベルのすべての割り当てでDEFLを使用しない限り、ラベルの値を変更することはできません。ラベルに割り当てられた値がアセンブリの2つのパスで異なる場合、プログラムは不正ですが、エラーが生成されることは保証されません。ただし、最初のパスで未定義の値を割り当てることは有効です(たとえば、まだ定義されていないラベルを含む式を使用して)。
デフォルトモードでは、MACRO、REPT、またはIRPブロックにLOCALとして宣言されていない限り、ラベルはグローバルです。詳細については、[[#local_directive|LOCALディレクティブ]]を参照してください。
<div id="label"></div>
--alocalコマンドラインオプションを使用して導入された自動ローカルモードでは、「_」で始まるラベルはすべてローカルです。その領域は、次の非ローカルラベル、または次のPROC、LOCAL、MACRO、ENDP、ENDMディレクティブで終了します。
===DS===
<div id="directive_ds"></div>
:DS スペースを定義します。
:1つまたは2つのコンマ区切りの引数を取ります。最初または唯一の引数は、定義するスペースの量(バイト単位)です。 2番目は、0が使用される場合にスペースを埋めるために使用される値です。
 
[訳注sample:protector.asm]
 
.
.
.
; Cambiado esto para que coincida con las DATA de la revista
; y asi poder comprobar el checksum.
;kernal defs 4
kernal defb #FC, #A6, #09, #A0
.
.
.
===DW===
<div id="directive_dw"></div>
:DW Wordを定義します。引数は、数値式のコンマ区切りリストです。各数値式は2バイトのワードとして評価され、結果はZ80ワード形式のコードに挿入されます。
===EQU===
:等しいラベルを前に付ける必要があります。引数は数値式である必要があり、結果はラベルに割り当てられます。使用されるラベルは再定義できません。ラベルを前に付ける必要があります。引数は数値式である必要があり、結果はラベルに割り当てられます。使用されるラベルは再定義できません。 [訳注sample:callvers.asm]  ; callvers.asm ; Show the effect of attach the sample RSX echovers ; Adapted from The CP/M Plus programmers guide. bdos equ 5 prtstr equ 9 vers equ 12 cr equ 0dh lf equ 0ah . . .
===EXITM===
===INCLUDE===
:ファイルをインクルードします。引数で使用される規則については、ファイル名の章を参照してください。ファイルが読み取られ、結果は、ファイルがINCLUDE行ではなく現在のファイルにコピーされた場合と同じです。 ファイルをインクルードします。引数で使用される規則については、[[#filename|ファイル名]]の章を参照してください。ファイルが読み取られ、結果は、ファイルがINCLUDE行ではなく現在のファイルにコピーされた場合と同じです。 含まれるファイルには、INCLUDEディレクティブなどが含まれる場合があります。 INCLUDEディレクティブはアセンブリフェーズの前に処理されるため、IFディレクティブを使用して条件付きで異なるファイルを含めることはできません。
[訳注sample:include.txtasm]
org 100h
:ブロックを繰り返します。[[#macro_generalities|マクロに関する章]]を参照してください。
=オペレーター概要=
すべての数値は、必要に応じて2の補数またはトラクティングを使用して、符号なしの16ビットとして取得されます。論理演算子は、trueの場合はFFFF hexを返し、falseの場合は0を返します。引数の0はfalseで、その他の値はtrueです。 括弧を使用して、式の一部をグループ化できます。また、許可または要求するz80命令でインダイレクションを表現するためにも使用されます。これにより、インダイレクションが許可されている場所で括弧で囲まれた式を使用すると、いくつかのエラーが発生する可能性があります。 Pasmoは、いくつかのヒューリスティックを使用して、式を正しく解釈できるようにしますが、完全にはほど遠い状態です。
<nowiki>##</nowiki>演算子は特別な場合で、マクロ展開中に処理されます。[[#macro_generalities|マクロに関する章]]を参照してください。
===オペレーターのリスト===
===! ===
:NEと同じ。
===<div id="operator_doublesharp"><nowiki>##</nowiki>===<div id="operator_doublesharp"> </div>===
:識別子貼り付け演算子。[[#macro_generalities|マクロに関する章]]を参照してください。
===$===<div id="operator_dollar">$ </div>=== 
:現在の文の先頭の位置カウンタの値を提供します。たとえば、DWディレクティブでは、現在のアイテムではなく、リスト内の最初のアイテムの位置を指定します。
.
===%===<div id="operator_percent">% </div>=== 
:MODと同じです。
=マクロ概要=
<div id="macro_generalities"></div>
マクロディレクティブには、適切なMACROディレクティブと、繰り返しディレクティブREPTおよびIRPの2種類があります。さらに、ENDMおよびEXITMディレクティブは、マクロ展開の終了を制御します。
[訳注sample:tmacro.asm]
  ; tmacro.asm ; Some tests of macro usage. org 100h ; To run in cp/m start: macro bdos, function ld c, function call 5 endm lineend macro ld e, 0Dh bdos 2 ld e, 0Ah bdos 2 endm macro pushall push af push bc push de push hl endm popall macro pop hl pop de pop bc pop af endm ; Another way. pall macro operation irp reg, af, bc, de, hl local i1 operation reg endm endm pushall2 macro pall push endm popall2 macro irp reg, af, bc, de, hl pop reg endm endm ; Yet another way
pushmany macro reg
endm
pushall3 macro pushmany af, bc, de, hl endm ; Main program ; pushall ; pushall2 pushall3 ld de, hello i1 bdos 9 i2: lineend ;popall popall2 bdos 0 hello db 'Hello, world.$' end start ; End of tmacro.asm .
識別子の貼り付け:MACRO内で演算子##を使用して2つの識別子を結合し、別の識別子を作成できます。これは、マクロ引数に依存する識別子を作成できるようにすることを目的としています。
=マクロディレクティブ=
====.SHIFT====
:MACRO内でのみ使用できます。 MACRO引数は1つ左の場所に配置され、最初の引数は破棄されます。シフト後にパラメーターリストを埋めるのに十分な引数がない場合、残りの引数は未定義になります。
====ENDM====
:ENDM 現在のMACRO定義、または現在のREPTまたはIRPブロックの終了をマークします。マクロブロックに含まれるすべてのIFブロックも閉じられます。
.
====EXITM====
:EXITM 現在のMACRO、REPT、またはIRPブロックを終了します。 MACROの場合、マクロ展開は終了します。他の場合、ブロックのコード生成は終了し、対応するENDMの後にアセンブリが続行されます。
.
====IRP====
IRP parameter, argument list.
.
====MACRO====
:マクロを定義します。使用できる形式は2つあります。
.
.
endm
endm ====REPT====
:REPTディレクティブと対応するENDMの間のコードブロックを、引数で指定された回数繰り返します。引数は0にすることができます。その場合、ブロックはスキップされます。 さらに、ループ変数を指定できます。このvarはマクロパラメーターではなく、LOCAL DEFLシンボルとして使用され、その値はループの反復ごとに増分されます。初期値とincementを指定でき、デフォルトはそれぞれ0と1です。

Navigation menu