Changes

PASMO TEST

4,571 bytes added, 19:52, 12 December 2020
no edit summary
=優先順位テーブルディレクティブ=
優先順位による演算子の表、同じ行の演算子は同じ優先順位を持ちます。Pasmoでサポートされているディレクティブのリスト(アルファベット順)。
## (see note) $, NUL, DEFINED *, /, MOD, %, SHL, SHR, <<, >> +, - (binary[訳注:2項演算子]) EQ, NE, LT, LE, GT, GE, =, !=, <, >, <=, >.ERROR=== NOT, ~, !, +, - (unary[訳注:単項演算子]) AND, & OR, |, XOR && || HIGH, LOW ?
<nowiki>##</nowiki>演算子は特別な場合で、マクロ展開中に処理されます。[[#macro_generalities|マクロに関する章]]を参照してください。 ==オペレーターのリスト== ===! === :論理否定。引数が0の場合はtrue、それ以外の場合はfalseを返します。  ===<nowiki>!= </nowiki>=== :NEと同じ。  ===<nowiki>##</nowiki>===<div id="operator_doublesharp"> </div>:識別子貼り付け演算子。[[#macro_generalities|マクロに関する章]]を参照してください。 ===$===<div id="operator_dollar"> </div>:現在の文の先頭の位置カウンタの値を提供します。たとえば、DWディレクティブでは、現在のアイテムではなく、リスト内の最初のアイテムの位置を指定します。行がアクティブに使用されている場合、つまり、マクロが展開されている場合はマクロで、現在の分岐が取得されている場合はIFで、アセンブリ中にエラーを生成します。ディレクティブに続くすべてのテキストは、エラーメッセージとして使用されます。
[訳注sample:align.asm]
; (C) 2004 Julian Albo ; This code may be freely used. ;-------------------------------------------------------------------- ; Sample of macro that can be used to align the current position to ; a multiple of some number, like the align and aligndata directives ; of some oher assemblers. .;--------------------------------------------------------------------
align macro n
local newpos, oldpos
oldpos equ $
newpos equ (oldpos + n - 1) / n * n
if newpos < oldpos
.
===%.SHIFT===<div id="operator_percent"> </div>:MODと同じです。
===&===:MACRO引数をシフトします。マクロに関する章を参照してください。
[訳注sample:ANDと同じです。 tmacro.asm]
===&&=== . . . pushmany macro reg rept -1 if nul reg exitm endif push reg .shift endm endm . . .
:論理的両方のオペランドが真の場合、真。 ===.WARNING===
===<nowiki>*</nowiki>===:.ERRORと同じですが、エラーを生成する代わりに警告メッセージを出力します。
===DB===<div id="directive_db"> </div>:乗算。 バイトを定義します。引数は、文字列リテラルまたは数値式のコンマ区切りリストです。文字列リテラルはオブジェクトコードに挿入され、数値式の結果は単一バイトとして挿入され、必要に応じて切り捨てられます。
===+ DEFB===
:加算または単項+。DEFB DEFine Byte、[[#directive_db|DB]]と同じ。
===- ===[訳注sample:hellocpm.asm]
; hellocpm.asm ; (C) 2004 Julian Albo. ; This code may be freely used. ; Simple hello world for cp/m, showing the use of some ; pasmo options to adapt cp/m programs for cp/m 86 or ; ms-dos. ; Assembly with: ; - For cp/m: ; pasmo hellocpm.asm HELLOCPM.COM ; - For cp/m 86: ; pasmo --86 --cmd --equ CPM86 hellocpm.asm HELLOCPM.CMD ; - For ms-dos:減算または単項 ; pasmo --86 --equ MSDOS hellocpm.asm HELLOCPM.COM ; This macro allows to easily adapt the program to run ; in ms-dos or cp/m 86, using the --86 option and, in ; the case of cp/m 86, the --cmd option. ; The MSDOS is really not needed, ms-dos can handle ; call 5 use, but under dosemu this does not work, ; I still don't know why. Defining MSDOS it runs in any ; dos clone. BDOS_CALL macro if defined CPM86 db 0CDh, 0E0h ; int 0E0h, bdos call in cp/m 86 else if defined MSDOS db 088h, 0CCh ; mov ah, cl db 0CDH, 021h ; int 0CDh, ms-dos call. else call 5 ; endif ; endif endm ; BDOS_CALL . . .
===/ DEFL===
:切り捨てられた整数の除算。 DEFL ラベルを定義します。ラベルを前に付ける必要があります。引数は数値式である必要があり、結果はラベルに割り当てられます。使用されるラベルは、他のDEFLディレクティブで再定義できます。
===< ===[訳注sample:defb.adm]
:LTと同じ . . . proc local n n defl 0 rept 20 ds n n defl n + 1 endm endp
===<< DEFM===
:SHLと同じ DEFineメッセージ、[[#directive_db|DB]]と同じ。
===<nowiki><= </nowiki>DEFS===
:LEと同じ [[#directive_ds|DS]]と同じスペースを定義します。
===<nowiki>= </nowiki>DEFW===
:EQと同じ DEFW [[#directive_dw|DW]]と同じ。
===> DS===<div id="directive_ds"><div>:DS スペースを定義します。:1つまたは2つのコンマ区切りの引数を取ります。最初または唯一の引数は、定義するスペースの量(バイト単位)です。 2番目は、0が使用される場合にスペースを埋めるために使用される値です。
[訳注sample:GTと同じ protector.asm]
===<nowiki>>=</nowiki>=== . . . ; 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>:GEと同じ DW Wordを定義します。引数は、数値式のコンマ区切りリストです。各数値式は2バイトのワードとして評価され、結果はZ80ワード形式のコードに挿入されます。
===>> ELSE===
:SHRと同じ IF参照。
===? END===
:条件式。 ?の右側の式の場合、:で区切られた2つの式が続く必要があります。 trueの場合、最初の式が評価され、falseの場合、2番目の式が評価されます。アセンブリを終了します。このディレクティブの後のすべての行は無視されます。引数がある場合、数値式として評価され、結果はプログラムのエントリポイントとして設定されます。エントリポイントを設定した結果は、使用するコード生成の種類によって異なりますが、この場合でもドキュメント作成に使用できます。
===| ENDIF===
:ORと同じ。 IF参照。
===|| ENDM===
:論理OR。オペランドの1つがtrueの場合、true。 マクロを終了します。[[#macro_generalities|マクロに関する章]]を参照してください。
===~ ENDP===
:NOTと同じ PROCブロックの終了をマークします。PROCを参照してください。
===ANDEQU===
:ビット単位のAND演算子。 等しいラベルを前に付ける必要があります。引数は数値式である必要があり、結果はラベルに割り当てられます。使用されるラベルは再定義できません。
===DEFINEDEXITM===
:引数は識別子でなければなりません。結果は、識別子が定義されている場合はtrue、定義されていない場合はfalseです。 マクロを終了します。[[#macro_generalities|マクロに関する章]]を参照してください。
===EQIF===
:等しい。両方のオペランドが等しい場合はtrue、そうでない場合はfalse。条件付きアセンブリ。引数は数値式である必要があります。0の結果はfalse、それ以外はtrueとみなされます。引数がtrueの場合、IFセクションの終わりまたはELSEディレクティブが検出されるまで次のコードがアセンブルされ、そうでない場合は無視されます [訳注:そのため”if 0”は[[#comment_if0|複数行コメント]]のように扱うことができます]。:ELSEディレクティブが存在する場合、引数がtrueであれば次のコードは無視され、falseであればアセンブルされます。 IFセクションは、ENDIFまたはENDMディレクティブで終了します(最後のケースでは、ENDMにも通常の効果があります)。 IFはネストできます。その場合、各ELSEおよびENDIFは対応するIFでのみ有効になりますが、ENDMは保留中のIFセクションをすべて終了します。
===GEINCLUDE===
:より大きいか等しい。左のオペランドが右より大きいか等しい場合は真。 ファイルをインクルードします。引数で使用される規則については、[[#filename|ファイル名]]の章を参照してください。ファイルが読み取られ、結果は、ファイルがINCLUDE行ではなく現在のファイルにコピーされた場合と同じです。 含まれるファイルには、INCLUDEディレクティブなどが含まれる場合があります。 INCLUDEディレクティブはアセンブリフェーズの前に処理されるため、IFディレクティブを使用して条件付きで異なるファイルを含めることはできません。
===GT===[訳注sample:include.txt]
:より大きい。左のオペランドが右より大きい場合は真。 org 100h ; include.asm nop include if.asm halt include if.asm ex de,hl exx ex af, af' end
===HIGHINCBIN===
:引数の上位バイトを返します。 バイナリインクルードです。バイナリファイルをインクルードします。バイナリファイルを読み取り、生成されたコードの現在の位置にコンテンツを挿入します。引数で使用される規則については、ファイル名の章を参照してください。
===LEIRP===
:以下。左のオペランドが右よりも小さいか等しい場合は真。 引数を置換するコードのブロックを繰り返します。[[#macro_generalities|マクロに関する章]]を参照してください。
===LOWLOCAL===<div id="local_directive"></div>:現在のブロックに対してローカルとして識別子をマークします。ブロックは、MACRO、REPT、IRP、またはPROCディレクティブである場合があり、ローカル領域は対応するENDMまたはENDPディレクティブで終了します。領域はブロックの先頭ではなく、LOCALディレクティブで始まります。注意してください。 同じ識別子の複数のローカル宣言が同じブロックで使用されている場合、最初の宣言のみが有効で、他の宣言は無視されます。
[訳注sample:引数の下位バイトを返します。 local.asm]
===LT=== ; local.asm ; Test of LOCAL, PROC and ENDP under CP/M. bdos equ 5 conout equ 2 org 100h jp hola exit db "Hello, local world\r\n", 0 showtext proc local hola, exit hola ld a, (hl) cp 0 jp z, exit push hl ld e, a ld c, conout call bdos pop hl inc hl jp hola exit ret endp hola ld hl, exit call showtext jp 0 end
:未満。 左オペランドが右より小さい場合はtrue。 ===MACRO===
===MOD===:マクロを定義します。[[#macro_generalities|マクロに関する章]]を参照してください。
:係数。整数除算の残り。 ===ORG===
===NE===:生成されたコードを配置する原点位置を確立します。同じプログラムで複数のORGディレクティブを使用できますが、生成されたコードが以前のコードを上書きする結果になる場合、結果は未定義です。
:等しくない。両方のオペランドが等しい場合はfalse、そうでない場合はtrue。 ===PROC===
===NOT===:PROCブロックの開始をマークします。唯一の効果は、LOCALディレクティブの領域を定義することです。ブロックは、対応するENDPディレクティブで終了します。 PROCブロックでサブルーチンを囲むことをお勧めしますが、他の状況でも使用できます。
[訳注sample:ビット単位ではありません。このオペランドの1の補数を返します。 local.asm]
===NUL=== ; local.asm ; Test of LOCAL, PROC and ENDP under CP/M. bdos equ 5 conout equ 2 org 100h jp hola exit db "Hello, local world\r\n", 0 showtext proc local hola, exit hola ld a, (hl) cp 0 jp z, exit push hl ld e, a ld c, conout call bdos pop hl inc hl jp hola exit ret endp hola ld hl, exit call showtext jp 0 end
:右に何かがある場合はtrueを返し、それ以外の場合はfalseを返します。引数がマクロのパラメーターである場合に役立ちます。 ===PUBLIC===
===OR===:引数は、コンマで区切られた識別子のリストです。各識別子はパブリックとしてマークされます。 --publicコマンドラインオプションを使用すると、パブリックとしてマークされた識別子のみがシンボルテーブルリストに含まれます。
[訳注sample:ビット単位のOR演算子。 showfcb.asm]
===SHL=== ; showfcb.asm :シフト左。ゼロで埋めて、右オペランドで指定されたビット数だけ左にシフトした左オペランドを返します。 bdos equ 5 ===SHR=== conout equ 2 printstring equ 9:シフト右。右側のオペランドで指定されたビット数だけ右側にシフトされ、ゼロで埋められた左側のオペランドを返します。 public fcb1, fcb2===XOR=== fcb1 equ 005Ch fcb2 equ 006Ch:ビット単位のxor(排他的OR)演算子。 org 100h= オペレーター概要 = . .すべての数値は、必要に応じて2の補数またはトラクティングを使用して、符号なしの16ビットとして取得されます。論理演算子は、trueの場合はFFFF hexを返し、falseの場合は0を返します。引数の0はfalseで、その他の値はtrueです。 括弧を使用して、式の一部をグループ化できます。また、許可または要求するz80命令でインダイレクションを表現するためにも使用されます。これにより、インダイレクションが許可されている場所で括弧で囲まれた式を使用すると、いくつかのエラーが発生する可能性があります。 Pasmoは、いくつかのヒューリスティックを使用して、式を正しく解釈できるようにしますが、完全にはほど遠い状態です。 .
[[#bracket_mode|括弧のみのモード]][訳注:—bracketオプション]を使用すると、括弧は式をグループ化するという独自の意味を持ち、間接指定には括弧が必要であるため、あいまいさが解消されます。 ===REPT===
短絡評価:&&および:ブロックを繰り返します。[[#macro_generalities||演算子と条件式は短絡されています。これは、演算子の1つを評価する必要がない場合、エラーを生成せずに未定義のシンボルまたは0による除算を含めることができることを意味します(ただし、正しい構文が必要です)。条件式では、これは成立しない分岐に適用されます。&&演算子では、最初のオペランドがfalseの場合は2番目のオペランドに、||では最初のオペランドが真の場合、2番目のオペランドに、というように。マクロに関する章]]を参照してください。