Appendix C. Errors and Warnings

Asmc Macro Assembler

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.