ModR/M and SIB Bytes
The ModR/M and SIB bytes follow the opcode byte(s) in many of the processor
instructions. They contain the following information:
- The indexing type or register number to be used in
the instruction
 
- The register to be used, or more information to select
the instruction
 
- The base, index, and scale information
The ModR/M byte contains three fields of information:
- The mod field, which occupies the two most
significant bits of the byte, combines with the r/m field to form 32 possible
values:  eight registers and 24 indexing modes.
 
- The reg field, which occupies the next three
bits following the mod field, specifies either a register number or three
more bits of opcode information. The meaning of the reg field is determined
by the first (opcode) byte of the instruction.
 
- The r/m field, which occupies the three least
significant bits of the byte, can specify a register as the location of
an operand, or can form part of the addressing-mode encoding in combination
with the mod field as described above.
The based indexed forms of 32-bit addressing require the SIB byte. The presence
of the SIB byte is indicated by certain encodings of the ModR/M byte. The
SIB byte then includes the following fields:
- The ss field, which occupies the two most significant
bits of the byte, specifies the scale factor.
 
- The index field, which occupies the next three
bits following the ss field and specifies the register number of
the index register.
 
- The base field, which occupies the three least
significant bits of the byte, specifies the register number of the base
register.
ModR / MandSIBByteFormats
┌────────────────────────────────────────────────┐
│                  MODR/M BYTE                   │
│                                                │
│     7     6    5     4     3   2    1     0    │
│   ┌──────────┬────────────────┬──────────────┐ │
│   │  MOD     │   REG/OPCODE   │     R/M      │ │
│   └──────────┴────────────────┴──────────────┘ │
│                                                │
│            SIB (SCALE INDEX BASE) BYTE         │
│                                                │
│     7     6    5     4     3   2    1     0    │
│   ┌──────────┬────────────────┬──────────────┐ │
│   │    SS    │     INDEX      │     BASE     │ │
│   └──────────┴────────────────┴──────────────┘ │
│                                                │
└────────────────────────────────────────────────┘
[Back: Instruction Format] 
[Next: 16-Bit Addressing Forms with the ModR/M Byte]