You copied the Doc URL to your clipboard.

Difference between operator precedence in assembly language and C

armasm does not follow exactly the same order of precedence when evaluating operators as a C compiler.

For example, (1 + 2 :SHR: 3) evaluates as (1 + (2 :SHR: 3)) = 1 in assembly language. The equivalent expression in C evaluates as ((1 + 2) >> 3) = 0.

ARM recommends you use brackets to make the precedence explicit.

If your code contains an expression that would parse differently in C, and you are not using the --unsafe option, armasm gives a warning:

A1466W: Operator precedence means that expression would evaluate differently in C

Table 30 shows the order of precedence of operators in assembly language, and a comparison with the order in C (see Table 31).

From these tables:

  • The highest precedence operators are at the top of the list.

  • The highest precedence operators are evaluated first.

  • Operators of equal precedence are evaluated from left to right.

Table 30. Operator precedence in armasm
armasm precedenceequivalent C operators
unary operatorsunary operators
* / :MOD:* / %
string manipulationn/a
:SHL: :SHR: :ROR: :ROL:<< >>
+ - :AND: :OR: :EOR:+ - & | ^
= > >= < <= /= <>== > >= < <= !=
:LAND: :LOR: :LEOR:&& ||

Table 31. Operator precedence in C
C precedence
unary operators
* / %
+ - (as binary operators)
<< >>
< <= > >=
== !=
&
^
|
&&
||

See also

Was this page helpful? Yes No