up:
Chapter 16 -- Mixing 16-Bit and 32 Bit Code
prev: 16.1 How the 80386 Implements 16-Bit and 32-Bit Features
next: 16.3 Sharing Data Segments Among Mixed Code Segments
16.2 Mixing 32-Bit and 16-Bit Operations
The 80386 has two instruction prefixes that allow mixing of 32-bit and
16-bit operations within one segment:
- The operand-size prefix (66H)
- The address-size prefix (67H)
These prefixes reverse the default size selected by the D-bit. For example,
the processor can interpret the word-move instruction MOV mem, reg in any of
four ways:
- In a USE32 segment:
- Normally moves 32 bits from a 32-bit register to a 32-bit
effective address in memory.
- If preceded by an operand-size prefix, moves 16 bits from a 16-bit
register to 32-bit effective address in memory.
- If preceded by an address-size prefix, moves 32 bits from a 32-bit
register to a16-bit effective address in memory.
- If preceded by both an address-size prefix and an operand-size
prefix, moves 16 bits from a 16-bit register to a 16-bit effective
address in memory.
- In a USE16 segment:
- Normally moves 16 bits from a 16-bit register to a 16-bit
effective address in memory.
- If preceded by an operand-size prefix, moves 32 bits from a 32-bit
register to 16-bit effective address in memory.
- If preceded by an address-size prefix, moves 16 bits from a 16-bit
register to a32-bit effective address in memory.
- If preceded by both an address-size prefix and an operand-size
prefix, moves 32 bits from a 32-bit register to a 32-bit effective
address in memory.
These examples illustrate that any instruction can generate any combination
of operand size and address size regardless of whether the instruction is in
a USE16 or USE32 segment. The choice of the USE16 or USE32 attribute for a
code segment is based upon these criteria:
- The need to address instructions or data in segments that are larger
than 64 Kilobytes.
- The predominant size of operands.
- The addressing modes desired. (Refer to
Chapter 17 for an explanation
of the additional addressing modes that are available when 32-bit
addressing is used.)
Choosing a setting of the D-bit that is contrary to the predominant size of
operands requires the generation of an excessive number of operand-size
prefixes.
up:
Chapter 16 -- Mixing 16-Bit and 32 Bit Code
prev: 16.1 How the 80386 Implements 16-Bit and 32-Bit Features
next: 16.3 Sharing Data Segments Among Mixed Code Segments