Glossary
R8-R15 Registers
R8 through R15 are the eight extended 64-bit x86-64 general-purpose registers added in AMD64, used for argument passing and extra scratch space.
R8–R15 are the eight general-purpose registers that AMD64 added to the original x86 register file, doubling the count from eight to sixteen. They have no historical mnemonics — they are simply numbered — and exist only in 64-bit mode, encoded via the REX prefix. Having eight extra registers dramatically reduces stack spilling compared to 32-bit code.
In the calling conventions they carry arguments. The System V AMD64 ABI uses R8 and R9 as the fifth and sixth integer/pointer arguments (after RDI, RSI, RDX, RCX); R10–R15 are not argument registers. The Microsoft x64 ABI uses R8 and R9 as the third and fourth arguments. The volatility split differs by ABI:
- System V:
R8–R11are caller-saved (volatile);R12–R15are callee-saved. - Microsoft x64:
R8–R11are caller-saved;R12–R15are callee-saved. (R10/R11are scratch/thunk registers.)
Sub-registers
Each uses a numeric-suffix naming scheme rather than the legacy names:
mov r8, rax ; full 64-bit
mov r8d, eax ; low 32 bits (zeroes upper half)
mov r8w, ax ; low 16 bits
mov r8b, al ; low 8 bitsWhy it matters in reverse engineering
Spotting R8/R9 set before a call flags the fifth/sixth argument on Linux or the third/fourth on Windows. A function saving R12–R15 in its prologue is holding long-lived values across calls. Because these registers require the REX prefix, their presence is itself a quick signal that you are looking at genuine 64-bit code.
See the general register concept and the assembly reference. The expanded register file is a defining topic in x86 vs x64 assembly. They continue the argument sequence that begins with the RDI register.