Appendix C. Errors and Warnings
The warning and error numbers emitted by JWasm differ from Masm's. However, the texts of the messages are pretty much identical.As in Masm, the first digit shows the severity of the issue: range 1xxx reports a fatal error ( assembly process is stopped ), range 2xxx indicates an error ( assembly process continues, but no object module will be created ) and 4xxx are warnings.
x029 | Multiple base registers not allowed | In 16-bit code, one cannot use both BX and BP in indirect addressing; in 32/64-bit code, ESP/RSP can only appear once in indirect addressing. | |
x030 | Instruction or register not accepted in current CPU mode | ||
x031 | Invalid addressing mode with current CPU setting | ||
x032 | Cannot use TRn-TRn with current CPU setting | The TRx special registers were restricted to 80386 and 80486 cpus. | |
x033 | Must be index or base register | ||
x034 | Multiple index registers not allowed | ||
x035 | |||
x036 | Scale factor must be 1, 2, 4 or 8 | ||
x037 | Cannot be used as index register: <register> | Index registers are restricted. In 16-bit mode, only SI and DI can be index registers. In 32-bit mode, all general-purpose registers except ESP can be index registers. | |
x038 | Base and index register differ in size | ||
x039 | Expecting comma | ||
x040 | ORG needs a constant or local offset | ||
x041 | POP CS is not allowed | ||
x042 | Only MOV can use special register | The special registers CRx, DRx and TRx can only be moved to/from general purpose registers. | |
x043 | Cannot use SHORT with CALL | Distance of CALL operands must be NEAR or FAR. | |
x044 | Only SHORT jump distance is allowed | Some jump instructions accept short distances only (JCXZ, JECXZ, LOOPx). | |
x045 | Syntax error | ||
x046 | Prefix must be followed by an instruction | ||
x047 | Syntax error: Unexpected colon | ||
x048 | Operands must be the same size: <size op1> - <size op2> | ||
x049 | Invalid instruction operands | ||
x050 | Jump distance not possible in current CPU mode | Jcc instructions won't accept type coercions that increase the jump distance (i.e. "jz NEAR PTR label") if current cpu is < 80386. | |
x051 | Immediate data out of range | ||
x052 | Can not use short or near modifiers with this instruction | ||
x053 | Jump out of range by <num> byte(s) | A short distance must be in the range -128 to +127. | |
x054 | Displacement out of range: <displacement> | ||
x055 | Initializer value too large | ||
x056 | Symbol already defined: <symbol> | ||
x057 | Offset magnitude too large for specified size | ||
x058 | Magnitude of offset exceeds 16 bit | ||
x059 | Operand 2 too big | ||
x060 | Operand 1 too small | ||
x061 | Line too long | Size of a line ( after concatenation) is restricted to 600. | |
x062 | Too many tokens in a line | The number of tokens in a line is restricted to 150. | |
x063 | |||
x064 | Operand is expected | ||
x065 | Constant expected | A constant (numeric) value is expected in the current context. Note that a label - more exactly: the offset part of a label's address - is not a constant value, since the final value is calculated by the linker ( or the OS loader ) only. | |
x066 | Constant operand is expected | The expression evaluator accepts a constant only in the current context. | |
x067 | .ELSE clause already occured in this .IF block | An .IF block may contain 0 or 1 .ELSE clauses and it must be the last clause before .ENDIF. | |
x068 | Multiple overrides | ||
x069 | Segment, group or segment register expected | The operand before the colon operator (:) must be a segment, group or segment register. | |
x070 | Identifier too long | Identifer names are restricted to 247. This is a hard limit for OMF output format. For other formats, the limit may be extended by adjusting and recompiling the source code. | |
x071 | Invalid operand size for instruction | ||
x072 | Not supported: <directive> | Message is displayed if one of the follwing options is specified: OPTION READONLY, OPTION EXPR16, OPTION OLDMACROS. Those are currently not supported. | |
x073 | Size not specified, assuming: <type> | this is a warning. <type> may be BYTE, WORD or DWORD. The message may occur if an
immediate value is written to an untyped memory reference:
mov [ebx], 1
JWasm makes a guess and displays the warning, while Masm will display an error in such cases. |
|
x074 | Floating-point initializer ignored | ||
x075 | Only SHORT and NEAR jump distance is allowed | Conditional jump (Jcc) instruction destination cannot be far. | |
x076 | Initializer magnitude too large for specified size | ||
x077 | Segment attribute is defined already: <attribute> | ||
x078 | Segment definition changed: %s, %s | ||
x079 | Class name too long | Segment class names are restricted to 255 in size. | |
x080 | Block nesting error: %s | ||
x081 | Segment attribute is unknown: %s | ||
x082 | Must be in segment block | Instructions and directives that generate code or data must be inside a segment block. | |
x083 | Segment not defined: <segment> | ||
x084 | Colon is expected | ||
x085 | Invalid qualified type: %s | ||
x086 | Qualified type is expected | ||
x087 | |||
x088 | Library name is missing | ||
x089 | Cannot access label through segment registers: <label> | ||
x090 | Line too long after expansion: <line> | ||
x091 | Language type must be specified | ||
x092 | PROC, MACRO or macro loop directive must precede LOCAL | ||
x093 | Cannot nest procedures | ||
x094 | VARARG requires C calling convention | ||
x095 | Multiple .MODEL directives, .MODEL ignored | ||
x096 | Model is not declared | Without a model, simplified segment directives ( .CODE, .DATA, .CONST, .DATA?, .STACK, .FARDATA and .FARDATA? ) and directives .STARTUP, .EXIT cannot be used. | |
x097 | Backquote missing: `<identifier> | ||
x098 | COMMENT delimiter expected | ||
x099 | END directive required at end of file | ||
x100 | Nesting level too deep | ||
x101 | Macro nesting level too deep | ||
x102 | Symbol not defined : <symbol> | ||
x103 | |||
x104 | No filename specified. | ||
x105 | Out of Memory | This is a fatal error. With the 8086-version of jwasm, JWASMR, you'll see this error if you try to assemble something that contains a few thousand symbols. The 32- or 64-bit versions of jwasm should always have enough memory on modern machines. | |
x106 | Cannot open file: "<file>" [<error code>] | Error code ENOENT means "file not found". Other error codes are displayed as numbers | |
x107 | Cannot close file: <file> [<error code>] | ||
x108 | File write error: <file> [<error code>] | Usually happens if output media is read-only or full. | |
x109 | Invalid command-line option: <option> | ||
x110 | Internal error in <source file>(<line>) | This error shouldn't be seen in the release version. It's displayed if the internal assert() function is called, which usually is done when a "virtually impossible" error condition has occurred. | |
x111 | Expecting closing square bracket | ||
x112 | Expecting file name | ||
x113 | Too many errors | Use commandline option -e to set the max. number of errors that are displayed | |
x114 | forced error <message> | Generic "forced error" message | |
x115 | forced error: Value not equal to 0: <value> <text> | Error emitted by the .ERRNZ directive. | |
x116 | forced error: Value equal to 0: <value> <text> | Error emitted by the .ERRE directive. | |
x117 | forced error: symbol defined: <symbol> | Error emitted by the .ERRDEF directive. | |
x118 | forced error: symbol not defined: <symbol> | Error emitted by the .ERRNDEF directive. | |
x119 | forced error: string blank : <string> | Error emitted by the .ERRB directive. | |
x120 | forced error: string not blank : <string> | Error emitted by the .ERRNB directive. | |
x121 | forced error: strings not equal : <string> : <string> | Error emitted by the .ERRDIF and .ERRDIFI directives. | |
x122 | forced error: strings equal : <string> : <string> | Error emitted by the .ERRIDN and .ERRIDNI directives. | |
x123 | <file>(<line>): Included by | Additional error information if error occured in an include file. | |
x124 | <file>(<line>)[<macro>]: Macro called from | Additional error information if error occured inside a macro. | |
x125 | <file>(<line>): iteration <iteration>: Macro called from | Additional error information if error occured inside a loop macro (FOR, FORC, REPEAT, ...). | |
x126 | <file>(<line>): Main line code | Additional error information if error occured inside an include file or a macro. | |
x127 | Extending jump | ||
x128 | Directive ignored: %s | ||
x129 | number must be a power of 2 | ||
x130 | Incompatible with segment alignment: %s | ||
x131 | Segment expected: %s | ||
x132 | Incompatible CPU mode for 32-bit segment | ||
x133 | Far call is converted to near call. | ||
x134 | CPU option %s is not valid for selected CPU. | ||
x135 | Segment '%s' is in another group already | ||
x136 | Symbol type conflict: %s | ||
x137 | Conflicting parameter definition: %s | ||
x138 | PROC and PROTO calling convention conflict | ||
x139 | Non-benign %s redefinition: %s | ||
x140 | Too many bits in RECORD: %s | ||
x141 | Statement not allowed inside structure definition | ||
x142 | Unmatched block nesting: %s | ||
x143 | Symbol redefinition: %s | ||
x144 | Text item required | ||
x145 | INVOKE argument type mismatch: argument %u | ||
x146 | Too few arguments to INVOKE: %s | ||
x147 | VARARG parameter must be last | ||
x148 | LABEL parameter must be first | ||
x149 | Too many arguments in macro call: %s | This is a warning. Macro is invoked with more arguments than expected. | |
x150 | Missing operator in expression | ||
x151 | Unexpected literal found in expression: %s | Literals enclosed in <> or {} are items processed by the preprocessor or to initialize "structured" data items. If they're used otherwise, this error will occur. | |
x152 | Initializer must be a string or single item: %s | ||
x153 | Too many initial values for structure: %s | ||
x154 | Too many initial values for array: %s | ||
x155 | String or text literal too long | ||
x156 | PROLOGUE must be macro function | The user-defined prologue macro must be a macro function, that is, there must be an EXITM somewhere inside that returns a literal. | |
x157 | EPILOGUE must be macro procedure: %s | The user-defined epilogue macro must be a macro procedure, that is, there must NOT be an EXITM somewhere inside that returns a literal. | |
x158 | Reserved word expected | ||
x159 | INVOKE requires prototype for procedure | ||
x160 | Invalid type for data declaration: %s | ||
x161 | Operand must be RECORD type or field | ||
x162 | Unmatched macro nesting | ||
x163 | Empty (null) string | ||
x164 | No segment information to create fixup: %s | ||
x165 | Register value overwritten by INVOKE | ||
x166 | Missing quotation mark in string | ||
x167 | Divide by zero in expression | ||
x168 | General Failure | ||
x169 | Cannot have implicit far jump or call to near label | ||
x170 | Invalid use of register | ||
x171 | Distance invalid for current segment | ||
x172 | Initializer magnitude too large: %s | ||
x173 | Cannot add two relocatable labels | ||
x174 | Cannot define as public or external: <symbol_name> | Text macros, macros, stack variables, structure fields or segment/groups cannot be public or external. | |
x175 | Positive value expected | ||
x176 | FAR not allowed in FLAT model COMM variables | ||
x177 | Too many arguments to INVOKE | ||
x178 | Directive must appear inside a macro | ||
x179 | Invalid type expression | ||
x180 | Cannot declare scoped code label as PUBLIC: <label> | ||
x181 | Invalid radix tag | ||
x182 | Instruction operand must have size | The instruction allows operands with more than just one size, and the wanted size cannot be guessed from the current operands. | |
x183 | Use of register assumed to ERROR | ||
x184 | Instructions and initialized data not supported in <seg_type> segments | <seg_type> may be BSS or AT. Such segments don't have data. | |
x185 | Literal expected after '=' | ||
x186 | No 4k Page-aligned segments in MS386 OMF | A 4K page-aligned segment isn't compatible with MS OMF format, it's a Phar Lab extension. This warning won't appear in the standard version. | |
x187 | |||
x188 | Operand must be relocatable | ||
x189 | Constant or relocatable label expected | ||
x190 | [ELSE]IF2/.ERR2 not allowed, single-pass assembler | ||
x191 | Expression too complex for UNTILCXZ | ||
x192 | Operands must be in same segment | ||
x193 | Invalid use of external symbol: <symbol_name> | ||
x194 | For -coff leading underscore required for start label: <start_label> | ||
x195 | Invalid command-line value, default is used: %s | ||
x196 | Unknown fixup type: %u at <segment>.<offset> | ||
x197 | Unsupported fixup type for <format>: <type> | ||
x198 | Invalid fixup type for <format> <type> at location <segment>.<offset> | ||
x199 | Syntax error in control-flow directive | ||
x200 | Invalid .model parameter for flat model | ||
x201 | Output format doesn't support externals: <symbol> | In formats BIN and MZ all references must be local to the module. | |
x202 | Invalid start label for -bin | ||
x203 | No start label defined | Warning, format MZ only: MZ-binaries usually have a start label. In some cases (i.e. overlays) a missing start label may be ok. | |
x204 | No stack defined | Warning, format MZ only: MZ-binaries usually have a stack. In some cases (i.e. overlays) a missing stack may be ok. | |
x205 | Invalid alignment - value must be 2^n (n=4..15) | ||
x206 | Index value past end of string: <value> | The index argument of SUBSTR or INSTR is beyond the string argument length | |
x207 | Count value too large | ||
x208 | Count must be positive or zero | ||
x209 | Syntax error: <item> | The parser found an item that has no meaning in the current context | |
x210 | |||
x211 | |||
x212 | Must use floating-point initializer | ||
x213 | ORG directive not allowed in unions | ||
x214 | Struct alignment must be 1, 2, 4, 8, 16 or 32 | ||
x215 | Structure cannot be instanced | A structure that has size 0 or that contains an ORG directive cannot be instanced. | |
x216 | Missing angle bracket or brace in literal | ||
x217 | Nondigit in number: <number> | ||
x218 | 16bit fixup for 32bit label: %s | ||
x219 | Too many macro placeholders | The number of parameters and locals for a macro must not exceed 256 | |
x220 | Missing macro argument: %s, parameter %u | ||
x221 | Doesn't work with 32-bit segments: <directive> | Directives .STARTUP and .EXIT work for 16-bit only. | |
x222 | Segment exceeds 64k limit: %s | In MZ format, 16-bit segments are restricted to 64k. | |
x223 | Not supported with OMF format: %s | ||
x224 | Not supported with current output format: %s | The directive or feature isn't supported by all formats. For example, segment-related directives or attributes won't make much sense for flat formats like COFF or ELF. | |
x225 | Unknown default prologue argument: %s | ||
x226 | LOADDS ignored in flat model | ||
x227 | Missing right parenthesis in expression | ||
x228 | Invalid operand for <operator>: <operand> | ||
x229 | Structure improperly initialized: %s | ||
x230 | Expected: %s | ||
x231 | Invalid data initializer | ||
x232 | Expected data label | Some operators ( LENGTH, SIZE ) work with data labels only. | |
x233 | Expression must be a code address | ||
x234 | -n Option needs a valid name parameter | ||
x235 | Constant value too large: <value> | the value of the constant doesn't fit in 64 or - if it is a number to be assigned to a symbolic constant - 32 bits. | |
x236 | Text macro was used before definition | this is a warning only. However, using text macros before they have been defined will force JWasm to do a full second pass, which increases assembly time. | |
x237 | Offset size incompatible with current segment | ||
x238 | Instruction form requires 80386 | ||
x239 | Group/Segment offset size conflict: <group offset> - <segment offset> | Segments within a group must all have the same offset size. | |
x240 | Assembly passes reached: <passes> | Although this is a warning only it usually indicates a severe problem. The assembler is very probably unable to calculate "final" values of all labels and has to be terminated by pressing Ctrl-C. | |
x241 | Filename parameter must be enclosed in <> or quotes | The INCBIN directive requires delimiters for its filename. | |
x242 | Start address on END directive ignored with .STARTUP | ||
x243 | Invalid symbol type in expression: <symbol> | The expression evaluator has encountered a symbol that is meaningless in expressions, for example a (text) macro. | |
x244 | Missing right parenthesis | ||
x245 | Directive must be in control block | .ELSE, .ELSEIF and .ENDIF are valid inside .IF-blocks, .BREAK, .CONTINUE may occur inside .WHILE- or .REPEAT-blocks, .ENDW needs a preceding .WHILE and .UNTIL needs a preceding .REPEAT. | |
x246 | Expected: memory model | the .MODEL directive needs at least one parameter, the memory model. | |
x247 | Type is wrong size for register | ||
x248 | IF[n]DEF expects a plain symbol as argument | this is a warning. Masm accepts any expression as argument for directives [ELSE]IF[N]DEF, but the result probably isn't always what has been expected. | |
x249 | Jump destination must specify a label | ||
x250 | Ignored: <attribute> | An attribute or parameter of a directive was found, but not handled. See Known Bugs and missing Features for details about what features aren't implemented yet. | |
x251 | Missing argument for cmdline option | ||
x252 | Invalid coprocessor register | ||
x253 | Registers AH-DH may not be used with SPL-DIL or R8-R15 | 64-bit only. | |
x254 | .ENDPROLOG found before EH directives | 64-bit only. | |
x255 | Missing FRAME in PROC, no unwind code will be generated | 64-bit only. | |
x256 | Bad alignment for offset in unwind code | 64-bit only. | |
x257 | Nonzero value expected | ||
x258 | Size of prolog too big, must be < 256 bytes | 64-bit only. | |
x259 | Missing .ENDPROLOG: %s | 64-bit only. | |
x260 | .SAFESEH argument must be a PROC | ||
x261 | Directive ignored without -%s switch | ||
x262 | ELF GNU extensions (8/16-bit relocations) used | This is a warning only. The extensions are not "official", but the GNU linker LD will understand them. | |
x263 | Syntax error in expression | ||
x264 | Macro label not defined: %s | The target of a GOTO must be within the very same macro. | |
x265 | Procedure argument or local not referenced: %s | This warning is displayed only if at least -W3 is specified. | |
x266 | Group definition too large, truncated: <group_name> | The size of the OMF record that is to define a group would exceed 4 kB. However, to see this error you'll have to define a group that is to comprise more than 1000 segments, | |
x267 | COMM variable exceeds 64K: <variable> | in 16-bit, the size of a COMM variable is restricted to 64 kB. | |
x268 | Must be public or external: %s | Names that are to be known by the linker must be public or external. | |
x269 | parameter/local name is reserved word: %s | This is a warning. The names of macro parameters or locals have highest priority and hence the reserved word will become inaccessible within the macro. | |
x270 | real or BCD number not allowed | ||
x271 | structure field expected | ||
x272 | Constant value too large: <value> | the value of the constant doesn't fit in 64 or - if it is a number to be assigned to a symbolic constant - 32 bits. | |
x273 | ELSE clause already occured in this IF block | An IF block may contain 0 or 1 ELSE clauses and it must be the last clause before ENDIF. | |
x274 | Illegal use of segment register | ||
x275 | Group exceeds 64K: <group> | MZ format only: a group that contains 16-bit segments cannot be larger than 64 kB, because the group must fit into a physical segment. | |
x276 | EXPORT must be FAR: <symbol> | A 16-bit procedure that is to be exported must be declared with the FAR distance attribute. |