
III.4 Expressions
Arithmetic expressions are composed of operands, operators and parentheses.
Operands may be userdefined symbols, constants or special assembler symbols.
All operands are treated as unsigned 16bit numbers.
Special assembler symbols, that can be used as operands are:
AR0, ... , AR7  direct addresses of registers R0 thru R7 
$  the location counter of the currently active segment
(start address of the current assembler statement) 
The following operators are implemented:
Unary Operators
Operator  Operation  Definition 
+  identity  +x = x 
  two's complement  x = 0x 
NOT  one's complement  NOT x = FFFFHx 
HIGH  high order byte  
LOW  low order byte  
Binary Operators
Operator  Operation  Result 
+  unsigned addition  
  unsigned subtraction 
*  unsigned multiplication 
/  unsigned division 
MOD  unsigned remainder 
SHL  logical shift left 
SHR  logical shift right 
AND  logical and 
OR  logical or 
XOR  exclusive or 
.  bit operator used for bitadressable locations 
EQ or =  equal to  0 if FALSE, FFFFH if TRUE 
NE or <>  not equal to 
LT or <  less than 
LE or <=  less or equal than 
GT or >  greater than 
GE or >=  greater or equal than 
Operators that are no special characters but keywords as SHR or AND must
be separated from their operands by at least one blank or tab.
In general expressions are evaluated from left to right according to
operator precedence, which may be overridden by parentheses.
Parentheses may be nested to any level.
Expressions always evaluate to unsigned 16bit numbers, while overflows
are ignored. When an expression result is to be assigned to an 8bit
quantity, the high byte must be either 00 or FF.
Operator Precedence
Operator(s)  Type  Precedence 
( )   highest 
+  NOT HIGH LOW  unary  
.  
* / MOD 
SHL SHR 
+   binary 
EQ = NE <> LT < LE <= GT > GE >=  
AND 
OR XOR  lowest 
Example:
The expression
P1.((87+3)/10 AND 1 SHR 0DH)
will evaluate to 91H.
