Skip to content

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); R10R15 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: R8R11 are caller-saved (volatile); R12R15 are callee-saved.
  • Microsoft x64: R8R11 are caller-saved; R12R15 are callee-saved. (R10/R11 are scratch/thunk registers.)

Sub-registers

Each uses a numeric-suffix naming scheme rather than the legacy names:

asm
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 bits

Why 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 R12R15 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.