#### 8.12.4 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.