Non-Confidential | PDF version | DUI0801J | ||

| ||||

Home > Symbols, Literals, Expressions, and Operators > Numeric expressions |

Numeric expressions consist of combinations of numeric constants, numeric variables, ordinary numeric literals, binary operators, and parentheses.

Numeric expressions can contain register-relative or program-relative expressions if the overall expression evaluates to a value that does not include a register or the PC.

Numeric expressions evaluate to 32-bit integers in A32 and T32 code. You
can interpret them as unsigned numbers in the range 0 to 2^{32}-1,
or signed numbers in the range -2^{31} to 2^{31}-1. However, armasm makes no distinction
between -`n`

and 2^{32}-`n`

. Relational operators such as >= use the unsigned
interpretation. This means that 0 > -1 is `{FALSE}`

.

In A64 code, numeric expressions evaluate to 64-bit integers. You can
interpret them as unsigned numbers in the range 0 to 2^{64}-1, or
signed numbers in the range -2^{63} to 2^{63}-1. However, armasm makes no distinction
between -`n`

and 2^{64}-`n`

.

armasm does not support 64-bit arithmetic variables. See 21.63 SETA, SETL, and SETS (Restrictions) for a workaround.

Arm recommends that you only use
armasm for legacy Arm^{®} syntax assembly code, and that you
use the `armclang`

assembler and GNU syntax for all new assembly files.

a SETA 256*256 ; 256*256 is a numeric expression MOV r1,#(a*22) ; (a*22) is a numeric expression