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'.