Перейти к содержимому
1.3. Процессор: сердце или мозг?

Такт за тактом и спор двух архитектур

Проведите четыре инструкции через процессор, а потом разберите спор RISC и CISC по одному критерию за раз.

// такт

Процессор снова и снова повторяет один цикл: выбрать инструкцию, декодировать, исполнить, при необходимости сходить в память, записать результат. Жмите «такт» и следите за счётчиком команд и регистрами: изменившаяся ячейка подсвечивается.

1 такт из пятнадцати
Счётчик команд 0x04
Регистр инструкций LOAD R2, [0x40]
R1 0
R2 0
R3 5
Флаги -
  1. Выборка
  2. Декодирование
  3. Исполнение
  4. Память
  5. Запись
  1. 0x00 LOAD R2, [0x40]
  2. 0x04 ADD R1, R2, R3
  3. 0x08 CMP R1, R3
  4. 0x0C JMP 0x00
  1. Такт 1. Выборка

    Блок управления смотрит на счётчик команд, идёт по этому адресу и забирает инструкцию во внутренний регистр инструкций. Счётчик сразу сдвигается вперёд, на адрес следующей команды - обратите внимание, он уже 0x04, хотя выполняется ещё первая инструкция.

  2. Такт 2. Декодирование

    Блок управления разбирает инструкцию: что за операция, какие регистры задействованы, есть ли внутри готовое число. Сам он данные не обрабатывает - он дирижёр и выдаёт управляющие сигналы остальным блокам.

  3. Такт 3. Исполнение

    Для обращения к памяти сначала нужно вычислить адрес - этим занимается АЛУ. Само число ещё не получено: пока известно только, откуда его брать.

  4. Такт 4. Обращение к памяти

    Процессор читает число по вычисленному адресу. Доступ к оперативной памяти занимает десятки и сотни тактов против одного такта на регистр - именно поэтому данные сначала загружают в регистры, а считают уже там.

  5. Такт 5. Запись результата

    Прочитанное число ложится в регистр назначения. Первая инструкция закончена, процессор готов взяться за следующую - её адрес уже лежит в счётчике команд.

  6. Такт 6. Выборка

    Новая инструкция забрана по адресу 0x04, счётчик команд снова сдвинулся вперёд. Это самый обычный ход: пока не встретится переход, счётчик просто идёт по программе.

  7. Такт 7. Декодирование

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

  8. Такт 8. Исполнение

    Арифметико-логическое устройство складывает содержимое двух регистров. Оба числа уже лежат в регистрах, поэтому операция укладывается в такт.

  9. Такт 9. Запись результата

    Этап обращения к памяти арифметическая инструкция пропускает целиком: ходить ей некуда, оба числа уже в регистрах. Поэтому сумма ложится в регистр назначения сразу, и вся инструкция укладывается в четыре такта против пяти у загрузки - вот она, та самая разница в один такт.

  10. Такт 10. Следующая инструкция уже в пути

    Сложение закончено за четыре такта, и процессор уже забирает следующую команду. В реальном процессоре конвейер глубже - от десяти до двадцати стадий, - и пока одна инструкция пишет результат, следующие уже декодируются и выбираются.

  11. Такт 11. Выборка

    Забрана инструкция сравнения. Счётчик команд опять сдвинулся вперёд.

  12. Такт 12. Декодирование

    Разбор показывает: сравнить два регистра и выставить флаги.

  13. Такт 13. Исполнение

    АЛУ сравнивает числа и выставляет регистр флагов: «результат ноль», «было переполнение», «результат отрицательный». Сами флаги ничего не решают - они только сообщают, что получилось. Записывать в регистр здесь нечего, результат этой команды и есть флаги.

  14. Такт 14. Выборка

    Забран переход. JMP - безусловный: он не смотрит на флаги вовсе, а просто велит продолжить с другого адреса. Условным был бы JG или JNZ - такие команды сначала читают регистр флагов, выставленный сравнением.

  15. Такт 15. Исполнение перехода

    В счётчик команд записывается адрес из инструкции, и следующая выборка пойдёт уже оттуда. Так на уровне железа работает любой переход: никакого понимания у процессора нет, есть новый адрес в счётчике. У условной команды перед этим добавляется проверка флага - вот тогда сравнение, сделанное на такте 13, и решает, прыгать или идти дальше.

Программа и значения регистров здесь условные: настоящая инструкция - это число, закодированное в двоичном виде, где первые несколько битов означают операцию, а остальные - номера регистров. Современные процессоры к тому же суперскалярные: за один такт они запускают сразу несколько инструкций и могут выполнять их не в том порядке, в котором те написаны, если результат от этого не меняется.

// спор архитектур

Процессоры делят на два лагеря по устройству набора команд. CISC - «пусть одна инструкция делает много», RISC - «пусть инструкций будет меньше, но каждая простая». Критерии идут по одному: сначала решите сами, кому он в плюс, потом откроется, что за этим стоит.

CISC x86: Intel, AMD
RISC ARM, RISC-V
Критерий Количество инструкций
Кому это в плюс?
CISC Много, часть используется редко
RISC Меньше, но все активно используются

Выберите сторону - и критерий откроется вместе с разбором. Правильных ответов тут не всегда два: по некоторым критериям выигрыша нет ни у кого.

0 / 5 угадано
Количество инструкций

CISC: Много, часть используется редко

RISC: Меньше, но все активно используются

Чем меньше команд, тем проще аппаратура: меньше декодер, меньше проверок, меньше площади на кристалле. Редко используемые инструкции CISC всё равно занимают транзисторы и всё равно должны работать правильно.

Длина инструкции

CISC: Переменная: от 1 до 15 байт у x86

RISC: Фиксированная, обычно 4 байта

Инструкцию фиксированной длины процессор находит сразу: следующая всегда через четыре байта. С переменной длиной нужно сначала разобрать текущую, чтобы понять, где начинается следующая, - а это мешает выбирать несколько команд за такт.

Обращение к памяти

CISC: Прямо из большинства инструкций

RISC: Только через отдельные команды load и store

Здесь у каждого своё: у CISC одна команда может сама сходить в память, сложить и записать обратно - короче код. У RISC поход в память отделён от вычислений - ровнее такты и проще конвейер. В демо выше это видно: инструкции с памятью проходят лишний этап, арифметические его пропускают.

Потребление энергии

CISC: Выше

RISC: Ниже - преимущество для мобильных

Простая аппаратура и одинаковые такты дают меньше переключений на ту же работу. Именно поэтому в смартфонах и планшетах стоит ARM, а не x86.

Где применяется

CISC: Настольные ПК и ноутбуки с Windows

RISC: Смартфоны, планшеты, серверы

Это не про эффективность, а про наследие. Десятилетия программ, написанных под x86: системы, драйверы, игры, корпоративный софт. Перейти на ARM означало бы всё это перекомпилировать или эмулировать - дорого и долго. Поэтому x86 и держится там, где важна совместимость.

Формулировки критериев взяты из таблицы в статье. «Кому в плюс» - оценка по этому критерию в отдельности, а не приговор архитектуре: у каждой стороны свои причины быть такой, какая она есть.

Интерактив разработан - ремонт компьютеров и ноутбуков в Барановичах. © 2008-2026. Источник: any.by/demo/put-odnoj-instrukcii