Разберём основные аппаратные регистры для трёх архитектур:
x86-64 (CISC, наиболее распространённая CISC-архитектура)
Классическая RISC (пример: ARMv8-A/AArch64, MIPS)
Классическая CISC (на примере x86-64, с комментариями по отличиям от RISC)
| Категория | Регистр | Разрядность | Назначение и особенности |
| Общего назначения | RAX, RBX, RCX, RDX | 64 | Основные регистры (арифметика, универсальные) |
| Общего назначения | RSI, RDI | 64 | Индексы для строковых операций, аргументы вызовов |
| Общего назначения | RBP, RSP | 64 | Базовый и стековый указатели |
| Дополнительные | R8–R15 | 64 | Дополнительные универсальные регистры |
| Программный счётчик | RIP | 64 | Адрес следующей инструкции |
| Флаги | RFLAGS | 64 | Флаги процессора |
| Сегментные | CS, DS, ES, SS, FS, GS | 16 | Сегментация памяти (редко используется в 64 бит) |
| Контроля | CR0, CR2, CR3, CR4, CR8 | 64 | Управление страницами и режимами процессора |
| SIMD/SSE | XMM0–XMM15 | 128 | SIMD/FPU операции |
| AVX | YMM0–YMM15 | 256 | Расширенные SIMD |
| AVX-512 | ZMM0–ZMM31 | 512 | Ещё шире SIMD |
| MMX/FPU | ST(0)–ST(7), MM0–MM7 | 80/64 | Стек FPU/MMX |
| Категория | Регистр | Разрядность | Назначение и особенности |
| Общего назначения | X0–X30 | 64 | 31 регистр общего назначения (X30=LР) |
| Аргументы/возврат | X0–X7 | 64 | Аргументы функций, X0 — возврат из функции |
| Стековый | SP | 64 | Stack Pointer |
| Программный счётчик | PC | 64 | Program Counter |
| Флаги | NZCV | 4 | Negative, Zero, Carry, Overflow |
| Системный | PSTATE | - | Статус, управление привилегиями |
| SIMD/Vector | V0–V31 | 128 | Регистры для NEON/SIMD/FPU |
| Назначение | Имя | Описание |
| zero | $zero | Всегда 0 |
| Аргументы | $a0–$a3 | Аргументы функций |
| Вызов | $ra | Return address |
| Счётчик | $t0–$t9 | Временные регистры |
| Сохранение | $s0–$s7 | Saved регистры |
| Стек | $sp | Stack pointer |
| Программный счётчик | $pc | Program counter |
| Архитектура | Категория | Имя регистра(-ов) | Разрядность | Кол-во | Назначение, особенности |
| x86-64 | Общие | RAX…RDI, RBP, RSP | 64 | 8 | Универсальные, арифметика, стек |
| | Дополнительные | R8–R15 | 64 | 8 | Универсальные |
| | Программный счётчик | RIP | 64 | 1 | IP (указатель команды) |
| | Флаги | RFLAGS | 64 | 1 | Флаги |
| | Сегментные | CS, DS, ES, SS, FS, GS | 16 | 6 | Сегмент. память |
| | SIMD | XMM0–XMM15, YMM*, ZMM* | 128–512 | 16–32 | Векторные регистры |
| | FPU/MMX | ST(0)–ST(7), MM0–7 | 80/64 | 8 | FPU/MMX |
| ARMv8 | Общие | X0–X30 | 64 | 31 | Универсальные (X30 — LR) |
| | Стек | SP | 64 | 1 | Stack Pointer |
| | Программный счётчик | PC | 64 | 1 | Program Counter |
| | Флаги | NZCV | 4 | 1 набор | Флаги состояния |
| | SIMD/VFP | V0–V31 | 128 | 32 | Векторные регистры |
| MIPS | Общие | $0–$31 | 32/64 | 32 | Универсальные (назначение по ABI) |
| | Стек | $sp | 32/64 | 1 | Stack Pointer |
| | PC | $pc | 32/64 | 1 | Program Counter |
| | HI/LO | hi, lo | 32/64 | 2 | Для умножения/деления |
| Особенность | x86-64 (CISC) | RISC (ARMv8, MIPS) |
| Количество GPR | 16 (реальных) | 31–32 |
| Размер регистров | 64 бит (есть 8/16/32 бита) | 64 бит (обычно) |
| Специализация | Некоторые спец. регистры | Все практически общие |
| Адресация памяти | Сложная, много режимов | Простая |
| Указатель команд | RIP | PC |
x86-64:
mov rax, rbx ; Копировать rbx в rax
add rax, rcx ; Сложение
mov [rsp+8], rax ; Сохр. rax на стеке
ARMv8/AArch64:
MOV X0, X1 ; Копировать X1 в X0
ADD X0, X0, X2 ; Сложить X0 и X2, результат в X0
STR X0, [SP, #8] ; Сохр. X0 по адресу SP+8