0.9.2 ML Errors

Number Message

A2000 memory operand not allowed in context
  A memory operand was given to an instruction that cannot take a memory operand.
A2001 immediate operand not allowed
  A constant or memory offset was given to an instruction that cannot take an immediate operand.
A2002 cannot have more than one ELSE clause per IF block
  The assembler found an ELSE directive after an existing ELSE directive in a conditional-assembly block (IF block).
  Only one ELSE can be used in an IF block. An IF block begins with an IF, IFE, IFB, IFNB, IFDEF, IFNDEF, IFDIF, or IFIDN directive. There can be several ELSEIF statements in an IF block.
  One cause of this error is omission of an ENDIF statement from a nested IF block.
A2003 extra characters after statement
  A directive was followed by unexpected characters.
A2004 symbol type conflict : identifier
  The EXTERNDEF or LABEL directive was used on a variable, symbol, data structure, or label that was defined in the same module but with a different type.
A2005 symbol redefinition : identifier
  The given nonredefinable symbol was defined in two places.
A2006 undefined symbol : identifier
  An attempt was made to use a symbol that was not defined.
  One of the following may have occurred:

A symbol was not defined.

A field was not a member of the specified structure.

A symbol was defined in an include file that was not included.

An external symbol was used without an EXTERN or EXTERNDEF directive.

A symbol name was misspelled.

A local code label was referenced outside of its scope.

A2008 syntax error :
  A token at the current location caused a syntax error.
  One of the following may have occurred:

A dot prefix was added to or omitted from a directive.

A reserved word (such as C or SIZE) was used as an identifier.

An instruction was used that was not available with the current processor or coprocessor selection.

A comparison run-time operator (such as ==) was used in a conditional assembly statement instead of a relational operator (such as EQ).

An instruction or directive was given too few operands.

An obsolete directive was used.

A2009 syntax error in expression
  An expression on the current line contained a syntax error. This error message may also be a side-effect of a preceding program error.
A2010 invalid type expression
  The operand to THIS or PTR was not a valid type expression.
A2011 distance invalid for word size of current segment
  A procedure definition or a code label defined with LABEL specified an address size that was incompatible with the current segment size.
  One of the following occurred:

A NEAR16 or FAR16 procedure was defined in a 32-bit segment.

A NEAR32 or FAR32 procedure was defined in a 16-bit segment.

A code label defined with LABELspecified FAR16 or NEAR16 in a 32-bit segment.

A code label defined with LABEL specified FAR32 or NEAR32 in a 16-bit segment.

A2012 PROC, MACRO, or macro repeat directive must precede LOCAL
  A LOCAL directive must be immediately preceded by a MACRO, PROC, macro repeat directive (such as REPEAT, WHILE, or FOR), or another LOCAL directive.
A2013 .MODEL must precede this directive
  A simplified segment directive or a .STARTUP or .EXIT directive was not preceded by a .MODEL directive.
  A .MODEL directive must specify the model defaults before a simplified segment directive, or a .STARTUP or .EXIT directive may be used.
A2014 cannot define as public or external : identifier
  Only labels, procedures, and numeric equates can be made public or external using PUBLIC, EXTERN, or EXTERNDEF. Local code labels cannot be made public.
A2015 segment attributes cannot change : attribute
  A segment was reopened with different attributes than it was opened with originally.
  When a SEGMENT directive opens a previously defined segment, the newly opened segment inherits the attributes the segment was defined with.
A2016 expression expected
  The assembler expected an expression at the current location but found one of the following:

A unary operator without an operand

A binary operator without two operands

An empty pair of parentheses, (), or brackets, []

A2017 operator expected
  An expression operator was expected at the current location.
  One possible cause of this error is a missing comma between expressions in an expression list.
A2018 invalid use of external symbol : identifier
  An attempt was made to compare the given external symbol using a relational operator.
  The comparison cannot be made because the value or address of an external symbol is not known at assembly time.
A2019 operand must be RECORD type or field
  The operand following the WIDTH or MASK operator was not valid.
  The WIDTH operator takes an operand that is the name of a field or a record. The MASK operator takes an operand that is the name of a field or a record type.
A2020 identifier not a record : identifier
  A record type was expected at the current location.
A2021 record constants cannot span line breaks
  A record constant must be defined on one physical line. A line ended in the middle of the definition of a record constant.
A2022 instruction operands must be the same size
  The operands to an instruction did not have the same size.
A2023 instruction operand must have size
  At least one of the operands to an instruction must have a known size.
A2024 invalid operand size for instruction
  The size of an operand was not valid.
A2025 operands must be in same segment
  Relocatable operands used with a relational or minus operator were not located in the same segment.
A2026 constant expected
  The assembler expected a constant expression at the current location. A constant expression is a numeric expression that can be resolved at assembly time.
A2027 operand must be a memory expression
  The right operand of a PTR expression was not a memory expression.
  When the left operand of the PTR operator is a structure or union type, the right operand must be a memory expression.
A2028 expression must be a code address
  An expression evaluating to a code address was expected.
  One of the following occurred:

SHORT was not followed by a code address.

NEAR PTR or FAR PTR was applied to something that was not a code address.

A2029 multiple base registers not allowed
  An attempt was made to combine two base registers in a memory expression.
  For example, the following expressions cause this error:

[bx+bp]

[bx][bp]

  In another example, given the following definition:

id1 proc arg1:byte

  either of the following lines causes this error:

mov al, [bx].arg1

lea ax, arg1[bx]

A2030 multiple index registers not allowed
  An attempt was made to combine two index registers in a memory expression.
  For example, the following expressions cause this error:

[si+di]

[di][si]

A2031 must be index or base register
  An attempt was made to use a register that was not a base or index register in a memory expression.
  For example, the following expressions cause this error:

[ax]

[bl]

A2032 invalid use of register
  An attempt was made to use a register that was not valid for the intended use.
  One of the following occurred:

OFFSET was applied to a register. (OFFSET can be applied to a register under the M510 option.)

A special 386 register was used in an invalid context.

A register was cast with PTR to a type of invalid size.

A register was specified as the right operand of a segment override operator (:).

A register was specified as the right operand of a binary minus operator (-).

An attempt was made to multiply registers using the * operator.

Brackets ([]) were missing around a register that was added to something.

A2033 invalid INVOKE argument : argument number
  The INVOKE directive was passed a special 386 register, or a register pair containing a byte register or special 386 register. These registers are illegal with INVOKE.
A2034 must be in segment block
  One of the following was found outside of a segment block:

An instruction

A label definition

A THIS operator

A $ operator

A procedure definition

An ALIGN directive

An ORG directive

A2035 DUP too complex
  A declaration using the DUP operator resulted in a data structure with an internal representation that was too large.
A2036 too many initial values for structure: structure
  The given structure was defined with more initializers than the number of fields in the type declaration of the structure.
A2037 statement not allowed inside structure definition
  A structure definition contained an invalid statement.
  A structure cannot contain instructions, labels, procedures, control-flow directives, .STARTUP, or .EXIT.
A2038 missing operand for macro operator
  The assembler found the end of a macro's parameter list immediately after the ! or % operator.
A2039 line too long
  A source-file line exceeded the limit of 512 characters.
  If multiple physical lines are concatenated with the line- continuation character (\), the resulting logical line is still limited to 512 characters.
A2040 segment register not allowed in context
  A segment register was specified for an instruction that cannot take a segment register.
A2041 string or text literal too long
  A string or text literal, or a macro function return value, exceeded the limit of 255 characters.
A2042 statement too complex
  A statement was too complex for the assembler to parse.
  Reduce either the number of tokens or the number of forward-referenced identifiers.
A2043 identifier too long
  An identifier exceeded the limit of 247 characters.
A2044 invalid character in file
  The source file contained a character outside a comment, string, or literal that was not recognized as an operator or other legal character.
A2045 missing angle bracket or brace in literal
  An unmatched angle bracket (either < or >) or brace (either { or }) was found in a literal constant or an initializer.
  One of the following occurred:

A pair of angle brackets or braces was not complete.

An angle bracket was intended to be literal, but it was not preceded by an exclamation point (!) to indicate a literal character.

A2046 missing single or double quotation mark in string
  An unmatched quotation mark (either ' or ") was found in a string.
  One of the following may have occurred:

A pair of quotation marks around a string was not complete.

A pair of quotation marks around a string was formed of one single and one double quotation mark.

A single or double quotation mark was intended to be literal, but the surrounding quotation marks were the same kind as the literal one.

A2047 empty (null) string
  A string consisted of a delimiting pair of quotation marks and no characters within.
  For a string to be valid, it must contain 1–255 characters.
A2048 nondigit in number
  A number contained a character that was not in the set of characters used by the current radix (base).
  This error can occur if a B or D radix specifier is used when the default radix is one that includes that letter as a valid digit.
A2049 syntax error in floating-point constant
  A floating-point constant contained an invalid character.
A2050 real or BCD number not allowed
  A floating-point (real) number or binary coded decimal (BCD) constant was used other than as a data initializer.
  One of the following occurred:

A real number or a BCD was used in an expression.

A real number was used to initialize a directive other than DWORD, QWORD, or TBYTE.

A BCD was used to initialize a directive other than TBYTE.

A2051 text item required
  A literal constant or text macro was expected.
  One of the following was expected:

A literal constant, which is text enclosed in <>

A text macro name

A macro function call

A % followed by a constant expression

A2052 forced error
  The conditional-error directive .ERR or .ERR1 was used to generate this error.
A2053 forced error : value equal to 0
  The conditional-error directive .ERRE was used to generate this error.
A2054 forced error : value not equal to 0
  The conditional-error directive .ERRNZ was used to generate this error.
A2055 forced error : symbol not defined
  The conditional-error directive .ERRNDEF was used to generate this error.
A2056 forced error : symbol defined
  The conditional-error directive .ERRDEF was used to generate this error.
A2057 forced error : string blank
  The conditional-error directive .ERRB was used to generate this error.
A2058 forced error : string not blank
  The conditional-error directive .ERRNB was used to generate this error.
A2059 forced error : strings equal
  The conditional-error directive .ERRIDN or .ERRIDNI was used to generate this error.
A2060 forced error : strings not equal
  The conditional-error directive .ERRDIF or .ERRDIFI was used to generate this error.
A2061 [[ELSE]]IF2/.ERR2 not allowed : single-pass assembler
  A directive for a two-pass assembler was found.
  The Microsoft Macro Assembler (MASM) is a one-pass assembler. MASM does not accept the IF2, ELSEIF2, and .ERR2 directives.
  This error also occurs if an ELSE directive follows an IF1 directive.
A2062 expression too complex for .UNTILCXZ
  An expression used in the condition that follows .UNTILCXZ was too complex.
  The .UNTILCXZ directive can take only one expression, which can contain only == or !=. It cannot take other comparison operators or more complex expressions using operators such as ||.
A2063 can ALIGN only to power of 2 : expression
  The expression specified with the ALIGN directive was invalid.
  The ALIGN expression must be a power of 2 between 2 and 256, and must be less than or equal to the alignment of the current segment, structure, or union.
A2064 structure alignment must be 1, 2, or 4
  The alignment specified in a structure definition was invalid.
A2065 expected : token
  The assembler expected the given token.
A2066 incompatible CPU mode and segment size
  An attempt was made to open a segment with a USE16, USE32, or FLAT attribute that was not compatible with the specified CPU, or to change to a 16-bit CPU while in a 32-bit segment.
  The USE32 and FLAT attributes must be preceded by one of the following processor directives: .386, .386C, .386P, .486, or .486P.
A2067 LOCK must be followed by a memory operation
  The LOCK prefix preceded an invalid instruction. No instruction can take the LOCK prefix unless one of its operands is a memory expression.
A2068 instruction prefix not allowed
  One of the prefixes REP, REPE, REPNE, or LOCK preceded an instruction for which it was not valid.
A2069 no operands allowed for this instruction
  One or more operands were specified with an instruction that takes no operands.
A2070 invalid instruction operands
  One or more operands were not valid for the instruction they were specified with.
A2071 initializer too large for specified size
  An initializer value was too large for the data area it was initializing.
A2072 cannot access symbol in given segment or group: identifier
  The given identifier cannot be addressed from the segment or group specified.
A2073 operands have different frames
  Two operands in an expression were in different frames.
  Subtraction of pointers requires the pointers to be in the same frame. Subtraction of two expressions that have different effective frames is not allowed. An effective frame is calculated from the segment, group, or segment register.
A2074 cannot access label through segment registers
  An attempt was made to access a label through a segment register that was not assumed to its segment or group.
A2075 jump destination too far [: by `n' bytes]
  The destination specified with a jump instruction was too far from the instruction.
  One of the following may be a solution:

Enable the LJMP option.

Remove the SHORT operator. If SHORT has forced a jump that is too far, n is the number of bytes out of range.

Rearrange code so that the jump is no longer out of range.

A2076 jump destination must specify a label
  A direct jump's destination must be relative to a code label.
A2077 instruction does not allow NEAR indirect addressing
  A conditional jump or loop cannot take a memory operand. It must be given a relative address or label.
A2078 instruction does not allow FAR indirect addressing
  A conditional jump or loop cannot take a memory operand. It must be given a relative address or label.
A2079 instruction does not allow FAR direct addressing
  A conditional jump or loop cannot be to a different segment or group.
A2080 jump distance not possible in current CPU mode
  A distance was specified with a jump instruction that was incompatible with the current processor mode.
  For example, 48-bit jumps require .386 or above.
A2081 missing operand after unary operator
  An operator required an operand, but no operand followed.
A2082 cannot mix 16- and 32-bit registers
  An address expression contained both 16- and 32-bit registers.
  For example, the following expression causes this error:

[bx+edi]

A2083 invalid scale value
  A register scale was specified that was not 1, 2, 4, or 8.
A2084 constant value too large
  A constant was specified that was too big for the context in which it was used.
A2085 instruction or register not accepted in current CPU mode
  An attempt was made to use an instruction, register, or keyword that was not valid for the current processor mode.
  For example, 32-bit registers require .386 or above. Control registers such as CR0 require privileged mode .386P or above. This error will also be generated for the NEAR32, FAR32, and FLAT keywords, which require .386 or above.
A2086 reserved word expected
  One or more items in the list specified with a NOKEYWORD option were not recognized as reserved words.
A2087 instruction form requires 80386/486
  An instruction was used that was not compatible with the current processor mode.
  One of the following processor directives must precede the instruction: .386, .386C, .386P, .486, or .486P.
A2088 END directive required at end of file
  The assembler reached the end of the main source file and did not find an .END directive.
A2089 too many bits in RECORD : identifier
  One of the following occurred:

Too many bits were defined for the given record field.

Too many total bits were defined for the given record.

  The size limit for a record or a field in a record is 16 bits when doing 16-bit arithmetic or 32 bits when doing 32-bit arithmetic.
A2090 positive value expected
  A positive value was not found in one of the following situations:

The starting position specified for SUBSTR or @SubStr

The number of data objects specified for COMM

The element size specified for COMM

A2091 index value past end of string
  An index value exceeded the length of the string it referred to when used with INSTR, SUBSTR, @InStr, or @SubStr.
A2092 count must be positive or zero
  The operand specified to the SUBSTR directive, @SubStr macro function, SHL operator, SHR operator, or DUP operator was negative.
A2093 count value too large
  The length argument specified for SUBSTR or @SubStr exceeded the length of the specified string.
A2094 operand must be relocatable
  An operand was not relative to a label.
  One of the following occurred:

An operand specified with the END directive was not relative to a label.

An operand to the SEG operator was not relative to a label.

The right operand to the minus operator was relative to a label, but the left operand was not.

The operands to a relational operator were either not both integer constants or not both memory operands. Relational operators can take operands that are both addresses or both non-addresses but not one of each.

A2095 constant or relocatable label expected
  The operand specified must be a constant expression or a memory offset.
A2096 segment, group, or segment register expected
  A segment or group was expected but was not found.
  One of the following occurred:

The left operand specified with the segment override operator (:) was not a segment register (CS, DS, SS, ES, FS, or GS), group name, segment name, or segment expression.

The ASSUME directive was given a segment register without a valid segment address, segment register, group, or the special FLAT group.

A2097 segment expected : identifier
  The GROUP directive was given an identifier that was not a defined segment.
A2098 invalid operand for OFFSET
  The expression following the OFFSET operator must be a memory expression or an immediate expression.
A2099 invalid use of external absolute
  An attempt was made to subtract a constant defined in another module from an expression.
  You can avoid this error by placing constants in include files rather than making them external.
A2100 segment or group not allowed
  An attempt was made to use a segment or group in a way that was not valid. Segments or groups cannot be added.
A2101 cannot add two relocatable labels
  An attempt was made to add two expressions that were both relative to a label.
A2102 cannot add memory expression and code label
  An attempt was made to add a code label to a memory expression.
A2103 segment exceeds 64K limit
  A 16-bit segment exceeded the size limit of 64K.
A2104 invalid type for data declaration : type
  The given type was not valid for a data declaration.
A2105 HIGH and LOW require immediate operands
  The operand specified with either the HIGH or the LOW operator was not an immediate expression.
A2107 cannot have implicit far jump or call to near label
  An attempt was made to make an implicit far jump or call to a near label in another segment.
A2108 use of register assumed to ERROR
  An attempt was made to use a register that had been assumed to ERROR with the ASSUME directive.
A2109 only white space or comment can follow backslash
  A character other than a semicolon (;) or a white-space character (spaces or TAB characters) was found after a line-continuation character (\).
A2110 COMMENT delimiter expected
  A delimiter character was not specified for a COMMENT directive.
  The delimiter character is specified by the first character that is not white space (spaces or TAB characters) after the COMMENT directive. The comment consists of all text following the delimiter until the end of the line containing the next appearance of the delimiter.
A2111 conflicting parameter definition
  A procedure defined with the PROC directive did not match its prototype as defined with the PROTO directive.
A2112 PROC and prototype calling conventions conflict
  A procedure was defined in a prototype (using the PROTO, EXTERNDEF, or EXTERN directive), but the calling convention did not match the corresponding PROC directive.
A2113 invalid radix tag
  The specified radix was not a number in the range 2–16.
A2114 INVOKE argument type mismatch : argument number
  The type of the arguments passed using the INVOKE directive did not match the type of the parameters in the prototype of the procedure being invoked.
A2115 invalid coprocessor register
  The coprocessor index specified was negative or greater than 7.
A2116 instructions and initialized data not allowed in AT segments
  An instruction or initialized data was found in a segment defined with the AT attribute.
  Data in AT segments must be declared with the ? initializer.
A2117 /AT option requires TINY memory model
  The /AT option was specified on the assembler command line, but the program being assembled did not specify the TINY memory model with the .MODEL directive.
  This error is only generated for modules that specify a start address or use the .STARTUP directive.
A2118 cannot have segment address references with TINY model
  An attempt was made to reference a segment in a TINY model program.
  All TINY model code and data must be accessed with NEAR addresses.
A2119 language type must be specified
  A procedure definition or prototype was not given a language type.
  A language type must be declared in each procedure definition or prototype if a default language type is not specified. A default language type is set using either the .MODEL directive, OPTION LANG, or the ML command-line options /Gc or /Gd.
A2120 PROLOGUE must be macro function
  The identifier specified with the OPTION PROLOGUE directive was not recognized as a defined macro function.
  The user-defined prologue must be a macro function that returns the number of bytes needed for local varaiables and any extra space needed for the macro function.
A2121 EPILOGUE must be macro procedure
  The identifier specified with the OPTION EPILOGUE directive was not recognized as a defined macro procedure.
  The user-defined epilogue macro cannot return a value.
A2122 alternate identifier not allowed with EXTERNDEF
  An attempt was made to specify an alternate identifier with an EXTERNDEF directive.
  You can specify an optional alternate identifier with the EXTERN directive but not with EXTERNDEF.
A2123 text macro nesting level too deep
  A text macro was nested too deeply. The nesting limit for text macros is 40.
A2125 missing macro argument
  A required argument to @InStr, @SubStr, or a user-defined macro was not specified.
A2126 EXITM used inconsistently
  The EXITM directive was used both with and without a return value in the same macro.
  A macro procedure returns a value; a macro function does not.
A2127 macro function argument list too long
  There were too many characters in a macro function's argument list. This error applies also to a prologue macro function called implicitly by the PROC directive.
A2129 VARARG parameter must be last parameter
  A parameter other than the last one was given the VARARG attribute.
  The :VARARG specification can be applied only to the last parameter in a parameter list for macro and procedure definitions and prototypes. You cannot use multiple :VARARG specifications in a macro.
A2130 VARARG parameter not allowed with LOCAL
  An attempt was made to specify :VARARG as the type in a procedure's LOCAL declaration.
A2131 VARARG parameter requires C calling convention
  A VARARG parameter was specified in a procedure definition or prototype, but the C, SYSCALL, or STDCALL calling convention was not specified.
A2132 ORG needs a constant or local offset
  The expression specified with the ORG directive was not valid.
  ORG requires an immediate expression with no reference to an external label or to a label outside the current segment.
A2133 register value overwritten by INVOKE
  A register was passed as an argument to a procedure, but the code generated by INVOKE to pass other arguments destroyed the contents of the register.
  The AX, AL, AH, EAX, DX, DL, DH, and EDX registers may be used by the assembler to perform data conversion.
  Use a different register.
A2134 structure too large to pass with INVOKE : argument number
  An attempt was made with INVOKE to pass a structure that exceeded 255 bytes.
  Pass structures by reference if they are larger than 255 bytes.
A2136 too many arguments to INVOKE
  The number of arguments passed using the INVOKE directive exceeded the number of parameters in the prototype for the procedure being invoked.
A2137 too few arguments to INVOKE
  The number of arguments passed using the INVOKE directive was fewer than the number of required parameters specified in the prototype for the procedure being invoked.
A2138 invalid data initializer
  The initializer list for a data definition was invalid.
  This error can be caused by using the R radix override with too few digits.
A2140 RET operand too large
  The operand specified to RET, RETN, or RETF exceeded two bytes.
A2141 too many operands to instruction
  Too many operands were specified with a string control instruction.
A2142 cannot have more than one .ELSE clause per .IF block
  The assembler found more than one .ELSE clause within the current .IF block.
  Use .ELSEIF for all but the last block.
A2143 expected data label
  The LENGTHOF, SIZEOF, LENGTH, or SIZE operator was applied to a non-data label, or the SIZEOF or SIZE operator was applied to a type.
A2144 cannot nest procedures
  An attempt was made to nest a procedure containing a parameter, local variable, USES clause, or a statement that generated a new segment or group.
A2145 EXPORT must be FAR : procedure
  The given procedure was given EXPORT visibility and NEAR distance.
  All EXPORT procedures must be FAR. The default visibility may have been set with the OPTION PROC:EXPORT statement or the SMALL or COMPACT memory models.
A2146 procedure declared with two visibility attributes : procedure
  The given procedure was given conflicting visibilities.
  A procedure was declared with two different visibilities (PUBLIC, PRIVATE, or EXPORT). The PROC and PROTO statements for a procedure must have the same visibility.
A2147 macro label not defined : macrolabel
  The given macro label was not found.
  A macro label is defined with :macrolabel.
A2148 invalid symbol type in expression : identifier
  The given identifier was used in an expression in which it was not valid.
  For example, a macro procedure name is not allowed in an expression.
A2149 byte register cannot be first operand
  A byte register was specified to an instruction that cannot take it as the first operand.
A2150 word register cannot be first operand
  A word register was specified to an instruction that cannot take it as the first operand.
A2151 special register cannot be first operand
  A special register was specified to an instruction that cannot take it as the first operand.
A2152 coprocessor register cannot be first operand
  A coprocessor (stack) register was specified to an instruction that cannot take it as the first operand.
A2153 cannot change size of expression computations
  An attempt was made to set the expression word size when the size had been already set using the EXPR16, EXPR32, SEGMENT:USE32, or SEGMENT:FLAT option or the .386 or higher processor selection directive.
A2154 syntax error in control-flow directive
  The condition for a control-flow directive (such as .IF or .WHILE) contained a syntax error.
A2155 cannot use 16-bit register with a 32-bit address
  An attempt was made to mix 16-bit and 32-bit offsets in an expression.
  Use a 32-bit register with a symbol defined in a 32-bit segment.
  For example, if id1 is defined in a 32-bit segment, the following causes this error:

id1[bx]

A2156 constant value out of range
  An invalid value was specified for the PAGE directive.
  The first parameter of the PAGE directive can be either 0 or a value in the range 10–255. The second parameter of the PAGE directive can be either 0 or a value in the range 60–255.
A2157 missing right parenthesis
  A right parenthesis, ), was missing from a macro function call.
  Be sure that parentheses are in pairs if nested.
A2158 type is wrong size for register
  An attempt was made to assume a general-purpose register to a type with a different size than the register.
  For example, the following pair of statements causes this error:

ASSUME bx:far ptr byte ; far pointer is 4 or 6 bytes

ASSUME al:word ; al is a byte reg, cannot hold word

A2159 structure cannot be instanced
  An attempt was made to create an instance of a structure when there were no fields or data defined in the structure definition or when ORG was used in the structure definition.
A2160 non-benign structure redefinition : label incorrect
  A label given in a structure redefinition either did not exist in the original definition or was out of order in the redefinition.
A2161 non-benign structure redefinition : too few labels
  Not enough members were defined in a structure redefinition.
A2162 OLDSTRUCT/NOOLDSTRUCT state cannot be changed
  Once the OLDSTRUCTS or NOOLDSTRUCTS option has been specified and a structure has been defined, the structure scoping cannot be altered or respecified in the same module.
A2163 non-benign structure redefinition : incorrect initializers
  A STRUCT or UNION was redefined with a different initializer value.
  When structures and unions are defined more than once, the definitions must be identical. This error can be caused by using a variable as an initializer and having the value of the variable change between definitions.
A2164 non-benign structure redefinition : too few initializers
  A STRUCT or UNION was redefined with too few initializers.
  When structures and unions are defined more than once, the definitions must be identical.
A2165 non-benign structure redefinition : label has incorrect offset
  The offset of a label in a redefined STRUCT or UNION differs from the original definition.
  When structures and unions are defined more than once, the definitions must be identical. This error can be caused by a missing member or by a member that has a different size than in its original definition.
A2166 structure field expected
  The right-hand side of a dot operator (.) is not a structure field.
  This error may occur with some code acceptable to previous versions of the assembler. To enable the old behavior, use OPTION OLDSTRUCTS, which is automatically enabled by OPTION M510 or the /Zm command-line option.
A2167 unexpected literal found in expression
  A literal was found where an expression was expected.
  One of the following may have occurred:

A literal was used as an initializer

A record tag was omitted from a record constant

A2169 divide by zero in expression
  An expression contains a divisor whose value is equal to zero.
  Check that the syntax of the expression is correct and that the divisor (whether constant or variable) is correctly initialized.
A2170 directive must appear inside a macro
  A GOTO or EXITM directive was found outside the body of a macro.
A2171 cannot expand macro function
  A syntax error prevented the assembler from expanding the macro function.
A2172 too few bits in RECORD
  There was an attempt to define a record field of 0 bits.
A2173 macro function cannot redefine itself
  There was an attempt to define a macro function inside the body of a macro function with the same name. This error can also occur when a member of a chain of macros attempts to redefine a previous member of the chain.
A2175 invalid qualified type
  An identifier was encountered in a qualified type that was not a type, structure, record, union, or prototype.
A2176 floating point initializer on an integer variable
  An attempt was made to use a floating-point initializer with DWORD,QWORD, or TBYTE. Only integer initializers are allowed.
A2177 nested structure improperly initialized
  The nested structure initialization could not be resolved.
  This error can be caused by using different beginning and ending delimiters in a nested structure initialization.
A2178 invalid use of FLAT
  There was an ambiguous reference to FLAT as a group.
  This error is generated when there is a reference to FLAT instead of a FLAT subgroup. For example,

mov ax, FLAT ; Generates A2178

mov ax, SEG FLAT:_data ; Correct

A2179 structure improperly initialized
  There was an error in a structure initializer.
  One of the following occurred:

The initializer is not a valid expression.

The initializer is an invalid DUP statement.

A2180 improper list initialization
  In a structure, there was an attempt to initialize a list of items with a value or list of values of the wrong size.
A2181 initializer must be a string or single item
  There was an attempt to initialize a structure element with something other than a single item or string.
  This error can be caused by omitting braces ({}) around an initializer.
A2182 initializer must be a single item
  There was an attempt to initialize a structure element with something other than a single item.
  This error can be caused by omitting braces ({}) around an initializer.
A2183 initializer must be a single byte
  There was an attempt to initialize a structure element of byte size with something other than a single byte.
A2184 improper use of list initializer
  The assembler did not expect an opening brace ({) at this point.
A2185 improper literal initialization
  A literal structure initializer was not properly delimited.
  This error can be caused by missing angle brackets (<>) or braces ({}) around an initializer or by extra characters after the end of an initializer.
A2186 extra characters in literal initialization
  A literal structure initializer was not properly delimited.
  One of the following may have occurred:

There were missing or mismatched angle brackets (<>) or braces ({}) around an initializer.

There were extra characters after the end of an initializer.

There was a syntax error in the structure initialization.

A2187 must use floating point initializer
  A variable declared with the REAL4, REAL8, and REAL10 directives must be initialized with a floating-point number or a question mark (?).
  This error can be caused by giving an initializer in integer form (such as 18) instead of in floating-point form (18.0).
A2188 cannot use .EXIT for OS_OS2 with .8086
  The INVOKE generated by the .EXIT statement under OS_OS2 requires the .186 (or higher) directive, since it must be able to use the PUSH instruction to push immediates directly.
A2189 invalid combination with segment alignment
  The alignment specified by the ALIGN or EVEN directive was greater than the current segment alignment as specified by the SEGMENT directive.
A2190 INVOKE requires prototype for procedure
  The INVOKE directive must be preceded by a PROTO statement for the procedure being called.
  When using INVOKE with an address rather than an explicit procedure name, you must precede the address with a pointer to the prototype.
A2191 cannot include structure in self
  You cannot reference a structure recursively (inside its own definition).
A2192 symbol language attribute conflict
  Two declarations for the same symbol have conflicting language attributes (such as C and PASCAL). The attributes should be identical or compatible.
A2193 non-benign COMM redefinition
  A variable was redefined with the COMM directive to a different language type, distance, size, or instance count.
  Multiple COMM definitions of a variable must be identical.
A2194 COMM variable exceeds 64K
  A variable declared with the COMM directive in a 16-bit segment was greater than 64K.
A2195 parameter or local cannot have void type
  The assembler attemped to create an argument or create a local without a type.
  This error can be caused by declaring or passing a symbol followed by a colon without specifying a type or by using a user-defined type defined as void.
A2196 cannot use TINY model with OS_OS2
  A .MODEL statement specified the TINY memory model and the OS_OS2 operating system. The tiny memory model is not allowed under OS/2.
A2197 expression size must be 32-bits
  There was an attempt to use the 16-bit expression evaluator in a 32-bit segment. In a 32-bit segment (USE32 or FLAT), you cannot use the default 16-bit expression evaluator (OPTION EXPR16).
A2198 .EXIT does not work with 32-bit segments
  The .EXIT directive cannot be used in a 32-bit segment; it is valid only under MS-DOS and OS/2 1.x.
A2199 .STARTUP does not work with 32-bit segments
  The .STARTUP directive cannot be used in a 32-bit segment; it is valid only under MS-DOS and OS/2 1.x.
A2200 ORG directive not allowed in unions
  The ORG directive is not valid inside a UNION definition.
  You can use the ORG directive inside STRUCT definitions, but it is meaningless inside a UNION.
A2201 scope state cannot be changed
  Both OPTION SCOPED and OPTION NOSCOPED statements occurred in a module. You cannot switch scoping behavior in a module.
  This error may be caused by an OPTION SCOPED or OPTION NOSCOPED statement in an include file.
A2901 cannot run ML.EXE
  The MASM driver could not spawn ML.EXE.
  One of the following may have occurred:

ML.EXE was not in the path.

The READ attribute was not set on ML.EXE.

There was not enough memory.