6.1.7 Expressions and Operators
Expressions can consist of unary operators (one operand, e.g.,
not
) or binary operators (two operands, e.g., +
). The
operators allowable in expressions are listed in the table below.
Operators within expressions are evaluated left to right, thus the expression 5 + 1
* 2
will yield the value 12. Use parenthesis to change the order of operator
execution, for example 5 + (1 * 2)
will yield the value 7.
With the exception of the equality (e.g. =
) and
relational operators (e.g. >=
), all the operators listed can be freely
combined in both constant and relocatable expressions. Relocatable expressions will be
evaluated by the linker at link time, after psects have been positioned and symbol values
have been determined.
Operator | Purpose | Example |
---|---|---|
* |
multiplication | movlw 4*33,w |
+ |
addition | bra $+1 |
- |
subtraction | DB 5-2 |
/ |
division | movlw 100/4 |
= or
eq |
equality | IF inp eq 66 |
> or
|
signed greater than | IF inp > 40 |
>= or
ge |
signed greater than or equal to | IF inp ge 66 |
< or
lt |
signed less than | IF inp < 40 |
<= or
le |
signed less than or equal to | IF inp le 66 |
<> or
ne |
signed not equal to | IF inp <> 40 |
low |
low byte of operand | movlw low(inp) |
high |
high byte of operand | movlw high(1008h) |
highword |
high 16 bits of operand | DW highword(inp) |
mod |
modulus | movlw 77mod4 |
& or
and |
bitwise AND | clrf inp&0ffh |
^ |
bitwise XOR (exclusive or) | movf inp^80,w |
| |
bitwise OR | movf inp|1,w |
not |
bitwise complement | movlw not 055h,w |
<< or
shl |
shift left | DB inp>>8 |
>> or
shr |
shift right | movlw inp shr 2,w |
rol |
rotate left | DB inp rol 1 |
ror |
rotate right | DB inp ror 1 |
float24 |
24-bit version of real operand | DW float24(3.3) |
nul |
tests if macro argument is null |