(局所)ラベルの付け方 ルール
アセンブラの場合、データラベルやサブルーチンのエントリラベル以外
ほとんど、無意味なラベルが 多数 必要になってきます。
ラベルが重複しては、エラーになるし、かといって
重複しない無意味な名前を付けるほうが、苦痛となります。
そこで、工夫されたのが、ローカルラベル です。
局所ラベルとも言います。(重複してもOK)
便利な機能なんですが、アセンブラによって仕様が、まちまち
まったく、互換性が無い!と あきらめた方が良いくらいです。
メインに使うアセンブラは NASM に決めましたが、
デバッガのことも考えると TASM も捨てがたく、
できれば、手間が少なく移植できるに越した事はありません。
それぞれ、人によって、アセンブラも好みがあるでしょうし、
どうしても、TASM で開発したいという人がいるかもしれません。
【ローカルラベルのルール】
- NASM .(ドット)で始まるラベル。
- TASM @@(2つのアットマーク)で始まるラベル。
とりあえずは、NASMを使うので、
ドットで始めますが、あえて
.@Label:
のように、.(ドット)+@(アットマーク)を先頭につけることにします。
全てのラベルを、このルールで統一しておくと、
エディタの「置換」機能で、簡単に .@ を @@ に替えることができます。
【ラベルの命名ルール】
さらに、アセンブラでは、ラベルに何処から飛んでくるのかが、非常に分かりづらく
プログラムの可読性を落としている。
少しでも、それを助けるために、ラベルにある程度の意味を持たせる。
① ジャンプで↓へ飛ぶラベル。 → 先頭に P を付ける。
例:
jmp .@Pabc
・・・・・・
・・・・・・
.@Pabc:
つまり、ここへは、上からしか飛んでこない。
(Passの略と覚える)
② ループのために↑へ戻るラベル。 → 先頭に L を付ける。
つまり、ここへは、下からしか飛んでこない。
例:
.@Loop1:
・・・・・・
・・・・・・
jne .@Loop1
(Loopの略)
③ 同じような判定の繰り返しで↓へ飛ぶラベル。 → 先頭に N を付ける。
例:
jmp .@Next1
・・・・・・
・・・・・・
.@Next1:
つまり、ここへは、上からしか飛んでこない。
(Nextの略)
④ ループでは無いが、↑へ戻るラベル。 → 先頭に B を付ける。
例:
.@Back1:
・・・・・・
・・・・・・
jne .@Back1
(Backの略)
④' または、上からも下からも飛んで来るラベル。
例:
jmp .@Both
・・・・・・
.@Both:
・・・・・・
jne .@Both
(Bothの略)
⑤ サブルーチンを抜ける↓へ飛ぶラベル。 → 先頭に Q を付ける。
例:
jmp .@Qsub
・・・・・・
・・・・・・
.@Qsub:
retn
つまり、ここへは、上からしか飛んでこない。
(Quitの略)
⑤' サブルーチンの終了↓へ飛ぶラベル。 → 先頭に E を付ける。
例:
jmp .@End1
・・・・・・
・・・・・・
,@End1:
pop AX
retn
つまり、ここへは、上からしか飛んでこない。
(Endの略)
または、異常でサブルーチンの終了↓へ飛ぶラベル。 → 先頭に E を付ける。
例:
jmp .@Err1
・・・・・・
・・・・・・
,@Err1:
・・・・・・ 異常処理
pop AX
retn
つまり、ここへは、上からしか飛んでこない。
(Errorの略)
あんまり、たくさんルールを作ると、かえって慣れないことになるので
P,L,N,Q,E の 5つ のみとしておきます。
ラベル名を見ただけで、上下 何処から飛んで来るのかが ある程度分かります。