5.2.4 アドレス制御擬似命令

アセンブラがアドレス更新をする場合の指示を行う制御命令です。

絶対アドレス形式セクション内のアドレスを除いて、アセンブラが制御を行うアドレスはリロケータブル値となります。

 

.ORG

本制御命令を記述したセクションを絶対アドレス形式とします。

 

[指定形式]

.ORG△<数値>

[詳細説明]

本制御命令を記述したセクションを絶対アドレス形式とします。

本制御命令を記述したセクションのアドレスはアブソリュート値になります。

本制御命令を記述した直後の行から記述したニーモニックのコードが格納されるアドレスを決定します。

本制御命令の直後の行から記述した領域確保制御命令で、確保されるメモリのアドレスを決定します。

 

.SECTION D_1,ROMDATA

.ORG 0FF00H

.BYTE "abcdefghijklmnopqrstuvwxyz"

.ORG 0FF80H

.BYTE "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

.END

 

以下の場合は.SECTIONの直後に.ORGが記述されていないため、エラーとなります。

.SECTION D_1,ROMDATA

.BYTE "abcdefghijklmnopqrstuvwxyz"

.ORG 0FF80H

.BYTE "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

.END

 

[備考]

本制御命令は、必ずセクション制御命令の直後に記述してください。

".SECTION"を記述した直後の行に".ORG"の記述がない場合は、そのセクションは相対アドレス形式セクションとなります。

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

オペランドに記述できる値は、0〜0FFFFFFFFHの範囲の数値です。

オペランドには式、シンボルを記述できます。ただし、アセンブル時に確定する値でなければなりません。

本制御命令は、相対アドレス形式指定を行ったセクション内には記述できません。

絶対アドレス形式セクション内であれば複数回記述できます。ただし本制御命令記述行のアドレスよりも小さい値を指定した場合にはエラーとなります。

本制御命令は、記述した箇所に、アドレスを進めたバイト数だけ、0個以上の無効を意味するデータ(03H)を埋め込みます。

 

.OFFSET

セクション先頭からのオフセットを指定します。

 

[指定形式]

.OFFSET△<数値>

[詳細説明]

セクション先頭からのオフセットを指定します。

本制御命令を記述した直後の行から記述したニーモニックのコードが格納される、セクション先頭からのオフセットを決定します。

本制御命令の直後の行から記述した領域確保制御命令で確保されるメモリの、セクション先頭からのオフセットを決定します。

 

.SECTION D_1,ROMDATA

.BYTE "abcdefghijklmnopqrstuvwxyz"

.OFFSET 80H

.BYTE "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

.END

 

以下の場合は.OFFSET記述行のオフセットよりも小さい値が指定されているため、エラーとなります。

 

.SECTION D_1,ROMDATA

.OFFSET 80H

.BYTE "abcdefghijklmnopqrstuvwxyz"

.OFFSET 70H

.BYTE "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

.END

 

[備考]

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

オペランドに記述できる値は、0〜0FFFFFFFFHの範囲の数値です。

オペランドには式、シンボルを記述できます。ただし、アセンブル時に確定する値でなければなりません。

本制御命令は、絶対アドレス形式指定を行ったセクション内には記述できません。

相対アドレス形式セクション内であれば複数回記述できます。ただし本制御命令記述行のオフセットよりも小さい値を指定した場合にはエラーとなります。

本制御命令は、記述した箇所に、アドレスを進めたバイト数だけ、0個以上の無効を意味するデータ(03H)を埋め込みます。

 

.ENDIAN

本制御命令を記述したセクションのエンディアンを指定します。

 

[指定形式]

.ENDIAN△BIG
.ENDIAN△LITTLE

[詳細説明]

本制御命令を記述したセクションのエンディアンを指定します。

.ENDIAN BIGを記述したセクションのデータのバイト並びはBig Endianになります。

.ENDIAN LITTLEを記述したセクションのデータのバイト並びはLittle Endianになります。

本制御命令が記述されていないセクションのデータのバイト並びは、-endianオプションに依存します。

 

.SECTION DT_B,ROMDATA

.ORG 0FF00H

.ENDIAN BIG

.LWORD 012345678H

.END

 

以下の場合は.SECTIONまたは.ORGの直後に.ENDIANが記述されていないため、エラーとなります。

 

.SECTION DT_B,ROMDATA

.ORG 0FF00H

.LWORD 012345678H

.ENDIAN BIG

.LWORD 0ABCDEF90H

.END

 

[備考]

本制御命令は必ず.SECTION制御命令、またはそれに続く.ORG制御命令の直後に記述してください。

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

セクション属性がCODEのセクションに本制御命令を追加することはできません。

 

.BLKB

1バイト単位で、指定したバイト数のRAM領域を確保します。

 

[指定形式]

△.BLKB△<オペランド>
△<ラベル名:>△.BLKB△<オペランド>

[詳細説明]

1バイト単位で、指定したバイト数のRAM領域を確保します。

確保したRAMのアドレスに、ラベル名を定義することもできます。

 

symbol .EQU 1

.SECTION B_1,DATA

work1: .BLKB 1

work2: .BLKB symbol

.BLKB symbol+1

.END

 

[備考]

本制御命令は必ず、DATA属性のセクション内に記述してください。セクション定義の際に、セクション名に続けて”,DATA”を記述することでセクション属性がDATAとなります。

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

オペランドには数値、シンボル、式を記述できます。

オペランドの値は、アセンブル時に確定しなければなりません。

領域にラベル名を定義する場合は、制御命令の前にラベルを記述してください。

ラベル名には、必ずコロン(:)を記述してください。

オペランドに指定できる値の最大値は7FFFFFFFHです。

 

.BLKW

2バイト単位で、指定した個数のRAM領域を確保します。

 

[指定形式]

△.BLKW△<オペランド>
△<ラベル名:>△.BLKW△<オペランド>

[詳細機能]

2バイト単位で、指定した個数のRAM領域を確保します。

確保したRAMのアドレスに、ラベル名を定義することもできます。

 

symbol .EQU 1

.SECTION B_2,DATA,ALIGN=2

work1: .BLKW 1

work2: .BLKW symbol

.BLKW symbol+1

.END

 

[備考]

本制御命令は必ず、DATA属性のセクション内に記述してください。セクション定義の 際に、セクション名に続けて”,DATA”を記述することでセクション属性がDATAと なります。

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

オペランドには数値、シンボル、式を記述できます。

オペランドの値は、アセンブル時に確定しなければなりません。

領域にラベル名を定義する場合は、制御命令の前にラベルを記述してください。

ラベル名には、必ずコロン(:)を記述してください。

オペランドに指定できる値の最大値は3FFFFFFFHです。

 

.BLKL

4バイト単位で、指定した個数のRAM領域を確保します。

 

[指定形式]

△.BLKL△<オペランド>
△<ラベル名:>△.BLKL△<オペランド>

[詳細説明]

4バイト単位で、指定した個数のRAM領域を確保します。

確保したRAMのアドレスに、ラベル名を定義することもできます。

 

symbol .EQU 1

.SECTION B,DATA,ALIGN=4

work1: .BLKL 1

work2: .BLKL symbol

.BLKL symbol+1

.END

 

[備考]

本制御命令は必ず、DATA属性のセクション内に記述してください。セクション定義の際に、セクション名に続けて”,DATA”を記述することでセクション属性がDATAとなります。

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

オペランドには数値、シンボル、式を記述できます。

オペランドの値は、アセンブル時に確定しなければなりません。

領域にラベル名を定義する場合は、制御命令の前にラベルを記述してください。

ラベル名には、必ずコロン(:)を記述してください。

オペランドに指定できる値の最大値は1FFFFFFFHです。

 

.BLKD

8バイト単位で、指定した個数のRAM領域を確保します。

 

[指定形式]

△.BLKD△<オペランド>
△<ラベル名:>△.BLKD△<オペランド>

[詳細説明]

8バイト単位で、指定した個数のRAM領域を確保します。

確保したRAMのアドレスに、ラベル名を定義することもできます。

 

symbol .EQU 1

.SECTION B,DATA,ALIGN=4

work1: .BLKD 1

work2: .BLKD symbol

.BLKD symbol+1

.END

 

[備考]

本制御命令は必ず、DATA属性のセクション内に記述してください。セクション定義の際に、セクション名に続けて”,DATA”を記述することでセクション属性がDATAとなります。

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

オペランドには数値、シンボル、式を記述できます。

オペランドの値は、アセンブル時に確定しなければなりません。

領域にラベル名を定義する場合は、制御命令の前にラベルを記述してください。

ラベル名には、必ずコロン(:)を記述してください。

オペランドに指定できる値の最大値は0FFFFFFFHです。

.BYTE

1バイト長の固定データをROMに格納します。

 

[指定形式]

△.BYTE△<オペランド>
△<ラベル名:>△.BYTE△<オペランド>

[詳細説明]

1バイト長の固定データをROMに格納します。

データを格納したアドレスに、ラベル名を定義することもできます。

 

<endian=littleオプション指定時>

.SECTION D_1,ROMDATA

symbol:

.BYTE 1

.BYTE "data"

.BYTE symbol

.BYTE symbol+1

.BYTE 1,2,3,4,5

.END

<endian=bigオプション指定時>

.SECTION PB,CODE,ALIGN=4

MOV.L R1,R2

.ALIGN 4

.BYTE 080H,00H,00H,00H

.END

 

[備考]

本制御命令は必ず、ROMDATA属性のセクション内に記述してください。セクション定義の際に、セクション名に続けて",ROMDATA"を記述することでセクション属性がROMDATAとなります。

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

オペランドには数値、シンボル、式を記述できます。

オペランドに文字・文字列を記述するときは、クォーテーション(‘)またはダブルクォーテーション(“)で囲ってください。このとき格納されるデータは、文字のASCIIコードになります。

ラベルを定義する場合には、制御命令の前にラベル名を記述してください。

ラベル名には、必ずコロン(:)を記述してください。

endian=bigオプション指定時、本制御命令は次の条件に当てはまるセクション内にのみ記述できます。条件に当てはまらないセクション内に記述した場合はエラーとなります。

(1) ROMDATAセクション

.SECTION data,ROMDATA

(2) セクション定義の際のアドレス補正に4、もしくは8を指示している相対アドレス形式のCODEセクション

.SECTION program,CODE,ALIGN=4

(3) 絶対アドレス形式のCODEセクション

.SECTION program,CODE

.ORG 0fff00000H

endian=bigオプション指定時、本制御命令をセクション属性がCODEのセクションに記述する場合、直前の行にアドレス補正制御命令(.ALIGN 4)を記述し、4バイト境界に配置されるようにしてください。記述されていない場合、アセンブラはウォーニングを出力し、自動的に4バイト境界に配置します。

 

.WORD

2バイト長の固定データをROMに格納します。

 

[指定形式]

△.WORD△<オペランド>
△<ラベル名:>△.WORD△<オペランド>

[詳細説明]

2バイト長の固定データをROMに格納します。

データを格納したアドレスに、ラベル名を定義することもできます。

 

.SECTION D_2,ROMDATA,ALIGN=2

symbol:

.WORD 1

.WORD symbol

.WORD symbol+1

.WORD 1,2,3,4,5

.END

 

[備考]

本制御命令は必ず、ROMDATA属性のセクション内に記述してください。セクション定義の際に、セクション名に続けて",ROMDATA"を記述することでセクション属性がROMDATAとなります。

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

オペランドには数値、シンボル、式を記述できます。

オペランドに文字・文字列を記述することはできません。

ラベルを定義する場合には、制御命令の前にラベル名を記述してください。

ラベル名には、必ずコロン(:)を記述してください。

 

.LWORD

4バイト長の固定データをROMに格納します。

 

[指定形式]

△.LWORD△<オペランド>
△<ラベル名:>△.LWORD△<オペランド>

[詳細説明]

4バイト長の固定データをROMに格納します。

データを格納したアドレスに、ラベル名を定義することもできます。

 

.SECTION D,ROMDATA,ALIGN=4

symbol:

.LWORD 1

.LWORD symbol

.LWORD symbol+1

.LWORD 1,2,3,4,5

.END

 

[備考]

本制御命令は必ず、ROMDATA属性のセクション内に記述してください。セクション定義の際に、セクション名に続けて",ROMDATA"を記述することでセクション属性がROMDATAとなります。

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

オペランドには数値、シンボル、式を記述できます。

オペランドに文字・文字列を記述することはできません。

ラベルを定義する場合には、制御命令の前にラベル名を記述してください。

ラベル名には、必ずコロン(:)を記述してください。

 

.FLOAT

4バイト長の固定データをROMに格納します。

 

[指定形式]

△.FLOAT△<数値>
△<ラベル名:>△.FLOAT△<数値>

[詳細説明]

4バイト長の固定データをROMに格納します。

データを格納したアドレスに、ラベル名を定義することもできます。

 

.SECTION D,ROMDATA,ALIGN=4

.FLOAT 5E2

fcnst: .FLOAT 5e2

.END

 

[備考]

本制御命令は必ず、ROMDATA属性のセクション内に記述してください。セクション定義の際に、セクション名に続けて",ROMDATA"を記述することでセクション属性がROMDATAとなり ます。

オペランドに浮動小数点数を記述してください。

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

ラベルを定義する場合には、制御命令の前にラベル名を記述してください。

ラベル名には、必ずコロン(:)を記述してください。

 

.DOUBLE

8バイト長の固定データをROMに格納します。

 

[指定形式]

△.DOUBLE△<数値>
△<ラベル名:>△.DOUBLE△<数値>

[詳細説明]

8バイト長の固定データをROMに格納します。

データを格納したアドレスに、ラベル名を定義することもできます。

 

.SECTION D,ROMDATA,ALIGN=4

.DOUBLE 5E2

fdble: .DOUBLE 5e2

.END

 

[備考]

本制御命令は必ず、ROMDATA属性のセクション内に記述してください。セクション定義の際に、セクション名に続けて",ROMDATA"を記述することでセクション属性がROMDATAとなり ます。

オペランドに浮動小数点数を記述してください。

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

ラベルを定義する場合には、制御命令の前にラベル名を記述してください。

ラベル名には、必ずコロン(:)を記述してください。

 

.ALIGN

本制御命令を記述した直後の行のコードを格納するアドレスを2、4または8バイト

アライメントに補正します。

 

[指定形式]

△.ALIGN△<アライメント補正値>
<アライメント補正値>:[2|4|8]

 

[詳細説明]

本制御命令を記述した直後の行のコードを格納するアドレスを2、4または8バイトアライメントに補正します。

セクション属性がCODEまたは、ROMDATAの場合は、アドレスを補正した結果、空になったところにNOPのコード(03H)を書き込みます。

セクション属性がDATAの場合は、アドレス補正のみ行います。

 

.SECTION PB,CODE,ALIGN=4

MOV.L R1,R2

.ALIGN 4 ; アドレスを4の倍数に補正

RTS

.END

 

[備考]

本制御命令は、次の条件に当てはまるセクション内に記述できます。

(1) セクション定義の際にアドレス補正を指示している相対アドレス形式セクション

.SECTION program,CODE,ALIGN=4

(2) 絶対アドレス形式セクション

.SECTION program,CODE

.ORG 0fff00000H

相対アドレス形式のセクションで.SECTION制御命令行でALIGN指定のされていないセクションに本制御命令を記述した場合は、ウォーニングが出力されます。

指定した値がセクションの境界調整数よりも大きい場合は、ウォーニングが出力されます。