Difference between revisions of "PASMO TEST"

From Z80 Machines Wiki
Jump to: navigation, search
(Created page with "=ディレクティブ= Pasmoでサポートされているディレクティブのリスト(アルファベット順)。 ===.ERROR=== 行がアクティブに使用...")
 
Line 1: Line 1:
=ディレクティブ=
+
= オペレーター概要 =
  
Pasmoでサポートされているディレクティブのリスト(アルファベット順)。
+
すべての数値は、必要に応じて2の補数またはトラクティングを使用して、符号なしの16ビットとして取得されます。論理演算子は、trueの場合はFFFF hexを返し、falseの場合は0を返します。引数の0はfalseで、その他の値はtrueです。 括弧を使用して、式の一部をグループ化できます。また、許可または要求するz80命令でインダイレクションを表現するためにも使用されます。これにより、インダイレクションが許可されている場所で括弧で囲まれた式を使用すると、いくつかのエラーが発生する可能性があります。 Pasmoは、いくつかのヒューリスティックを使用して、式を正しく解釈できるようにしますが、完全にはほど遠い状態です。
  
===.ERROR===
+
[[#bracket_mode|括弧のみのモード]][訳注:—bracketオプション]を使用すると、括弧は式をグループ化するという独自の意味を持ち、間接指定には括弧が必要であるため、あいまいさが解消されます。
  
行がアクティブに使用されている場合、つまり、マクロが展開されている場合はマクロで、現在の分岐が取得されている場合はIFで、アセンブリ中にエラーを生成します。ディレクティブに続くすべてのテキストは、エラーメッセージとして使用されます。
+
短絡評価:&&および||演算子と条件式は短絡されています。これは、演算子の1つを評価する必要がない場合、エラーを生成せずに未定義のシンボルまたは0による除算を含めることができることを意味します(ただし、正しい構文が必要です)。条件式では、これは成立しない分岐に適用されます。&&演算子では、最初のオペランドがfalseの場合は2番目のオペランドに、||では最初のオペランドが真の場合、2番目のオペランドに、というように。
 
 
[訳注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
 
.error Align out of memory
 
endif
 
.
 
.
 
.
 
 
 
===.SHIFT===
 
 
 
:MACRO引数をシフトします。マクロに関する章を参照してください。
 
 
 
[訳注sample:tmacro.asm]
 
 
 
.
 
.
 
.
 
pushmany macro reg
 
 
rept -1
 
if nul reg
 
exitm
 
endif
 
push reg
 
.shift
 
endm
 
 
endm
 
.
 
.
 
.
 
 
 
===.WARNING===
 
 
 
:.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]
 
 
 
.
 
.
 
.
 
proc
 
 
local n
 
n defl 0
 
 
rept 20
 
ds n
 
n defl n + 1
 
endm
 
 
endp
 
 
 
===DEFM===
 
 
 
:DEFineメッセージ、[[#directive_db|DB]]と同じ。
 
 
 
===DEFS===
 
 
 
:[[#directive_ds|DS]]と同じスペースを定義します。
 
 
 
===DEFW===
 
 
 
:DEFW [[#directive_dw|DW]]と同じ。
 
 
 
===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ワード形式のコードに挿入されます。
 
 
 
===ELSE===
 
 
 
:IF参照。
 
 
 
===END===
 
 
 
:アセンブリを終了します。このディレクティブの後のすべての行は無視されます。引数がある場合、数値式として評価され、結果はプログラムのエントリポイントとして設定されます。エントリポイントを設定した結果は、使用するコード生成の種類によって異なりますが、この場合でもドキュメント作成に使用できます。
 
 
 
===ENDIF===
 
 
 
:IF参照。
 
 
 
===ENDM===
 
 
 
:マクロを終了します。[[#macro_generalities|マクロに関する章]]を参照してください。
 
 
 
===ENDP===
 
 
 
:PROCブロックの終了をマークします。PROCを参照してください。
 
 
 
===EQU===
 
 
 
:等しいラベルを前に付ける必要があります。引数は数値式である必要があり、結果はラベルに割り当てられます。使用されるラベルは再定義できません。
 
 
 
===EXITM===
 
 
 
:マクロを終了します。[[#macro_generalities|マクロに関する章]]を参照してください。
 
 
 
===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===
 
 
 
:ファイルをインクルードします。引数で使用される規則については、[[#filename|ファイル名]]の章を参照してください。ファイルが読み取られ、結果は、ファイルがINCLUDE行ではなく現在のファイルにコピーされた場合と同じです。 含まれるファイルには、INCLUDEディレクティブなどが含まれる場合があります。 INCLUDEディレクティブはアセンブリフェーズの前に処理されるため、IFディレクティブを使用して条件付きで異なるファイルを含めることはできません。
 
 
 
[訳注sample:include.txt]
 
 
 
org 100h
 
; include.asm
 
 
nop
 
include if.asm
 
halt
 
include if.asm
 
ex de,hl
 
exx
 
ex af, af'
 
 
end
 
 
 
===INCBIN===
 
 
 
:バイナリインクルードです。バイナリファイルをインクルードします。バイナリファイルを読み取り、生成されたコードの現在の位置にコンテンツを挿入します。引数で使用される規則については、ファイル名の章を参照してください。
 
 
 
===IRP===
 
 
 
:引数を置換するコードのブロックを繰り返します。[[#macro_generalities|マクロに関する章]]を参照してください。
 
 
 
===LOCAL===
 
<div id="local_directive"></div>
 
:現在のブロックに対してローカルとして識別子をマークします。ブロックは、MACRO、REPT、IRP、またはPROCディレクティブである場合があり、ローカル領域は対応するENDMまたはENDPディレクティブで終了します。領域はブロックの先頭ではなく、LOCALディレクティブで始まります。注意してください。 同じ識別子の複数のローカル宣言が同じブロックで使用されている場合、最初の宣言のみが有効で、他の宣言は無視されます。
 
 
 
[訳注sample:local.asm]
 
 
 
; 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
 
 
 
===MACRO===
 
 
 
:マクロを定義します。[[#macro_generalities|マクロに関する章]]を参照してください。
 
 
 
===ORG===
 
 
 
:生成されたコードを配置する原点位置を確立します。同じプログラムで複数のORGディレクティブを使用できますが、生成されたコードが以前のコードを上書きする結果になる場合、結果は未定義です。
 
 
 
===PROC===
 
 
 
:PROCブロックの開始をマークします。唯一の効果は、LOCALディレクティブの領域を定義することです。ブロックは、対応するENDPディレクティブで終了します。 PROCブロックでサブルーチンを囲むことをお勧めしますが、他の状況でも使用できます。
 
 
 
[訳注sample:local.asm]
 
 
 
; 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
 
 
 
===PUBLIC===
 
 
 
:引数は、コンマで区切られた識別子のリストです。各識別子はパブリックとしてマークされます。 --publicコマンドラインオプションを使用すると、パブリックとしてマークされた識別子のみがシンボルテーブルリストに含まれます。
 
 
 
[訳注sample:showfcb.asm]
 
 
 
; showfcb.asm
 
 
bdos equ 5
 
 
conout equ 2
 
printstring equ 9
 
 
public fcb1, fcb2
 
fcb1 equ 005Ch
 
fcb2 equ 006Ch
 
 
org 100h
 
.
 
.
 
.
 
 
 
===REPT===
 
 
 
:ブロックを繰り返します。[[#macro_generalities|マクロに関する章]]を参照してください。
 

Revision as of 19:47, 12 December 2020

オペレーター概要

すべての数値は、必要に応じて2の補数またはトラクティングを使用して、符号なしの16ビットとして取得されます。論理演算子は、trueの場合はFFFF hexを返し、falseの場合は0を返します。引数の0はfalseで、その他の値はtrueです。 括弧を使用して、式の一部をグループ化できます。また、許可または要求するz80命令でインダイレクションを表現するためにも使用されます。これにより、インダイレクションが許可されている場所で括弧で囲まれた式を使用すると、いくつかのエラーが発生する可能性があります。 Pasmoは、いくつかのヒューリスティックを使用して、式を正しく解釈できるようにしますが、完全にはほど遠い状態です。

括弧のみのモード[訳注:—bracketオプション]を使用すると、括弧は式をグループ化するという独自の意味を持ち、間接指定には括弧が必要であるため、あいまいさが解消されます。

短絡評価:&&および||演算子と条件式は短絡されています。これは、演算子の1つを評価する必要がない場合、エラーを生成せずに未定義のシンボルまたは0による除算を含めることができることを意味します(ただし、正しい構文が必要です)。条件式では、これは成立しない分岐に適用されます。&&演算子では、最初のオペランドがfalseの場合は2番目のオペランドに、||では最初のオペランドが真の場合、2番目のオペランドに、というように。