Compiler Error C2422

illegal segment override in 'operand'

Inline assembly code incorrectly uses a segment override operator (colon) on an operand. Possible causes include:

  • The register preceding the operator is not a segment register.

  • The register preceding the operator is not the only segment register in the operand.

  • The segment override operator appears within an indirection operator (brackets).

  • The expression following the segment override operator is not an immediate operand or a memory operand.

The following sample generates C2422:

// C2422.cpp
// processor: x86
int main() {
   _asm {
      mov AX, [BX:ES]   // C2422
      mov AX, ES   // OK
   }
}