WZDは,リロケータブルフォーマットによるリロケータブルアセンブラです。使用に際してはフロッピーディスクが必要となりますので注意してください。
とすると動作を開始します。アセンブルが終わると#を表示してS-OSのコマンドラインに戻ります。
とすると動作を開始します。あとは拡張をしているときと同じです。この方法は,1本のプログラムをアセンブルしたいときに用いると便利です。
まず,
#LWZD
#J300
でWZDを起動すると入力を促すプロンプト“*"を表示してWZDのコマンドラインに入ります。“*"の後ろに続けてパラメータを与えます。パラメータによって指示された動作が終了すると,再び入力を促すプロンプト“*"を表示して,WZDのコマンドラインに入ります。
さらに別のプログラムをアセンブルしたい場合には,1回目と同じようにパラメータを与え,WZDを終了したいときには,SHIFT+BREAKキーを押してください。S-OSのモニタに戻ります。
この方法は,アセンブルしたいプログラムが複数あるときに便利です。
EQU文のパラメータは1パス目のその時点において,値が確定している必要があります。このことによって一部,REDAのソースファイルがアセンプルできないことがあるかもしれませんが,そのときは値が確定する順にラベルを並べ替えてください。
PHASE文とDEPHASE文のあいだにおいてセグメントのモードを切り替えてはいけません。また,PHASE文とDEPHASE文のあいだではアドレス情報がアブソリュート値で処浬されます。
呼ばれたファイルから呼び出したファイルをインクルードしてはいけません(無限ループに陥ります)。
リストファイル中のデータの中に,**マークが現れることがありますが,これはその値がまだ確定していないことを示します。具体的にはアブソリュート値で処理されていないラベルを用いたときなどに現れます。
プログラムにはアルゴリズムを表している部分とデータを表している部分がありますが(特にマシン語では露骨にそうなる),ときとして両者を分けたいときがあります。アブソリュートアセンブラならワークエリアを後ろに持っていけばよいのですが,複数のリロケータブルファイルからオブジェクトファイルを作る場合はそうはいきません。そこでリンカに複数のPCを持たせてアルゴリズムを表すコードがきたらコードセグメントを受け持つPCを用いて,データの部分はデータセグメントを受け持つPCを用いて処理してやる必要があります。
WZDでは,コードセグメントとデータセグメントのほかにワークセグメントが用意されています。
また,セグメントを使ううえでいくつか注意事項があります。
セグメントの異なるエリアにJR命令やDJNZ命令でジャンプすることはできません(JR命命やDJNZ命令のオペランドの値は,WZD内で処理を完了する必要がある。その処理をリンカに持ち越してはいけない)。
コードセグメントとデータセグメントは,アドレスを重ねてはいけませんが,ワークセグメントはコードセグメントおよびデータセグメントと重ねてもかまいません。
また,ワークセグメントの内容は,リンカにアドレス情報を伝えるだけで,実体を作成することはできません。さらに例外的にこのセグメントだけPCのあと戻りができます。
いったんORG命令を処理すると同一ファイル内においては,そのセグメントのアドレス情報は,すべてアブソリュート値で処理されます。ORG命令を挟んでの相対ジャンプはできません(絶対ジャンプはできる)。
S-OSでは,64Kバイトを超える大きさのファイルを扱うことはできません。ソースファイルの大きさが64Kバイトを超えることはまずないと思いますが,30Kバイトくらいのソースファイルからリストファイルを作成した場合,64Kバイトを超えてしまう可能性があります。そのときは,“Bad
Record"とエラーメッセージを表示してすべてのアセンプル作業を中止します。
[リロケータブルファイル名],[リストファイル名]=[ソースファイル名]の書式でパラメータを与えるが,続けて以下のスイッチを併用することによってパラメータの一部またはソースファイルの一部を省略することができる。[リストファイル名],[リロケータブルファイル名],[ソースファイル名]について拡張子を省略した場合は,それぞれ“.PRN",“.REL",“.ASM"になる。
リストファイルのファイル名をソースファイルのファイル名と同じにする。
リロケータブルファイルのファイル名をソースファイルのファイル名と同じにする。
ソースファイルには,シフトJISコードで表される漢字などが含まれていることを示す。
ソースファイルとリロケータブルファイルを[ファイル名]にする。
ソースファイルを[ファイル名]にする。このときリロケータブルファイルとリストファイルは作らない。
ソースファイル,リロケータフルファイル,リストファイルすべてを[ファイル名]とする。
ソースファイルとリストファイルを[ファイル名]にする。
ソースファイルを[ファイル名2],リロケータブルファイルを[ファイル名1]にする。
ソースファイル,リストファイルを[ファイル名2],リロケータブルファイルを[ファイル名1]にする。
ソースファイルを[ファイル名2],リストファイルを[ファイル名1]にする。
ソースファイル,リロケータブルファイルを[ファイル名2],リストファイルを[ファイル名1]にする。
アセンブル作業を終了する。この行の後ろになにを書いてもアセンブラには無視される。式がある場合には,その値を実行開始アドレスに指定すること([式]は省略可能)
以後のプログラムはシフトJISコードで害かれていることを示す(パラメータのスイッチで/Kを指定した場合と同じ)。
以後のプログラムはASCIIコードのみで警かれていることを示す。先の.KANJI命令と組み合わせることによって,REDAにおけるKスイッチの働きをアセンブル中に切り替えられます。
以後のプログラムはコードセグメントに配置されることを示す。
以後のプログラムはデータセグメントに配置されることを示す。
以後のプログラムはワークセグメントに配置されることを示す。
[ラベル名]で表されたラベルは,他のファイルで外部ラベルとして宣言されていることを示す。同じファイル中に同じ名前があった場合は,Multi
Definedエラーとなる。
[ラベル名]で表されたラベルを外部(参照可能)ラベルとして宣言される。同じファイル中に[ラベル名]で表されたラベルがない場合は,Undefined
Labelエラーとなる。
[ラベル名]で表されたラベルは,外部ラベルとして処理される。なお,この表記は式中においてのみ可能。
[ラベル名]で表されたラベルを,現時点でのPCの値を表す内部ラベルとして宣言するとともに,外部(参照可能)ラベルとしても宣言する。この表記は,ソースプログラム中の1列目においてのみ可能。
以下のプログラムをPCに一時的に[式]の値にする。PCを一時的に変更するだけで,オブジェクトプログラムは以前のアドレスと連続して配置される(プログラムの転送は行われない)。
PHASE文で一時的に変更したPCを元の値に戻す(PHASE文とDEPHASE文の間のフログラム分だけPCは進んでいる)。
ソースプログラム中のこの位置に[ファイル名]で示されたファイルをそっくり読み込む。4重までネスティング可能。
リストファイルにおいて1べージあたりの行数を指定。ページごとに区切られたくない場合は,PAGE 0FFFFHとすること(6万行以上のファイルは存在しないと仮定)。デフォルトは0FFFFH。
リストファイルにおいてこのプログラムのタイトルを[文字列]にする。タイトルとはリストファイルの一番最初の行にプリントされるタイトルであって,リストファイルネームとは関係ない。
JRやDJNZ命令などでオペランドで表された値が届く範囲にない
1パス目で決まっていなければならない値が決まっていない
JRまたは,DJNZ命令のオペランドにおいて,値が不確定な意味のない式を書いた
(C)1990 Tatsuya Ishigami(original)
(C)1997 Junji Okazaki(edited)
(C)2024 Oh!Ishi,Nibbles Lab.(formatted)