Crossware

Table of Contents        Previous topic       Next topic       

CROSS ASSEMBLER->Assembler Expressions->Assembler Expressions

Expressions are placed in the operand field and are evaluated by the cross-assembler to give a numerical integer value.  An expression may be used anywhere within the operand field where a numerical value is expected. The expression evaluator within the cross-assembler will use 32 bit integer arithmetic to calculate the value of the expression.

The expression may consist of symbols, numbers, literals and operators. Parentheses may be used to define a particular order of precedence. Parentheses can be nested.

The following operators are allowed:
    
Addition+
Subtraction-
Multiplication*
Division /
Shift right>>
Shift left <<
Logical AND&
Logical OR!
Logical exclusive OR~

These operators take the following precedence:

()    Expressions within parentheses are evaluated first.
<< >>    Shift operations are performed next.
& ! ~    Logical AND, OR and exclusive OR have the next priority.
* /    Multiplication and division are evaluated next.
+ -    Addition and subtraction are evaluated last.
    Operators with the same precedence are evaluated from left to right.

Two further operators, which can only be used with section names, are `size and `base.  `size(<section-name>) evaluates to the size of a section. `base(<section-name>) evaluates to the base address of a section.

It is not essential to use the `base operator since <section-name> on its own also evaluates to the base address of the section.  However, since the `size and `base operators are supported by some other assemblers it is supported for compatibility reasons.