Как работает «мозг» процессора: разбор АЛУ

Иван Корнев·03.05.2026·6 мин

Арифметико-логическое устройство (АЛУ) — это цифровой блок внутри центрального процессора (CPU), который выполняет все математические вычисления (сложение, вычитание) и логические операции (сравнение, битовые сдвиги). Именно АЛУ преобразует программный код в физические электрические сигналы, меняя состояние транзисторов для получения результата. Без АЛУ процессор не смог бы обработать ни одну инструкцию программы.

Ниже подробно разобрано устройство блока, типы выполняемых операций и роль флагов состояния в управлении работой компьютера.

Оглавление

  1. Из чего состоит АЛУ
  2. Какие операции выполняет АЛУ
  3. Роль флагов состояния (Status Flags)
  4. Как происходит выполнение команды: пошаговый цикл
  5. [Эволюция: от скалярного АЛУ к векторному (SIMD)]#evolyutsiya-ot-skalyarnogo-alu-k-vektornomu-simd)
  6. Частые заблуждения об устройстве процессора
  7. FAQ: Вопросы об архитектуре CPU

Из чего состоит АЛУ

На физическом уровне АЛУ представляет собой комбинационную логическую схему. Она не хранит данные постоянно, а обрабатывает их «на лету». Ключевые компоненты устройства:

  • Сумматоры (Adders): Основа любой арифметики. Даже умножение в современных архитектурах часто сводится к серии быстрых сложений и сдвигов.
  • Логические вентили (Logic Gates): Базовые элементы (И, ИЛИ, НЕ, Исключающее ИЛИ), которые выполняют побитовые операции над данными.
  • Мультиплексоры: Переключатели, которые выбирают, какой именно результат (например, сумму или логическое И) отправить на выход в текущем такте.
  • Блоки сдвига (Shifters): Отвечают за смещение битов влево или вправо, что критично для быстрого умножения/деления на степени двойки и выравнивания данных.

Все эти элементы соединены шинами данных, по которым операнды поступают из регистров общего назначения (РОН) или кэш-памяти первого уровня (L1).

Какие операции выполняет АЛУ

Все инструкции процессора можно разделить на две большие группы, которые обрабатывает АЛУ.

1. Арифметические операции

  • Сложение (ADD) и вычитание (SUB): Базовые операции. Вычитание часто реализуется как сложение с дополнительным кодом (инверсия битов второго числа + 1).
  • Инкремент (INC) и декремент (DEC): Увеличение или уменьшение значения на единицу. Выполняются быстрее полного сложения, так как требуют меньше логических элементов.
  • Умножение и деление: В простых микроконтроллерах могут эмулироваться через циклы сдвигов и сложений. В современных десктопных CPU (x86, ARM) для этого существуют отдельные высокоскоростные блоки (умножители), которые тесно интегрированы с АЛУ, но технически могут быть выделены в отдельный исполнительный модуль.

2. Логические операции и сравнения

  • Побитовая логика: AND (И), OR (ИЛИ), XOR (исключающее ИЛИ), NOT (НЕ). Используются для маскирования битов, шифрования и обработки флагов.
  • Сдвиги:
    • Логические: заполняют освободившиеся разряды нулями.
    • Арифметические: при сдвиге вправо сохраняют знаковый бит (старший разряд), что важно для работы с отрицательными числами.
  • Сравнение (CMP): Фактически является вычитанием, при котором результат не записывается в регистр, а только обновляются флаги состояния. Это позволяет процессору принимать решения (например, «если A > B, то перейти к метке»).

Роль флагов состояния (Status Flags)

Результат работы АЛУ не ограничивается одним числом. После каждой операции обновляется специальный регистр флагов (EFLAGS/RFLAGS в x86, APSR в ARM). Эти флаги критически важны для ветвления программ.

ФлагНазваниеКогда устанавливается
ZFZero FlagРезультат операции равен нулю. Используется для проверки равенства (==).
CFCarry FlagПроизошел перенос из старшего разряда (для беззнаковых чисел). Сигнализирует о том, что результат не поместился в разрядную сетку.
SFSign FlagСтарший бит результата равен 1 (число отрицательное).
OFOverflow FlagПроизошло знаковое переполнение (результат слишком велик или мал для знакового представления).
PFParity FlagЧетность количества единичных битов в младшем байте результата (устаревший флаг, используется редко).

Почему это важно для программиста? Понимание флагов помогает писать оптимизированный код. Например, проверка if (a == 0) компилируется в инструкцию сравнения, которая ставит ZF, и условный переход, который смотрит на ZF. Лишние сравнения замедляют конвейер процессора.

Как происходит выполнение команды: пошаговый цикл

Работа АЛУ неразрывно связана с конвейером процессора. Рассмотрим упрощенный цикл выполнения инструкции ADD R1, R2 (сложить содержимое регистра 2 с регистром 1):

  1. Выборка (Fetch): Блок управления считывает код операции из памяти инструкций.
  2. Декодирование (Decode): Процессор понимает, что это команда сложения, и определяет, какие регистры (R1 и R2) являются источниками данных.
  3. Исполнение (Execute):
    • Данные из R1 и R2 подаются на входы АЛУ.
    • Блок управления активирует сумматор внутри АЛУ.
    • Через несколько наносекунд (задержка распространения сигнала) на выходе появляется сумма.
    • Одновременно обновляются флаги CF, ZF, SF, OF.
  4. Запись (Write Back): Полученный результат записывается обратно в регистр R1 (или в другой целевой регистр).

В современных суперскалярных архитектурах таких блоков АЛУ может быть несколько (например, 4–8 штук), что позволяет выполнять несколько независимых сложений одновременно за один такт.

Эволюция: от скалярного АЛУ к векторному (SIMD)

Традиционное АЛУ обрабатывает одну пару чисел за раз (скалярная обработка). Однако современные задачи (графика, машинное обучение, видеокодеки) требуют одновременной обработки массивов данных.

Для этого в процессоры встроены векторные АЛУ (поддержка инструкций SSE, AVX, NEON):

  • Они имеют увеличенную разрядность (128, 256 или 512 бит).
  • Позволяют выполнить одну операцию (например, сложение) сразу над 4, 8 или 16 парами чисел меньшей разрядности (float или int).
  • Это принципиально меняет подход к производительности: вместо ускорения одного вычисления увеличивается пропускная способность данных.

Частые заблуждения об устройстве процессора

  1. «АЛУ делает всё в процессоре». Нет. За выборку инструкций отвечает блок управления (Control Unit), за хранение данных — регистры и кэш, за работу с плавающей точкой высокой точности часто отвечают специализированные FPU (Floating Point Units), хотя в современных ядрах они тесно слиты с основным конвейером.
  2. «Тактовая частота определяет скорость АЛУ». Частота важна, но не менее важна латентность (задержка) самого АЛУ. Если схема АЛУ слишком сложная, сигнал идет дольше, и процессор вынужден снижать частоту или вставлять пустые такты ожидания (stalls).
  3. «Деление выполняется так же быстро, как сложение». Это ошибка. Деление — одна из самых «дорогих» операций. Оно может занимать от 10 до 50+ тактов процессора, тогда как сложение выполняется за 1 такт (или даже меньше благодаря суперскалярности).

FAQ: Вопросы об архитектуре CPU

В чем разница между АЛУ и сопроцессором? Исторически сопроцессор (например, математический 8087) был отдельным чипом для сложных вычислений. Сегодня функции сопроцессора интегрированы прямо в ядро CPU, и разделение стало условным (блоки FP/SIMD внутри того же кристалла).

Может ли АЛУ работать с дробными числами? Стандартное целочисленное АЛУ (Integer ALU) работает только с целыми числами. Для операций с плавающей точкой (дробями) используется отдельный конвейер FPU (Floating Point Unit), который имеет свою логику нормализации и округления, но принципы работы схожи.

Почему нельзя сделать одно огромное АЛУ для всех задач? Увеличение ширины АЛУ (разрядности) и набора функций приводит к экспоненциальному росту площади кристалла и тепловыделения. Инженеры ищут баланс: делают несколько узкоспециализированных быстрых блоков вместо одного универсального медленного гиганта.