29.1. x86 registers
link:userland/arch/x86_64/registers.S
|-----------------------------------------------| | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |-----------------------------------------------| | | | AH | AL | |-----------------------------------------------| | | | AX | |-----------------------------------------------| | | EAX | |-----------------------------------------------| | RAX | |-----------------------------------------------|
For the newer x86_64 registers, the naming convention is somewhat saner:
|-----------------------------------------------| | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |-----------------------------------------------| | | |R12H |R12L | |-----------------------------------------------| | | | R12W | |-----------------------------------------------| | | R12D | |-----------------------------------------------| | R12 | |-----------------------------------------------|
Most of the 8 older x86 general purpose registers are not "really" general purpose in the sense that a few instructions magically use them without an explicit encoding. This is reflected in their names:
-
RAX: Accumulator. The general place where you add, subtract and otherwise manipulate results in-place. Magic for example for MUL.
-
RCX, RSI, RDI: Counter, Source and Destination. Used in x86 string instructions