The Operand Size of an expression can be set explicitly using the Type Conversion (PTR Operator), or it may be a side-effect inherited from the type of data referenced in the expression. The following table describes the operand sizes that will be assigned when an identifier is referenced in an expression:
┌─────────────────────────┬───────────────────────────────────┐ │REFERENCE │OPERAND SIZE │ ├─────────────────────────┼───────────────────────────────────┤ │8-Bit-Register │1 │ ├─────────────────────────┼───────────────────────────────────┤ │16-Bit-Register │2 │ ├─────────────────────────┼───────────────────────────────────┤ │32-Bit-Register │4 │ ├─────────────────────────┼───────────────────────────────────┤ │Segment-Register │2 │ ├─────────────────────────┼───────────────────────────────────┤ │Control-Register │4 │ ├─────────────────────────┼───────────────────────────────────┤ │Debug-Register │4 │ ├─────────────────────────┼───────────────────────────────────┤ │Test-Register │4 │ ├─────────────────────────┼───────────────────────────────────┤ │MMX-Register │8 │ ├─────────────────────────┼───────────────────────────────────┤ │Floating-Point-Register │10 │ ├─────────────────────────┼───────────────────────────────────┤ │BYTE │1 │ ├─────────────────────────┼───────────────────────────────────┤ │SBYTE │1 │ ├─────────────────────────┼───────────────────────────────────┤ │WORD │2 │ ├─────────────────────────┼───────────────────────────────────┤ │SWORD │2 │ ├─────────────────────────┼───────────────────────────────────┤ │DWORD │4 │ ├─────────────────────────┼───────────────────────────────────┤ │SDWORD │4 │ ├─────────────────────────┼───────────────────────────────────┤ │REAL4 │4 │ ├─────────────────────────┼───────────────────────────────────┤ │FWORD │6 │ ├─────────────────────────┼───────────────────────────────────┤ │QWORD │8 │ ├─────────────────────────┼───────────────────────────────────┤ │REAL8 │8 │ ├─────────────────────────┼───────────────────────────────────┤ │TBYTE │10 │ ├─────────────────────────┼───────────────────────────────────┤ │REAL10 │10 │ ├─────────────────────────┼───────────────────────────────────┤ │NEAR │2 or 4 │ ├─────────────────────────┼───────────────────────────────────┤ │NEAR16 │2 │ ├─────────────────────────┼───────────────────────────────────┤ │NEAR32 │4 │ ├─────────────────────────┼───────────────────────────────────┤ │FAR │4 or 6 │ ├─────────────────────────┼───────────────────────────────────┤ │FAR16 │4 │ ├─────────────────────────┼───────────────────────────────────┤ │FAR32 │6 │ ├─────────────────────────┼───────────────────────────────────┤ │Numeric-EquateName │Inherited from equate expression │ ├─────────────────────────┼───────────────────────────────────┤ │GroupName │2 │ ├─────────────────────────┼───────────────────────────────────┤ │SegmentName │2 │ ├─────────────────────────┼───────────────────────────────────┤ │Code-LabelName │SIZE (TYPE Code-LabelName) │ ├─────────────────────────┼───────────────────────────────────┤ │Data-LabelName │SIZE (TYPE Data-LabelName) │ ├─────────────────────────┼───────────────────────────────────┤ │Structure-FieldName │SIZE Structure-FieldName │ ├─────────────────────────┼───────────────────────────────────┤ │Record-TypeName │SIZE Record-TypeName │ ├─────────────────────────┼───────────────────────────────────┤ │Structure-TypeName │SIZE Structure-TypeName │ ├─────────────────────────┼───────────────────────────────────┤ │Union-TypeName │SIZE Union-TypeName │ └─────────────────────────┴───────────────────────────────────┘
The Operand Size is 0 for all other identifier types.