📌 GPR
GPR (General Purpose Register, регистр общего назначения) — быстродействующий элемент хранения внутри CPU, предназначенный для временного размещения операндов, адресов, промежуточных результатов арифметических и логических операций. Используется в большинстве инструкций, напрямую доступен программно через ISA. GPR — фундаментальный компонент архитектуры процессора, определяющий эффективность вычислений и глубину оптимизации кода.
🧠 Как работает
Назначение и структура
- GPR хранят значения, которые используются в вычислениях и передаются между инструкциями без обращения к RAM.
 - Количество и разрядность GPR определяются ISA (например: x86 — 8×32-битных, 16×64-битных; ARM — 16 или 31×32/64-битных; RISC-V — 32×32/64-битных; MIPS — 32×32-битных).
 - GPR могут использоваться как:
- Операнды арифметических/логических инструкций (
add,sub,and,or) - Адресные регистры (указание адреса в памяти)
 - Счетчики, индексные и временные регистры
 - Хранение возвращаемых значений и параметров функции
 
 - Операнды арифметических/логических инструкций (
 
Принцип работы
- Каждая инструкция процессора работает преимущественно с содержимым GPR.
 - В современных процессорах чтение/запись в GPR происходит за 1 такт, что значительно быстрее обращения к Cache или RAM.
 - При вызове функций параметры и результаты обычно передаются через определённые GPR (ABI calling convention).
 - В некоторых архитектурах есть “нулевой” GPR (например, MIPS 
$zero), всегда возвращающий 0 при чтении. 
Классическая схема регистра GPR в процессоре (совместима с Mermaid v8/v9/v10)
flowchart TB ALU["ALU (арифметико-логическое устройство)"] GPR["GPR Bank"] RAM["RAM"] PC["Program Counter"] CU["Control Unit"] GPR -- "операнды" --> ALU ALU -- "результат" --> GPR GPR -- "адрес/данные" --> RAM PC -- "адрес" --> GPR CU -- "управление" --> GPR
⚙️ Где применяется
- 
Во всех современных CPU, MCU, DSP, GPU (иногда — регистровые файлы с тысячами GPR для параллельных потоков).
 - 
Регистр-ориентированные вычисления, оптимизация компиляторов (регистровое распределение).
 - 
Контекст-переключение (Context Switch) — сохранение/восстановление содержимого всех GPR.
 - 
В low-level-программировании: ASM, отладка, вызовы ОС, bootloader, RTOS.
 
✅ Преимущества
- 
Максимальная скорость доступа по сравнению с любой памятью.
 - 
Гибкость — универсальное назначение, упрощённая работа компилятора.
 - 
Эффективность — снижение количества обращений к кешу и RAM.
 - 
Аппаратная поддержка операций “без памяти” (register-to-register).
 
❌ Недостатки
- 
Ограниченность — количество GPR фиксировано (по стандарту ISA).
 - 
Не все GPR равноправны — в некоторых ISA часть из них зарезервирована или имеет специальное назначение (PC, SP, FLAGS).
 - 
Регистровое давление — при дефиците GPR увеличиваются обращения к стеку или RAM, страдает производительность.
 - 
Сложность ABI — разные calling conventions для разных платформ и языков.
 
🔗 Связанные технологии
CPU, ISA, ALU, FPU, Register File, PC, SP, FLAGS, x86, ARM, RISC-V, MIPS, ABI, Calling Convention, MCU, DSP, Pipeline
Резюме
GPR — центральный компонент архитектуры любого процессора, определяющий скорость, стиль программирования и компиляторные оптимизации. Их число, назначение и структура — одна из ключевых характеристик ISA. GPR минимизируют обращения к памяти, обеспечивают высокую производительность и гибкость вычислений. При проектировании архитектуры или написании низкоуровневого кода знание принципов работы GPR — базовая необходимость.
Примеры кода
x86-64: сложение в GPR (ассемблер)
section .data
    x dq 10
    y dq 20
    result dq 0
 
section .text
    global _start
_start:
    mov rax, [x]     ; rax — GPR
    add rax, [y]
    mov [result], rax
    mov rax, 60
    xor rdi, rdi
    syscallARM: работа с регистром общего назначения
    MOV R0, #5        // r0 — GPR, присваиваем значение 5
    ADD R1, R0, #10   // r1 — GPR, r1 = r0 + 10C: работа с inline-ассемблером (gcc, x86)
int a = 3, b = 4, c;
asm("addl eax" : "=a"(c) : "a"(a), "b"(b));Linux: просмотр состояния GPR через gdb
gdb ./myprog
(gdb) info registersИсточники: Intel® SDM, ARM Architecture Reference Manual, RISC-V Spec, osdev.org, habr.com, Википедия, AMD64 ABI, gcc docs, LLVM docs, архитектуры MIPS/MIPS64.