Difference between revisions of "PASMO TEST"

From Z80 Machines Wiki
Jump to: navigation, search
(ディレクティブ)
Line 1: Line 1:
=優先順位テーブル=
+
=ディレクティブ=
  
優先順位による演算子の表、同じ行の演算子は同じ優先順位を持ちます。
+
Pasmoでサポートされているディレクティブのリスト(アルファベット順)。
  
## (see note)
+
===.ERROR===
$, NUL, DEFINED
 
*, /, MOD, %, SHL, SHR, <<, >>
 
+, - (binary[訳注:2項演算子])
 
EQ, NE, LT, LE, GT, GE, =, !=, <, >, <=, >=
 
NOT, ~, !, +, - (unary[訳注:単項演算子])
 
AND, &
 
OR, |, XOR
 
&&
 
||
 
HIGH, LOW
 
?
 
  
<nowiki>##</nowiki>演算子は特別な場合で、マクロ展開中に処理されます。[[#macro_generalities|マクロに関する章]]を参照してください。
+
行がアクティブに使用されている場合、つまり、マクロが展開されている場合はマクロで、現在の分岐が取得されている場合はIFで、アセンブリ中にエラーを生成します。ディレクティブに続くすべてのテキストは、エラーメッセージとして使用されます。
 
 
==オペレーターのリスト==
 
 
 
===! ===
 
 
 
:論理否定。引数が0の場合はtrue、それ以外の場合はfalseを返します。
 
 
 
===<nowiki>!= </nowiki>===
 
 
 
:NEと同じ。
 
 
 
===<nowiki>##</nowiki>===
 
<div id="operator_doublesharp"> </div>
 
:識別子貼り付け演算子。[[#macro_generalities|マクロに関する章]]を参照してください。
 
 
 
===$===
 
<div id="operator_dollar"> </div>
 
:現在の文の先頭の位置カウンタの値を提供します。たとえば、DWディレクティブでは、現在のアイテムではなく、リスト内の最初のアイテムの位置を指定します。
 
  
 
[訳注sample:align.asm]
 
[訳注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
 
  align macro n
 
   
 
   
 
  local newpos, oldpos
 
  local newpos, oldpos
 
  oldpos equ $
 
  oldpos equ $
  newpos equ (oldpos + n - 1) / n * n
+
  newpos equ (oldpos + n - 1) / n * n  
 
   
 
   
 
  if newpos < oldpos
 
  if newpos < oldpos
Line 54: Line 31:
 
  .
 
  .
  
===%===
+
===.SHIFT===
<div id="operator_percent"> </div>
 
:MODと同じです。
 
  
===&===
+
:MACRO引数をシフトします。マクロに関する章を参照してください。
  
:ANDと同じです。
+
[訳注sample: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が使用される場合にスペースを埋めるために使用される値です。
  
:GTと同じ
+
[訳注sample: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
 +
.
 +
.
 +
.
  
:GEと同じ
+
===DW===
 +
<div id="directive_dw"></div>
 +
: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を参照してください。
  
===AND===
+
===EQU===
  
:ビット単位のAND演算子。
+
:等しいラベルを前に付ける必要があります。引数は数値式である必要があり、結果はラベルに割り当てられます。使用されるラベルは再定義できません。
  
===DEFINED===
+
===EXITM===
  
:引数は識別子でなければなりません。結果は、識別子が定義されている場合はtrue、定義されていない場合はfalseです。
+
:マクロを終了します。[[#macro_generalities|マクロに関する章]]を参照してください。
  
===EQ===
+
===IF===
  
:等しい。両方のオペランドが等しい場合は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セクションをすべて終了します。
  
===GE===
+
===INCLUDE===
  
:より大きいか等しい。左のオペランドが右より大きいか等しい場合は真。
+
:ファイルをインクルードします。引数で使用される規則については、[[#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
  
===HIGH===
+
===INCBIN===
  
:引数の上位バイトを返します。
+
:バイナリインクルードです。バイナリファイルをインクルードします。バイナリファイルを読み取り、生成されたコードの現在の位置にコンテンツを挿入します。引数で使用される規則については、ファイル名の章を参照してください。
  
===LE===
+
===IRP===
  
:以下。左のオペランドが右よりも小さいか等しい場合は真。
+
:引数を置換するコードのブロックを繰り返します。[[#macro_generalities|マクロに関する章]]を参照してください。
  
===LOW===
+
===LOCAL===
 +
<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ブロックでサブルーチンを囲むことをお勧めしますが、他の状況でも使用できます。
  
:ビット単位ではありません。このオペランドの1の補数を返します。
+
[訳注sample: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コマンドラインオプションを使用すると、パブリックとしてマークされた識別子のみがシンボルテーブルリストに含まれます。
  
:ビット単位のOR演算子。
+
[訳注sample: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===
  
短絡評価:&&および||演算子と条件式は短絡されています。これは、演算子の1つを評価する必要がない場合、エラーを生成せずに未定義のシンボルまたは0による除算を含めることができることを意味します(ただし、正しい構文が必要です)。条件式では、これは成立しない分岐に適用されます。&&演算子では、最初のオペランドがfalseの場合は2番目のオペランドに、||では最初のオペランドが真の場合、2番目のオペランドに、というように。
+
:ブロックを繰り返します。[[#macro_generalities|マクロに関する章]]を参照してください。

Revision as of 19:52, 12 December 2020

ディレクティブ

Pasmoでサポートされているディレクティブのリスト(アルファベット順)。

.ERROR

行がアクティブに使用されている場合、つまり、マクロが展開されている場合はマクロで、現在の分岐が取得されている場合は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
	.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

バイトを定義します。引数は、文字列リテラルまたは数値式のコンマ区切りリストです。文字列リテラルはオブジェクトコードに挿入され、数値式の結果は単一バイトとして挿入され、必要に応じて切り捨てられます。

DEFB

DEFB DEFine Byte、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メッセージ、DBと同じ。

DEFS

DSと同じスペースを定義します。

DEFW

DEFW DWと同じ。

DS

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

DW Wordを定義します。引数は、数値式のコンマ区切りリストです。各数値式は2バイトのワードとして評価され、結果はZ80ワード形式のコードに挿入されます。

ELSE

IF参照。

END

アセンブリを終了します。このディレクティブの後のすべての行は無視されます。引数がある場合、数値式として評価され、結果はプログラムのエントリポイントとして設定されます。エントリポイントを設定した結果は、使用するコード生成の種類によって異なりますが、この場合でもドキュメント作成に使用できます。

ENDIF

IF参照。

ENDM

マクロを終了します。マクロに関する章を参照してください。

ENDP

PROCブロックの終了をマークします。PROCを参照してください。

EQU

等しいラベルを前に付ける必要があります。引数は数値式である必要があり、結果はラベルに割り当てられます。使用されるラベルは再定義できません。

EXITM

マクロを終了します。マクロに関する章を参照してください。

IF

条件付きアセンブリ。引数は数値式である必要があります。0の結果はfalse、それ以外はtrueとみなされます。引数がtrueの場合、IFセクションの終わりまたはELSEディレクティブが検出されるまで次のコードがアセンブルされ、そうでない場合は無視されます [訳注:そのため”if 0”は複数行コメントのように扱うことができます]。
ELSEディレクティブが存在する場合、引数がtrueであれば次のコードは無視され、falseであればアセンブルされます。 IFセクションは、ENDIFまたはENDMディレクティブで終了します(最後のケースでは、ENDMにも通常の効果があります)。 IFはネストできます。その場合、各ELSEおよびENDIFは対応するIFでのみ有効になりますが、ENDMは保留中のIFセクションをすべて終了します。

INCLUDE

ファイルをインクルードします。引数で使用される規則については、ファイル名の章を参照してください。ファイルが読み取られ、結果は、ファイルが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

引数を置換するコードのブロックを繰り返します。マクロに関する章を参照してください。

LOCAL

現在のブロックに対してローカルとして識別子をマークします。ブロックは、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

マクロを定義します。マクロに関する章を参照してください。

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

ブロックを繰り返します。マクロに関する章を参照してください。