armasm と C 言語における演算子の優先順位の違い

ARM アセンブラにおける優先順位は、C 言語とは異なります。

例えば、(1 + 2 :SHR:3)armasm では (1 + (2 :SHR:3)) = 1 と評価されます。等価の式が C では ((1 + 2) >> 3) = 0 と評価されます。

括弧を使って優先順位を明示的に示すことを推奨します。

C 言語でアセンブラと違った解析をされる式がコードに含まれており、--unsafe オプションを使用していない場合は通常、armasm によって次の警告が表示されます。

A1466W:演算子の優先順位とは、C では式が異なる方法で評価されることを意味します

Table 35 に、armasm での演算子の優先順位と、C における優先順位との比較を記載します(Table 36 を参照)。

次の表から以下の点を確認できます。

Table 35. armasm における演算子の優先順位

armasm の優先順位C における同等の演算子
単項演算子単項演算子
* / :MOD:* / %
文字列操作n/a
:SHL: :SHR: :ROR: :ROL:<< >>
+ - :AND::OR: :EOR:+ - & | ^
= > >= < <= /= <>== > >= < <= !=
:LAND: :LOR::LEOR:&& ||

Table 36. C における演算子の優先順位

C での優先順位
単項演算子
* / %
+ -(バイナリ演算子として)
<< >>
< <= > >=
== !=
&
^
|
&&
||

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0473FJ
Non-ConfidentialID111311