Intel and compatable CPU's Programming Information

Intel SSE MMX2 KNI documentation

AMD 64 Bit & Opteron resource on this site

Intel Itanium 64 Bit processor

CPU Heat Dissipation Table

Intel 80386 Reference Programmer's Manual

Our Partners:

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:
    1. Normally moves 32 bits from a 32-bit register to a 32-bit effective address in memory.
    2. If preceded by an operand-size prefix, moves 16 bits from a 16-bit register to 32-bit effective address in memory.
    3. If preceded by an address-size prefix, moves 32 bits from a 32-bit register to a16-bit effective address in memory.
    4. 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:
    1. Normally moves 16 bits from a 16-bit register to a 16-bit effective address in memory.
    2. If preceded by an operand-size prefix, moves 32 bits from a 32-bit register to 16-bit effective address in memory.
    3. If preceded by an address-size prefix, moves 16 bits from a 16-bit register to a32-bit effective address in memory.
    4. 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:
  1. The need to address instructions or data in segments that are larger than 64 Kilobytes.
  2. The predominant size of operands.
  3. 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