Using as: i386-Regs

Next: i386-Prefixes, Previous: i386-Mnemonics, Up: i386-Dependent [Contents][Index]

#### 9.15.5 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 5 processor control registers ‘`%cr0`’, ‘`%cr2`’, ‘`%cr3`’, ‘`%cr4`’, and ‘`%cr8`’.
- 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 128-bit 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 128-bit SSE registers: ‘`%xmm8`’–‘`%xmm15`’.

With the AVX extensions more registers were made available:

- the 16 256-bit SSE ‘`%ymm0`’–‘`%ymm15`’ (only the first 8 available in 32-bit mode). The bottom 128 bits are overlaid with the ‘`xmm0`’–‘`xmm15`’ registers.

The AVX2 extensions made in 64-bit mode more registers available:

- the 16 128-bit registers ‘`%xmm16`’–‘`%xmm31`’ and the 16 256-bit registers ‘`%ymm16`’–‘`%ymm31`’.

The AVX512 extensions added the following registers:

- the 32 512-bit registers ‘`%zmm0`’–‘`%zmm31`’ (only the first 8 available in 32-bit mode). The bottom 128 bits are overlaid with the ‘`%xmm0`’–‘`%xmm31`’ registers and the first 256 bits are overlaid with the ‘`%ymm0`’–‘`%ymm31`’ registers.
- the 8 mask registers ‘`%k0`’–‘`%k7`’.

Next: i386-Prefixes, Previous: i386-Mnemonics, Up: i386-Dependent [Contents][Index]