Everything
5.2.2 リンク制御擬似命令

プログラムを複数のファイルに分割して記述するリロケータブルアセンブルを実行するための制御命令です。

.SECTION

セクションの宣言、再開を指定します。

 

[指定形式]

.SECTION△<セクション名>
.SECTION△<セクション名>,<セクション属性>
.SECTION△<セクション名>,<セクション属性>,ALIGN=[2|4|8]
.SECTION△<セクション名>,ALIGN=[2|4|8]
<セクション属性>:[CODE|ROMDATA|DATA]

[詳細説明]

セクションの宣言、再開を指定します。

(1) セクションの宣言

セクション名、セクション属性を指定し、セクションの始まりを定義します。

(2) セクションの再開

ソースプログラム中にすでに存在しているセクションを再開します。セクションの再開ではすでに存在するセクション名を指定します。セクション属性とアライメント補正値は最初に宣言したものを継続します。

‘ALIGN=’指定がある場合、指定されたセクションに対してアライメント補正値を変更することができます。

ALIGN指定をした相対アドレス形式セクションまたは絶対アドレス形式セクションに、制御命令".ALIGN"が記述できます。

ALIGN指定がない場合、そのセクションの境界調整数は1となります。

 

.SECTION P,CODE

NOP

 

.SECTION B_1,DATA

.BLKB 10

 

.SECTION D_1,ROMDATA

.BYTE "abcd"

.SECTION D,ROMDATA,ALIGN=4

.LWORD 11111111H,22222222H

 

.END

 

[備考]

セクション名は必ず記述してください。

メモリ領域を確保したりメモリにデータを格納するアセンブラ制御命令を記述する場合は、必ず本制御命令でセクションを定義してください。

ニーモニックを記述する場合は必ず、本制御命令でセクションを定義してください。

セクション属性とALIGNは、セクション名の後に記述してください。

セクション属性および、ALIGN指定をする場合は、カンマで区切って記述してください。

セクション属性とALIGNの記述順序は任意です。

セクション属性は、’CODE’,’ROMDATA’,’DATA’のいずれかを記述できます。

セクション属性は省略できます。このとき、アセンブラはセクション属性をCODEとして処理します。

-endian=big指定時、絶対アドレス形式のCODEセクションの開始アドレスには4の倍数以外の値を指定することはできません。

-endian=big指定時、絶対アドレス形式のCODEセクションはウォーニングを出力し、セクションサイズが4の倍数になるようにアセンブラがセクション末尾にNOP(0x03)を書き込みます。

定義されているセクション名と同じ名前のシンボルを定義することはできません。セクションとシンボルを同じ名前で定義した場合、後で定義したものはA2118エラーとなります。

$iopという名前のセクション名を定義することはできません。$iopを定義した場合A2049エラーとなります。

 

.GLB

本擬似命令で指定したラベルおよびシンボルがグローバルであることを宣言します。

 

[指定形式]

.GLB△<名前>
.GLB△<名前>[,<名前> …]

[詳細説明]

本制御命令で指定したラベルおよびシンボルがグローバルであることを宣言します。

本制御命令で指定したラベルおよびシンボルで、ファイル内で定義されていないものは、外部のファイルで定義されているものとして処理します。

本制御命令で指定したラベルおよび、シンボルで、ファイル内で定義されているものは、外部から参照できるように処理します。

.GLB name1,name2,name3

.GLB name4

.SECTION P,code

MOV.L #name1,R1

 

[備考]

制御命令とオペランドの間には、必ず空白文字またはタブを記述してください。

オペランドにグローバルラベルとするラベル名を記述します。

オペランドにグローバルシンボルとするシンボル名を記述します。

オペランドに複数のシンボル名を記述する場合は、カンマ(,)で区切って記述してください。

 

.RVECTOR

本制御命令で指定したラベルおよびシンボルを、可変ベクタとして登録します。

[指定形式]

.RVECTOR△<番号>,<名前>

[詳細説明]

本制御命令で指定したラベルおよびシンボルを、可変ベクタとして登録します。

本制御命令の<番号>には、ベクタ番号として0~255の定数を記述することができます。

本制御命令の<名前>には、ファイル内で定義されたラベルまたはシンボルを指定することができます。

登録された可変ベクタは、最適化リンケージエディタにより、ひとつのC$VECTセクションにまとめられます。

【V3.00.00以降】 最適化リンケージエディタに-split_vectオプションを指定した場合は、C$VECTセクションはベクタテーブル番号ごとに分割され、個々のセクションはC$VECT<ベクタテーブル番号>という名前を持ちます。

 

.RVECTOR 50,_rvfunc

_rvfunc:

MOV.L #0,R1

RTE

 

[備考]

制御命令とオペランドの間には、必ず空白文字またはタブを記述してください。