シンボル制御ディレクティブ
構文
EXTERN symbol [ ,symbol ] …
EXTWEAK symbol [ ,symbol ] …
IMPORT symbol [ ,symbol ] …
PUBLIC symbol [ ,symbol ] …
PUBWEAK symbol [ ,symbol ] …
REQUIRE symbol
パラメータ
| インポートまたはエクスポートされるシンボル。 |
説明
これらのディレクティブは、モジュール間でシンボルがどのように共有されるかを制御します。
ディレクティブ | 説明 |
|---|---|
外部シンボルをインポートします。 | |
外部シンボルをインポートします。シンボルは定義できません。 | |
認識されますが、無視されます。 | |
他のモジュールにシンボルをエクスポートします。 | |
他のモジュールにシンボルをエクスポートします。複数の定義が許可されます。 | |
シンボルを強制参照させます。 |
他のモジュールへのシンボルのエクスポート
1つ以上のシンボルを他のモジュールで使用できるようにするには、PUBLICを使用します。PUBLICとして定義されたシンボルは、再配置可能または絶対であり、(他のシンボルと同様の規則に従って)式の中で使用することもできます。
PUBLICディレクティブは、常に完全な32ビット値をエクスポートするため、8ビットプロセッサおよび16ビットのプロセッサ用のアセンブラでも可能なグローバル32ビット定数にすることができます。LOW、HIGH、>>、<< 演算子を使用することにより、このような定数の任意の部分を8 ビットまたは16 ビットのレジスタまたはワードに読み込むことができます。
1つのモジュールには任意の数のPUBLIC定義シンボルを使用できます。
複数の定義があるシンボルの他のモジュールへのエクスポート
PUBWEAKはPUBLICと似ていますが、複数のモジュールで同じシンボルを定義できます。これらの定義のいずれか1つのみがリンカによって使用されます。シンボルのPUBLIC定義が含まれるモジュールが、同じシンボルのPUBWEAK 定義が含まれる1つ以上のモジュールにリンクされている場合、リンカはPUBLIC 定義を使用します。
注記
ライブラリモジュールへのリンクは、そのモジュール内のシンボルへの参照が行われ、シンボルがまだリンクされていない場合にのみ行われます。モジュール選択フェーズでは、PUBLIC定義とPUBWEAK定義は区別されません。つまり、PUBLIC定義の含まれるモジュールが選択されていることを確認するためには、これを他のモジュールより前にリンクするか、そのモジュール内で他のPUBLICシンボルへの参照が行われていることを確認する必要があります。
シンボルのインポート
型が設定されていない外部シンボルをインポートするには、EXTERNまたはIMPORTを使用します。
REQUIREディレクティブにより、シンボルが参照されているものとしてマーキングされます。コードが参照されなくても、シンボルを含むセクションをロードしなければならないときに、これは便利です。
例
次の例は、エラーメッセージを出力するサブルーチンを定義し、エントリアドレスerrをエクスポートして、他のモジュールから呼び出せるようにしています。メッセージは二重引用符に囲まれているため、文字列の後にはゼロバイトが挿入されます。
printは外部ルーチンとして定義されており、アドレスはリンク時に解決されます。
name errorMessage
extern print
public err
section MYCODE:CODE(2)
arm
err adr r0,msg
bl print
bx lr
data
msg dc8 "** Error **"
end