Node: i386-Regs, Next: i386-Prefixes, Previous: i386-Mnemonics, Up: i386-Dependent

### Register Naming

Register operands are always prefixed with `%`. The 80386 registers consist of

- the 8 32-bit registers `%eax` (the accumulator), `%ebx`, `%ecx`, `%edx`, `%edi`, `%esi`, `%ebp` (the frame pointer), and `%esp` (the stack pointer).
- the 8 16-bit low-ends of these: `%ax`, `%bx`, `%cx`, `%dx`, `%di`, `%si`, `%bp`, and `%sp`.
- the 8 8-bit registers: `%ah`, `%al`, `%bh`, `%bl`, `%ch`, `%cl`, `%dh`, and `%dl` (These are the high-bytes and low-bytes of `%ax`, `%bx`, `%cx`, and `%dx`)
- the 6 section registers `%cs` (code section), `%ds` (data section), `%ss` (stack section), `%es`, `%fs`, and `%gs`.
- the 3 processor control registers `%cr0`, `%cr2`, and `%cr3`.
- the 6 debug registers `%db0`, `%db1`, `%db2`, `%db3`, `%db6`, and `%db7`.
- the 2 test registers `%tr6` and `%tr7`.
- the 8 floating point register stack `%st` or equivalently `%st(0)`, `%st(1)`, `%st(2)`, `%st(3)`, `%st(4)`, `%st(5)`, `%st(6)`, and `%st(7)`. These registers are overloaded by 8 MMX registers `%mm0`, `%mm1`, `%mm2`, `%mm3`, `%mm4`, `%mm5`, `%mm6` and `%mm7`.
- the 8 SSE registers registers `%xmm0`, `%xmm1`, `%xmm2`, `%xmm3`, `%xmm4`, `%xmm5`, `%xmm6` and `%xmm7`.

The AMD x86-64 architecture extends the register set by:

- enhancing the 8 32-bit registers to 64-bit: `%rax` (the accumulator), `%rbx`, `%rcx`, `%rdx`, `%rdi`, `%rsi`, `%rbp` (the frame pointer), `%rsp` (the stack pointer)
- the 8 extended registers `%r8`-`%r15`.
- the 8 32-bit low ends of the extended registers: `%r8d`-`%r15d`
- the 8 16-bit low ends of the extended registers: `%r8w`-`%r15w`
- the 8 8-bit low ends of the extended registers: `%r8b`-`%r15b`
- the 4 8-bit registers: `%sil`, `%dil`, `%bpl`, `%spl`.
- the 8 debug registers: `%db8`-`%db15`.
- the 8 SSE registers: `%xmm8`-`%xmm15`.