第6章
ソースの書式
この章では、ソース・ファイルの書き方を説明します。1行とは何か、TATARAが 1行を分ける4つの部分、そしてラベル、コメント、大文字と小文字、スペースとタブ、行の長さ、行末の規則です。TATARAが、ある行について「not a directive, a macro or an instruction」と表示したのに、その行が正しく見えるときは、この章を読み返してください。
6.1 行
ソース・ファイルはテキスト・ファイルで、TATARAはそれを1行ずつ読みます。それぞれの行は、次の3つのどれかです。
- 空行。TATARAは読み飛ばします。
- コメント行。読む人のためのコメントだけが書かれた行です。
- ステートメント(statement)。Z80への命令、TATARAへの疑似命令、またはマクロの名前(16章)が書かれた行です。
ソース・ファイルは、プレーン・テキストを保存できるエディターであれば、MSXでも別のコンピューターでも書けます。PCやMacで書いたファイルをそのままアセンブルできる理由は、6.6節で説明します。
6.2 4つのフィールド
TATARAは、どの行も最大4つのフィールド(field)に分けます。順番はいつも同じです。
label operation operand ; comment
4つのフィールドがすべてそろった行を、図6.1に示します。
- ラベル
-
その行のアドレスに付ける名前です(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.3 ラベルを書く場所
TATARAは、次の2つのどちらかの方法でラベルを見分けます。
- 1桁目、つまり行の最初の文字から始まる語は、コロンの有無にかかわらずラベルです。
- 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 endTATARAは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で読み込みをやめ、そのあとにあるものはすべて無視します。