Changes

Jump to: navigation, search

ASSEMBLER PASMO JP

824 bytes added, 17:24, 20 December 2020
数値リテラル
[訳注:理解を深めるために原文にはないサンプルからの引用を一部追加しています。また、スマートフォン表示時の利便性のため、原文から節の構成を一部変更しています。]
 
=概要=
:エラー出力ではなく標準出力にエラーメッセージを送信します(オプションのエラーを除く)。
===--mocasenocase===
:識別子の大文字と小文字を区別しません。
#で始まるリテラルは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を使用すると、常に大文字に変換されます。
=ファイル名=
===DS===
<div id="directive_ds"></div>
:DS スペースを定義します。
:1つまたは2つのコンマ区切りの引数を取ります。最初または唯一の引数は、定義するスペースの量(バイト単位)です。 2番目は、0が使用される場合にスペースを埋めるために使用される値です。
===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===
:ファイルをインクルードします。引数で使用される規則については、[[#filename|ファイル名]]の章を参照してください。ファイルが読み取られ、結果は、ファイルがINCLUDE行ではなく現在のファイルにコピーされた場合と同じです。 含まれるファイルには、INCLUDEディレクティブなどが含まれる場合があります。 INCLUDEディレクティブはアセンブリフェーズの前に処理されるため、IFディレクティブを使用して条件付きで異なるファイルを含めることはできません。
[訳注sample:include.txtasm]
org 100h
<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と同じです。
[訳注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