3.6.9. Operator precedence

The assembler includes an extensive set of operators for use in expressions. Many of the operators resemble their counterparts in high-level languages such as C (see Unary operators and Binary operators).

There is a strict order of precedence in their evaluation:

  1. Expressions in parentheses are evaluated first.

  2. Operators are applied in precedence order.

  3. Adjacent unary operators are evaluated from right to left.

  4. Binary operators of equal precedence are evaluated from left to right.

Operator precedence in armasm and C

The assembler order of precedence is not exactly the same as in C.

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

You are recommended to 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 normally gives a warning:

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

Table 3.6 shows the order of precedence of operators in armasm, and a comparison with the order in C (see Table 3.7).

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 3.6. 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 3.7. Operator precedence in C

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

Copyright © 2002-2010 ARM. All rights reserved.ARM DUI 0204J
Non-ConfidentialID101213