Changes

ASSEMBLER PASMO JP

162 bytes added, 11:02, 11 December 2020
一般的なもの
すべての数値は、必要に応じて2の補数またはトラクティングを使用して、符号なしの16ビットとして取得されます。論理演算子は、trueの場合はFFFF hexを返し、falseの場合は0を返します。引数の0はfalseで、その他の値はtrueです。 括弧を使用して、式の一部をグループ化できます。また、許可または要求するz80命令でインダイレクションを表現するためにも使用されます。これにより、インダイレクションが許可されている場所で括弧で囲まれた式を使用すると、いくつかのエラーが発生する可能性があります。 Pasmoは、いくつかのヒューリスティックを使用して、式を正しく解釈できるようにしますが、完全にはほど遠い状態です。
括弧のみのモードを使用すると、括弧は式をグループ化するという独自の意味を持ち、間接指定には括弧が必要であるため、あいまいさが解消されます。 [[#bracket_mode|括弧のみのモード]][訳注:—bracketオプション]を使用すると、括弧は式をグループ化するという独自の意味を持ち、間接指定には括弧が必要であるため、あいまいさが解消されます。  短絡評価:&&および||演算子と条件式は短絡されています。これは、演算子の1つを評価する必要がない場合、エラーを生成せずに未定義のシンボルまたは0による除算を含めることができることを意味します(ただし、正しい構文が必要です)。条件式では、これは成立しない分岐に適用されます。&&演算子では、最初のオペランドがfalseの場合は2番目のオペランドに、||では最初のオペランドが真の場合、2番目のオペランドに、というように。 =優先順位テーブル=
===Table of precedence.===
優先順位による演算子の表、同じ行の演算子は同じ優先順位を持ちます。
 
## (see note)
$, NUL, DEFINED
*, /, MOD, %, SHL, SHR, <<, >>
+, - (binary[訳注:2項演算子])
EQ, NE, LT, LE, GT, GE, =, !=, <, >, <=, >=
NOT, ~, !, +, - (unary[訳注:単項演算子])
AND, &
OR, |, XOR
<nowiki>##</nowiki>演算子は特別な場合で、マクロ展開中に処理されます。マクロに関する章を参照してください。
===List of operators.オペレーターのリスト=== 
 
:論理否定。引数が0の場合はtrue、それ以外の場合はfalseを返します。
!=
 
:NEと同じ。
<div id="operator_dollar">
$ </div>
 
:現在の文の先頭の位置カウンタの値を提供します。たとえば、DWディレクティブでは、現在のアイテムではなく、リスト内の最初のアイテムの位置を指定します。
<div id="operator_percent">
% </div>
 :MODと同じ。 MODと同じです。
 
:ANDと同じです。
&&
 
:論理的両方のオペランドが真の場合、真。
<nowiki>*</nowiki>
 
:乗算。
+
 
:加算または単項+。
-
 
:減算または単項-。
/
 
:切り捨てられた整数の除算。
<
 
:LTと同じ
<<
 
:SHLと同じ
<=
 
:LEと同じ
=
 
:EQと同じ
>
 
:GTと同じ
>=
 
:GEと同じ
>>
 
:SHRと同じ
 
:条件式。 ?の右側の式の場合、:で区切られた2つの式が続く必要があります。 trueの場合、最初の式が評価され、falseの場合、2番目の式が評価されます。
|
 
:ORと同じ。
||
 :論理的または。彼のオペランドの1つがtrueの場合、true。 論理OR。オペランドの1つがtrueの場合、true。
 
:NOTと同じ
AND
 
:ビット単位のAND演算子。
DEFINED
 
:引数は識別子でなければなりません。結果は、識別子が定義されている場合はtrue、定義されていない場合はfalseです。
EQ
 
:等しい。両方のオペランドが等しい場合はtrue、そうでない場合はfalse。
GE
 
:より大きいか等しい。左のオペランドが右より大きいか等しい場合は真。
GT
 
:より大きい。左のオペランドが右より大きい場合は真。
HIGH
 
:引数の上位バイトを返します。
LE
 
:以下。左のオペランドが右よりも小さいか等しい場合は真。
LOW
 
:引数の下位バイトを返します。
LT
 :未満。 lefthオペランドが右より小さい場合はtrue。 左オペランドが右より小さい場合はtrue。
MOD
 
:係数。整数除算の残り。
NE
 
:等しくない。両方のオペランドが等しい場合はfalse、そうでない場合はtrue。
NOT
 
:ビット単位ではありません。このオペランドの1の補数を返します。
NUL
 
:右に何かがある場合はtrueを返し、それ以外の場合はfalseを返します。引数がマクロのパラメーターである場合に役立ちます。
OR
 
:ビット単位のOR演算子。
SHL
 
:シフト左。ゼロで埋めて、右オペランドで指定されたビット数だけ左にシフトした左オペランドを返します。
SHR
 
:シフト右。右側のオペランドで指定されたビット数だけ右側にシフトされ、ゼロで埋められた左側のオペランドを返します。
XOR
 
:ビット単位のxor(排他的OR)演算子。
=マクロ=Macros.== ===Generalities.一般的なもの=== 
マクロディレクティブには、適切なMACROディレクティブと、繰り返しディレクティブREPTおよびIRPの2種類があります。さらに、ENDMおよびEXITMディレクティブは、マクロ展開の終了を制御します。 マクロパラメーターは、マクロが展開されたときに適用される引数の値に置き換えられる識別子です。引数は空にすることも、1つ以上のトークンで構成することもできます。 MACROが別のマクロディレクティブ内で定義されている場合、外部パラメーターは置換されません。他のマクロディレクティブでは、パラメーターの置換は最も外部のディレクティブによって開始されます。 NUL演算子を使用して、引数が空でないかどうかを確認できます。 .SHIFTディレクティブを使用して、不特定の数の引数を処理できます。 識別子の貼り付け:MACRO内で演算子##を使用して2つの識別子を結合し、別の識別子を作成できます。これは、マクロ引数に依存する識別子を作成できるようにすることを目的としています。
===Directives.==ディレクティブ=
====.SHIFT====
:MACRO内でのみ使用できます。 MACRO引数は1つ左の場所に配置され、最初の引数は破棄されます。シフト後にパラメーターリストを埋めるのに十分な引数がない場合、残りの引数は未定義になります。
====ENDM====
 :ENDM 現在のMACRO定義、または現在のREPTまたはIRPブロックの終了をマークします。マクロブロックに含まれるすべてのIFブロックも閉じられます。
====EXITM====
 :EXITM 現在のMACRO、REPT、またはIRPブロックを終了します。 MACROの場合、マクロ展開は終了します。他の場合、ブロックのコード生成は終了し、対応するENDMの後にアセンブリが続行されます。
====IRP====
IRP parameter, argument list.
:引数ごとに、IRPディレクティブと対応するENDMの間でコードのブロックを1回繰り返します
====MACRO====
 :大きい マクロを定義します。使用できる形式は2つあります。
名前MACRO [パラメーターのリスト]
MACRO name [ , list of parameters]
:すべての場合において、パラメーターのリストは識別子のコンマ区切りリストであり、名前は作成されたマクロに割り当てられた名前です。 マクロを使用するには、単に名前を指定し、オプションで引数のリストを指定します。引数リストは、マクロのパラメーターリストと同じ長さである必要はありません。長い場合、余分な引数は使用されませんが、MACRO内で.SHIFTを使用して取得できます。短い場合、一部のパラメーターが未定義になります。これは、NUL演算子を使用してMACRO内でテストできます。
====REPT====
:REPTディレクティブと対応するENDMの間のコードブロックを、引数で指定された回数繰り返します。引数は0にすることができます。その場合、ブロックはスキップされます。 さらに、ループ変数を指定できます。このvarはマクロパラメーターではなく、LOCAL DEFLシンボルとして使用され、その値はループの反復ごとに増分されます。初期値とincementを指定でき、デフォルトはそれぞれ0と1です。 ==提案と発展の可能性==
==About suggestions and possible improvements.==
Pasmoの前提は、クロスアセンブラーであり、多くの利用可能なリソースがあるマシンで使用される場合です。それから私は、Pasmoにそれを含める方がはるかに便利だと思う(または他の人が私に納得させる)ことをしない限り、他のユーティリティで簡単にできることをする手段を提供する努力をしません。 たとえば、sinテーブルを作成する場合は、テーブルにファイルを書き込み、そのファイルをINCLUDEするお気に入りの言語でプログラムを作成できます。また、そのタイプのことを自動化する場合は、makeを使用できます。 それを考慮に入れて、私はPasmoを改善するための提案とそれを実装するパッチを受け入れています。後者の場合は、オペレーティングシステムやコンパイラに依存せずに、ポータブルな方法で物事を書くように注意してください。
==Why Pasmo can not generate linkable code?なぜPasmoはリンク可能なオブジェクトを生成できないか== 
Pasmoには、メモリの絶対アドレスを使用する単純なコードジェネレーターがあります。そのため、リンカで使用するための再配置可能なコードを生成するように適合させることが難しくなります。私は今のところそれをする予定はありません、誰かが貢献したいのでしょうか?
==Game Boy==
ゲームボーイ。 一部の人々は、Game Boyプログラミングのサポートを追加するよう提案しました。 2つの問題があります。Pasmoでコードを生成するために使用される単純化された方法と、Game Boyについての私の存在しない知識です。
ゲームボーイ。 一部の人々は、Game Boyプログラミングのサポートを追加するよう提案しました。 2つの問題があります。Pasmoでコードを生成するために使用される単純化された方法と、Game Boyについて私の知識がないことです。  ==Thanks謝辞== 
提案を行い、バグを通知または修正したすべての人々に感謝します。そして、彼らがPasmoで行う美しいことを私に見せてくれます。
==Tricks.小技集==
Pasmoを使用して、任意のバイナリファイルを.tapに変換できます。たとえば、convert.asmと呼ばれる小さなプログラムを作成します。
次のようにアセンブルします:--tap convert.asm file.tap。サポートされている他の形式でも同じことが行われます。
==Bugs.既知のバグ== Pasmoは、 'ld b、(nn)'など、存在しないz80命令の行に見える式を使用すると警告を発しますが、 'ld b、(i1 + i2)のような場合にも警告を検出する簡単な方法*(i3 + i4) '。 その場合の警告を回避する方法は、式の前に括弧「+」または「0 +」を付けることです。 ブラケットのみのモードを使用すると、問題は存在しません。その場合、括弧は常に表現として扱われ(そしてプログラマーはそれを知っているはずです)、したがって警告は発せられません。 それについてのさらなる提案は歓迎です。 名前にブランク、シングル、ダブルクォートが含まれるファイルを含める方法はありません。誰かがそのようなファイル名を使用していますか?名前にブランク、シングル、ダブルクォートが含まれるファイルを含める方法はありません。そのようなファイル名を使用している人がいますか?
==Epilogue.最後に==それはすべての人々です! すべての人々へ! コメントや批判を送信してください: julian.notfound[訳注:atをエスケープして表示します]gmail.com 有効なHTML 4.0!