Everything
5.1.3 式と演算子

式とは,シンボル注1,定数(数値定数注2文字定数),前述の2つに演算子を付加したもの,または演算子で結合したものです。

注 1.

式の要素として指定可能なシンボルは,ネーム,ラベル,外部参照名のみです。ただし,SIZEOF演算子,およびSTARTOF演算子に対してはセクション名を指定可能です。

注 2.

デバイス・ファイル読み込み時には,式の中でSFR略号,および拡張SFR略号を定数と同様に扱うことができます。

 

式を構成する演算子以外の要素を項といい,記述された左側から順に第1項,第2項,…と呼びます。項のリロケーション属性により,使用可能な演算子が限られます。

 

演算子には「表 5.4 演算子の種類」に示すものがあり,演算実行上の優先順位が「表 5.5 演算子の優先順位」のように決められています。

演算の順序を変更するには,かっこ“ ( ) ”を使用します。

表 5.4

演算子の種類

 

上記の演算子は,単項演算子,特殊単項演算子,2項演算子に分けられます。

単項演算子

+符号,-符号,~,HIGH,LOW,HIGHW,LOWW,MIRHW,MIRLW,SMRLW,DATAPOS,BITPOS,STARTOF,SIZEOF

2項演算子

+,-,*,/,%,&,|,^,==,!=,>,>=,<,<=,&&,||,>>,<<

表 5.5

演算子の優先順位

優先度

優先順位

演算子

高い

 

 

 

 

 

 

 

低い

1

+符号,-符号,~,HIGH,LOW,HIGHW,LOWW,MIRHW,MIRLW,SMRLW,DATAPOS,BITPOS,STARTOF,SIZEOF

2

*,/,%,>>,<<

3

+,-

4

&,|,^

5

==,!=,>,>=,<,<=

6

&&,||

 

式の演算は,次の規則に従います。

-

演算の順序は,演算子の優先順位に従います。
同一順位の場合は,左から右に演算されます。単項演算子の場合は,右から左に演算されます。

-

かっこ“ ( ) ”の中の演算は,かっこの外の演算に先立って行われます。

-

式の演算は,32ビットで行います。
式中に記述した定数,式の評価途中,および評価結果が32ビットを越えた場合は,下位32ビットを有効とします。その場合エラーは出力されません。
ただし,.DB8疑似命令のオペランドに記述された式では,各々の項を64ビットとして扱います。

-

演算の各項は符号なし整数として扱われますが,以下の場合は符号付き整数として扱われます。

乗算,除算,剰余算,論理シフトの第2項

-

除数がゼロの場合は,エラーとなります。

-

負の値は,2の補数形式となります。

-

リロケータブル項のアセンブル時の評価値はゼロです(評価値はリンク時に決定されます)。

表 5.6

式評価の例

評価値

5 + 8 - 6 * 2 / 4

10

5 + (8 - 6) * 2 / 4

6

(5 + 8 - 6)* 2 / 4

3

2 * (0x0F - (0x0B & (0x0A | 0x0F)))

8

2 * 0x0F - 0x0B & 0x0A | 0x0F

0x0F

HIGH(-1)

0xFF

HIGH(0x0FFFF)

0xFF

2 + 4 * 5

22

(2 + 3) * 4

20

10/4

2

0 - 1

0xFFFFFFFF

-1 > 1

1(真)

EXT + 1

0

EXT:外部参照名