Tatara

第6章
ソースの書式

この章では、ソース・ファイルの書き方を説明します。1行とは何か、TATARAが 1行を分ける4つの部分、そしてラベル、コメント、大文字と小文字、スペースとタブ、行の長さ、行末の規則です。TATARAが、ある行について「not a directive, a macro or an instruction」と表示したのに、その行が正しく見えるときは、この章を読み返してください。

6.1 行

ソース・ファイルはテキスト・ファイルで、TATARAはそれを1行ずつ読みます。それぞれの行は、次の3つのどれかです。

ソース・ファイルは、プレーン・テキストを保存できるエディターであれば、MSXでも別のコンピューターでも書けます。PCやMacで書いたファイルをそのままアセンブルできる理由は、6.6節で説明します。

6.2 4つのフィールド

TATARAは、どの行も最大4つのフィールド(field)に分けます。順番はいつも同じです。

label      operation  operand       ; comment
 

4つのフィールドがすべてそろった行を、図6.1に示します。

PIC

図 6.1: ソースの1行と、その4つのフィールド
ラベル

その行のアドレスに付ける名前です(2章)。start:がその例です。ラベルを書ける場所は次の節で、名前に使える文字は7章で説明します。

オペレーション

その行が何をするかを表します。ldのような命令、dbのような疑似命令、またはマクロの名前です。そのあとの最初のスペースかタブで終わります。このフィールドをオペレーション(operation)といいます。

オペランド

オペレーションが扱う対象で、de,msgがその例です。オペレーションのあとからコメントまで、コメントがなければ行の終わりまで続き、スペースを含むこともできます。たとえばdb "Hello from Tatara."では、"Hello from Tatara." 全体がオペランド(operand)です。オペランドに何を書けるかはオペレーションによって決まります(8章から11章)。

コメント

読む人のための文章で、セミコロンから行の終わりまでです。TATARAはこれを無視します。

どのフィールドも省略できます。よく使われる行の形を表6.1に示します。

行

フィールド

start:

ラベル

start: ld de,msg

ラベル、オペレーション、
オペランド

   ret

オペレーション

   ld c,_TERM0

オペレーション、
オペランド

   jp BDOS ; back to MSX-DOS2

オペレーション、
オペランド、コメント

; HELLO.AS - the smallest complete program.

コメント

(空行)

なし

表 6.1: よく使われる行の形

6.3 ラベルを書く場所

TATARAは、次の2つのどちらかの方法でラベルを見分けます。

  1. 1桁目、つまり行の最初の文字から始まる語は、コロンの有無にかかわらずラベルです。
  2. 1桁目から始まらない語は、コロンで終わっている場合だけラベルです。

したがって、字下げした語にコロンがなければ、それはオペレーションです。次のソースINDENT2.ASでは、startが字下げされていてコロンがないので、TATARAはこれをオペレーションとみなします。しかし、その名前のオペレーションはありません。

  start   ld      a,1 
          end
 
INDENT2.AS(1): ERROR: not a directive, a macro or an instruction.
 

startのあとにコロンを付ければ、同じように字下げした行でも受け付けられます。

警告.  1桁目から始まるものは、命令であってもすべてラベルになります。次のソースCOL1.ASでは、命令を字下げせずに入力しています。

ld      a,1 
        end
 

TATARAはldをラベル、a,1をオペレーションとみなし、次のように表示して止まります。

COL1.AS(1): ERROR: not a directive, a macro or an instruction.
 

このメッセージが正しく見える行を指しているときは、その行がスペースかタブで始まっているかを確かめてください。

putstr::のようにコロンを2つ付けて書いたラベルは、パブリックにもなります。これはPUBLIC疑似命令と同じ働きです(12章)。

サンプルは、次の決まりに従って書かれています。まねをするのにもよい書き方です。ラベルは1桁目から書いてコロンで終え、同じ行のそれ以外の部分と、ラベルのない行はすべて、タブで字下げします。

6.4 コメント

コメント(comment)はセミコロンで始まり、行の終わりまで続きます。コメントだけの行も書けます。その場合は、HELLO.ASの最初の数行のように、セミコロンを1桁目に置くことができます。

文字列の中のセミコロンは、コメントの始まりにはなりません。次の行では、文字列は"a;b"で、コメントは2つ目のセミコロンから始まります。

        db      "a;b"           ; the semicolon is part of the string
 

同じ行の中で閉じていない引用符は、文字列の始まりになりません。これは、アポストロフィーを含む唯一のZ80命令で意味を持ちます。

        ex      af,af'          ; swap the two AF registers
 

6.5 大文字と小文字

命令、レジスター名、疑似命令は、大文字でも小文字でも、その混じったものでも書けます。LD A,B、ld a,b、Ld A,bは同じ行です。

名前も、TATARAを/C付きで実行しないかぎり(5章)、大文字と小文字を区別しません。/Cを付けなければ、msg、MSG、Msgは同じ名前です。詳しくは7章で説明します。

文字列の中の文字は、大文字と小文字がそのまま保たれます。"Hello"と"HELLO"は別の文字列です。

サンプルのコードは小文字で書かれています。インクルード・ファイルは、MSXの資料と同じように、名前を大文字で書いています。たとえばld c,_STROUTです。

6.6 スペース、タブ、行の長さ、行末

6.6.1 スペースとタブ

スペースとタブはフィールドを区切ります。2つのフィールドの間には、どちらでも、いくつでも、混ぜて使ってもかまいません。タブを使うとフィールドの縦の位置がそろうので、サンプルではタブを使っています。リスティングでは、タブは次の8の倍数の桁まで進みます(18章)。

6.6.2 行の長さ

1行は255文字まで書けます。それより長い行があると、TATARAは次のメッセージを表示して止まります。

ERROR: source line too long.
 

6.6.3 行末

テキスト・ファイルでは、それぞれの行の終わりを1つまたは2つの制御文字で表します。MSX-DOSとWindowsはCRとLFの2つを使い、macOSとLinuxはLFだけを使います。TATARAはLFで行を終え、CRは無視するので、どちらのファイルも読めます。そのため、別のコンピューターで書いたソースは、変換せずに MSXにコピーしてアセンブルできます。ファイルの最後の行は、行末の文字がなくても読み込まれます。

ごく古いMacintoshのプログラムが書き出すような、CRだけを使うファイルは、1つの長い行として読まれ、TATARAは上のメッセージを表示して止まります。

6.6.4 Ctrl-Z

MSX-DOSのエディターには、CP/Mからの習慣で、ファイルの最後の行のあとに Ctrl-Z(文字コード1Ah)を書き込むものがあります。TATARAは Ctrl-Zで読み込みをやめ、そのあとにあるものはすべて無視します。