Такт за тактом и спор двух архитектур
Проведите четыре инструкции через процессор, а потом разберите спор RISC и CISC по одному критерию за раз.
// такт
Процессор снова и снова повторяет один цикл: выбрать инструкцию, декодировать, исполнить, при необходимости сходить в память, записать результат. Жмите «такт» и следите за счётчиком команд и регистрами: изменившаяся ячейка подсвечивается.
- Выборка
- Декодирование
- Исполнение
- Память
- Запись
- 0x00 LOAD R2, [0x40]
- 0x04 ADD R1, R2, R3
- 0x08 CMP R1, R3
- 0x0C JMP 0x00
-
Такт 1. Выборка
Блок управления смотрит на счётчик команд, идёт по этому адресу и забирает инструкцию во внутренний регистр инструкций. Счётчик сразу сдвигается вперёд, на адрес следующей команды - обратите внимание, он уже 0x04, хотя выполняется ещё первая инструкция.
-
Такт 2. Декодирование
Блок управления разбирает инструкцию: что за операция, какие регистры задействованы, есть ли внутри готовое число. Сам он данные не обрабатывает - он дирижёр и выдаёт управляющие сигналы остальным блокам.
-
Такт 3. Исполнение
Для обращения к памяти сначала нужно вычислить адрес - этим занимается АЛУ. Само число ещё не получено: пока известно только, откуда его брать.
-
Такт 4. Обращение к памяти
Процессор читает число по вычисленному адресу. Доступ к оперативной памяти занимает десятки и сотни тактов против одного такта на регистр - именно поэтому данные сначала загружают в регистры, а считают уже там.
-
Такт 5. Запись результата
Прочитанное число ложится в регистр назначения. Первая инструкция закончена, процессор готов взяться за следующую - её адрес уже лежит в счётчике команд.
-
Такт 6. Выборка
Новая инструкция забрана по адресу 0x04, счётчик команд снова сдвинулся вперёд. Это самый обычный ход: пока не встретится переход, счётчик просто идёт по программе.
-
Такт 7. Декодирование
Разбор показывает: это сложение двух регистров с записью результата в третий. Никакого обращения к памяти инструкция не требует.
-
Такт 8. Исполнение
Арифметико-логическое устройство складывает содержимое двух регистров. Оба числа уже лежат в регистрах, поэтому операция укладывается в такт.
-
Такт 9. Запись результата
Этап обращения к памяти арифметическая инструкция пропускает целиком: ходить ей некуда, оба числа уже в регистрах. Поэтому сумма ложится в регистр назначения сразу, и вся инструкция укладывается в четыре такта против пяти у загрузки - вот она, та самая разница в один такт.
-
Такт 10. Следующая инструкция уже в пути
Сложение закончено за четыре такта, и процессор уже забирает следующую команду. В реальном процессоре конвейер глубже - от десяти до двадцати стадий, - и пока одна инструкция пишет результат, следующие уже декодируются и выбираются.
-
Такт 11. Выборка
Забрана инструкция сравнения. Счётчик команд опять сдвинулся вперёд.
-
Такт 12. Декодирование
Разбор показывает: сравнить два регистра и выставить флаги.
-
Такт 13. Исполнение
АЛУ сравнивает числа и выставляет регистр флагов: «результат ноль», «было переполнение», «результат отрицательный». Сами флаги ничего не решают - они только сообщают, что получилось. Записывать в регистр здесь нечего, результат этой команды и есть флаги.
-
Такт 14. Выборка
Забран переход. JMP - безусловный: он не смотрит на флаги вовсе, а просто велит продолжить с другого адреса. Условным был бы JG или JNZ - такие команды сначала читают регистр флагов, выставленный сравнением.
-
Такт 15. Исполнение перехода
В счётчик команд записывается адрес из инструкции, и следующая выборка пойдёт уже оттуда. Так на уровне железа работает любой переход: никакого понимания у процессора нет, есть новый адрес в счётчике. У условной команды перед этим добавляется проверка флага - вот тогда сравнение, сделанное на такте 13, и решает, прыгать или идти дальше.
Программа и значения регистров здесь условные: настоящая инструкция - это число, закодированное в двоичном виде, где первые несколько битов означают операцию, а остальные - номера регистров. Современные процессоры к тому же суперскалярные: за один такт они запускают сразу несколько инструкций и могут выполнять их не в том порядке, в котором те написаны, если результат от этого не меняется.
// спор архитектур
Процессоры делят на два лагеря по устройству набора команд. CISC - «пусть одна инструкция делает много», RISC - «пусть инструкций будет меньше, но каждая простая». Критерии идут по одному: сначала решите сами, кому он в плюс, потом откроется, что за этим стоит.
Выберите сторону - и критерий откроется вместе с разбором. Правильных ответов тут не всегда два: по некоторым критериям выигрыша нет ни у кого.
Главное про этот спор: на практике граница давно размылась. Современные x86-процессоры внутри аппаратно переводят свои сложные команды в простые RISC-подобные микрооперации и выполняют уже их. Снаружи CISC - ради совместимости со старыми программами, внутри фактически RISC. Архитектурный спор превратился в вопрос наследия.
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 и держится там, где важна совместимость.
Формулировки критериев взяты из таблицы в статье. «Кому в плюс» - оценка по этому критерию в отдельности, а не приговор архитектуре: у каждой стороны свои причины быть такой, какая она есть.
Интерактив разработан ANY.BY - ремонт компьютеров и ноутбуков в Барановичах. © 2008-2026. Источник: any.by/demo/put-odnoj-instrukcii