The assembler includes an extensive set of operators for use in expressions, many of which resemble their counterparts in high-level languages.
Unary operators
Unary operators have the highest precedence (bind most tightly) so are evaluated first. A unary operator precedes its operand, and adjacent operators are evaluated from right to left.
--------------------------------------------------------- Operator |Usage |Explanation --------------------------------------------------------- ? |?A |Number of bytes generated by line | |definie label A. --------------------------------------------------------- BASE |:BASE:A |If A is a PC-relative or | |register-relative expression then | |BASE returns the number of its | |register component and INDEX the | |offset from that base register. --------------------------------------------------------- INDEX |:INDEX:A |BASE and INDEX are most likely to be | |of use within macros. --------------------------------------------------------- LEN |:LEN:A |Length of string A --------------------------------------------------------- CHR |:CHR:A |ASCII string of A --------------------------------------------------------- STR |:STR:A |Hexadecimal string of ASTR returns | |an eight-digit hexadecimal string | |corresponding to a numeric | |expression, or the string T or F if | |used on a logical expression. --------------------------------------------------------- + |+A |Unary plus --------------------------------------------------------- |A |Unary negate + and can act on | |numeric, program-relative and string | |expressions. --------------------------------------------------------- NOT |:NOT:A |Bitwise complement of A --------------------------------------------------------- LNOT |:LNOT:A |Logical complement of A --------------------------------------------------------- DEF |:DEF:A |{TRUE} if A is defined, otherwise | |{FALSE} ---------------------------------------------------------
--------------------------------------------------------- * |A*B |Multiply --------------------------------------------------------- / |A/B |Divide --------------------------------------------------------- MOD |A:MOD:B |A modulo B ---------------------------------------------------------
These operators act only on numeric expressions.
--------------------------------------------------------- LEFT |A:LEFT:B |The left-most B characters of A --------------------------------------------------------- RIGHT |A:RIGHT:B |The right-most B characters of A --------------------------------------------------------- CC |A:CC:B |B concatenated on to the end of A ---------------------------------------------------------In the two slicing operators LEFT and RIGHT, A must be a string and B must be a numeric expression.
--------------------------------------------------------- ROL |A:ROL:B |Rotate A left B bits --------------------------------------------------------- ROR |A:ROR:B |Rotate A right B bits --------------------------------------------------------- SHL |A:SHL:B |Shift A left B bits --------------------------------------------------------- SHR |A:SHR:B |Shift A right B bits ---------------------------------------------------------The shift operators act on numeric expressions, shifting or rotating the first operand by the amount specified by the second. Note that SHR is a logical shift and does not propagate the sign bit.
--------------------------------------------------------- AND |A:AND:B |Bitwise AND of A and B --------------------------------------------------------- OR |A:OR:B |Bitwise OR of A and B --------------------------------------------------------- EOR |A:EOR:B |Bitwise Exclusive OR of A and B --------------------------------------------------------- + |A+B |Add A to B --------------------------------------------------------- |AB |Subtract B from A ---------------------------------------------------------The bitwise operators act on numeric expressions. The operation is performed independently on each bit of the operands to produce the result.
--------------------------------------------------------- = |A=B |A equal to B --------------------------------------------------------- > |A>B |A greater than B --------------------------------------------------------- >= |A>=B |A greater than or equal to B --------------------------------------------------------- < |A<B |A less than B --------------------------------------------------------- <= |A<=B |A less than or equal to B --------------------------------------------------------- /= |A/=B |A not equal to B --------------------------------------------------------- <> |A<>B |A not equal to B ---------------------------------------------------------The relational operators act upon two operands of the same type to produce a logical value. Allowable types of operand are numeric, program-relative, register-relative, and strings. Strings are sorted using ASCII ordering. String A will be less than string B if it is either a leading substring of string B, or if the left-most character of A in which the two strings differ is less than the corresponding character in string B. Note that arithmetic values are unsigned, so the value of 0>-1 is {FALSE}.
--------------------------------------------------------- LAND |A:LAND:B |Logical AND of A and B --------------------------------------------------------- LOR |A:LOR:B |Logical OR of A and B --------------------------------------------------------- LEOR |A:LEOR:B |Logical Exclusive OR of A and B ---------------------------------------------------------
The Boolean operators perform the standard logical operations on their operands, which should evaluate to {TRUE} or {FALSE}.