ローカルラベル
(1)
- C言語の変数の仕組みは面白い。{ }でブロックを作ると、ブロックの中では自由に変数宣言をすることができる。このとき外側の変数と同名でもかまわない。同名の場合、ブロック内ではブロック内で宣言した変数が使われて、ブロックから出ると元に戻る。
- これによりちょっとしたコード片やマクロなどがかなり書きやすくなる。コピペするだけで再利用も可能だ。変数名を付け直さなくてもよくなる。
(2)
- 実はアセンブラの世界でも、この便利さを目指したものがある。それがローカルラベルだ。たとえばMASMの場合、@@というラベル宣言と、@f、@bというラベル参照がある。
- @bは現在の位置から戻って一番近い@@:にマッチする。@fは現在の位置から進んで一番近い@@:にマッチする。だから@@:は何度でも使えてマクロを作るときに便利である。
- これに対してNASMのローカルラベルはさらに一歩進んでいる。@@方式ではラベルに名前はつけられないし、結局マクロ内では1組しかラベルを使えなかった。NASMは「グローバルラベルが宣言されるたびに異なるローカルラベル空間ができる」という仕様を採用した。これにより、.label1:や.label2:みたいな表現を何回も使うことができる(ピリオドで始まるのがNASMのローカルラベル)。