This appendix lists most of the common error messages that you may get when using the assembler, and gives an explanation for each one of the circumstances that may provoke the error.
ADRL can't be used with PC
The destination register of an ADRL opcode cannot be PC.
Area directive missing
An attempt has been made to generate code or data before the first AREA directive.
Area name missing
The name for the area has been omitted from an AREA directive.
Bad alignment boundary
An alignment has been given which is not a power of two.
Bad area attribute or alignment
Unknown attribute or alignment not in the range 2-12.
Bad based number
A digit has been given in a based number which is not less than the base, for example: 7_8.
Bad exported name
The wording following the EXPORT directive is syntactically not a name.
Bad exported symbol type
The exported symbol is not a program-relative symbol.
Bad expression type
For example, a number was expected but a string was encountered.
Bad floating point constant
The only allowed floating point constants are 0, 1, 2, 3, 5, 10 and 0.5. They must be written in exactly these forms.
Bad global name
An incorrect character appears in the global name.
Bad hexadecimal number
The & introducing a hexadecimal number is not followed by a valid hexadecimal digit.
Bad imported name
The wording following the IMPORT directive is syntactically not a name.
Bad local label number
A local label number must be in the range 0-99.
Bad local name
An incorrect character appears in the local name.
Bad macro parameter default value
Bad opcode symbol
A symbol has been encountered in the opcode field which is not a directive and is syntactically not a label.
Bad operand type
For example, a logical value was supplied where a string was required.
Bad operator
The name between colons is not an operator name.
Bad or unknown attribute
Faulty attribute on an IMPORT directive.
Bad register list symbol
An expression used as a register set definition (eg in LDM or STM) was not understood or of the wrong type.
Bad register name symbol
A register name is wrong. Note that all register names must be defined using the RN directive.
Bad register range
A register range from a higher to a lower register has been given; for example, R4-R2 has been typed.
Bad rotator
The rotator value supplied must be even and in the range 0-30.
Bad shift name
Syntax error in shift name.
Bad string escape sequence
A C style escape character sequence (beginning with '\') within a string was incorrect.
Bad symbol
Syntax error in a symbol name.
Bad symbol type
This will occur after a # or * directive and means that the symbol being defined has already been assumed to be of a type which cannot be defined in this way.
Branch offset out of range
The destination of a branch is not within the ARM address space.
Code generated in data area
An opcode has been found in an area which is not a code area.
Coprocessor number out of range
Coprocessor operation out of range
Coprocessor register number out of range
Data transfer offset out of range
The immediate value in a data transfer opcode must be in the range:
-4095 E +4095
Decimal overflow
The number exceeds 32 bits.
Division by zero
Entry address already set
This is the second or subsequent ENTRY directive.
Error in macro parameters
The macro parameters do not match the prototype statement in some way.
Error on code file
An error occurred while writing the output file.
External area relocatable symbol used
A symbol which is an address in another area has been used in a non-trivial expression.
Externals not valid in expressions
An imported symbol has been used in a non-trivial expression.
Floating point register number out of range
Floating point overflow
Floating point number not found
Global name already exists
This name has already been used in some other context.
Hexadecimal overflow
The number exceeds 32 bits.
Illegal combination of code and zero initialised
An object file area cannot be declared both to be code and zero initialised data.
Illegal label parameter start in macro prototype
Illegal line start should be blank
A label has been found at the start of a line with a directive which cannot be labelled.
Immediate value out of range
An immediate value in a data processing instruction cannot be obtained by rotating an 8-bit value by an even amount.
Imported name already exists
The name has already been defined or used for something else.
Incorrect routine name
The optional name following a branch to a local label or on a local label definition does not match the routine's name.
Invalid line start
A line may only start with a letter character (the first letter of a label), a digit (the first character of a local label), a semi-colon or a space.
Invalid operand to branch instruction
Label missing from line start
The absence of a label where one is required; for example, in the * directive.
Local name already exists
A local name has been defined more than once.
Locals not allowed outside macros
A local variable has been defined in the main body of the source file.
MEND not allowed within conditionals
A MEND has been found amongst [ | ] or WHILE/WEND directives.
Missing close bracket
A missing close bracket or too many opening brackets.
Missing close quote
No closing quote at the end of a string constant.
Missing close square bracket
A ] is absent.
Missing comma
Syntax error due to missing comma.
Missing hash
The hash (#) preceding an immediate value has been forgotten.
Missing open bracket
A missing open bracket or too many closing brackets.
Missing open square bracket
Multiply or incompatibly defined symbol
A symbol has been defined more than once.
Multiply destination equals first source
No current macro expansion
A MEND, MEXIT or local variable has been encountered but there is no corresponding MACRO.
Non-zero data within uninitialised area
Numeric overflow
The number exceeds 32 bits.
Register occurs multiply in LDM/STM list
Register symbol already defined
A register symbol has been defined more than once.
Register value out of range
Register values must be in the range 0-15.
Shift option out of range
The range permitted is 0-31, 1-32 or 1-31 depending on the shift type.
String overflow
Concatenation has produced a string of more than 256 characters.
String too short for operation
An attempt has been made to manipulate a string using :LEFT: or :RIGHT: which has insufficient characters in it.
Structure mismatch
Mismatch of ] with [ or |, or WEND and WHILE.
Substituted line too long
During variable and macro parameter substitution the line length has exceeded 256 characters.
Symbol missing
An attempt has been made to reference the length attribute of a symbol but the symbol was omitted or the name found was not recognised as a symbol.
Syntax error following directive
An operand has been provided to a directive which cannot take one, for example: the '|' directive.
Syntax error following label
A label can only be followed by spaces, a semi-colon or the end-of-line symbol.
Syntax error following local label definition
A space, comment, or end-of-line did not immediately follow the local label.
Too late to define symbol as register list
A register list was defined for a symbol already used for another purpose.
Too late to ban floating point
Too late to set origin now
The ORG must be set before the Assembler generates code.
Too many actual parameters
A macro call is trying to pass too many parameters.
Translate not allowed in pre-indexed form
The translate option may not be specified in pre-indexed forms of LDR and STR.
Unable to close code file
Unable to open code file
Undefined exported symbol
The symbol exported is undefined.
Undefined symbol
A symbol has not been given a value.
Unexpected characters at end of line
The line is syntactically complete, but more information is present. The semi-colon prefixing comments may have been omitted.
Unexpected operand
An operand has been found where a binary operator was expected.
Unexpected operator
A non-unary operator has been found where an operand was expected.
Unexpected unary operator
A unary operator has been found where a binary operator was expected.
Unknown opcode
A name in the opcode field has been found which is not an opcode, a directive, nor a macro.
Unknown operand
An operand in the bracketed format {PC} {VAR} {OPT} {TRUE} {FALSE} is not of the correct form.
Unknown or wrong type of global/local symbol
Type mismatch, for example, attempting to set or reset the value of a local or global symbol as logical, where it is a string variable.
Unknown shift name
Not one of the six legal shift mnemonics.