1. Введение: зачем изучать системы команд
Система команд (Instruction Set Architecture, ISA) — «язык», на котором общается программист (или компилятор) с процессором. От её архитектуры зависят:
- производительность;
- энергоэффективность;
- сложность аппаратной реализации;
- компактность кода;
- удобство программирования.
Два фундаментальных подхода — CISC и RISC — предлагают разные компромиссы. Рассмотрим их принципы, отличия и влияние на микроконтроллеры.
2. CISC: сложная система команд
2.1. Основные принципы
- Complex Instruction Set Computer — «компьютер со сложным набором команд».
- Цель: сократить число инструкций для выполнения задачи за счёт мощных, многооперационных команд.
- Характерные черты:
- команды разной длины (от 1 до 15+ байт);
- большое число команд (сотни);
- сложные операции «в одной команде» (например,
MULс адресацией памяти); - много режимов адресации;
- явная поддержка высокоуровневых конструкций (циклы, строки).
2.2. Примеры CISC‑архитектур
- x86 (Intel, AMD) — классический CISC, эволюционировал в гибридную модель;
- Motorola 68k — использовалась в старых ПК и встраиваемых системах;
- некоторые микроконтроллеры 8‑битных семейств (например, старые Intel MCS‑51).
2.3. Преимущества CISC
- Компактность кода: сложные операции кодируются одной командой → меньше объём прошивки.
- Удобство ассемблерного программирования: команды ближе к операциям высокоуровневых языков.
- Обратная совместимость: длинные истории развития (как x86) сохраняют поддержку старого кода.
2.4. Недостатки CISC
- Сложность декодирования: переменная длина команд требует сложного конвейера.
- Неравномерное время выполнения: одни команды — за 1 такт, другие — за десятки.
- Высокие требования к аппаратуре: много логики для декодирования и исполнения.
- Трудности конвейеризации: из‑за переменной длины и сложности команд.
- Энергопотребление: больше транзисторов → выше токи утечки и динамическое потребление.
2.5. Типичные CISC‑команды (на примере x86)
MOV dest, src— пересылка с разнообразными режимами адресации.MUL reg, mem— умножение регистра на значение из памяти.LOOP label— цикл со счётчиком в регистре.REP MOVS— повторённая пересылка блока памяти.
3. RISC: упрощённая система команд
3.1. Основные принципы
- Reduced Instruction Set Computer — «компьютер с сокращённым набором команд».
- Цель: ускорить выполнение типовых операций за счёт простоты и регулярности команд.
- Характерные черты:
- фиксированная длина команд (обычно 32 бита);
- небольшое число команд (десятки);
- операции «регистр‑регистр» (данные загружаются/сохраняются отдельно);
- ограниченное число режимов адресации (чаще — базовая + смещение);
- все операции выполняются за 1 такт (в идеальном случае);
- большое число регистров (32 и более).
3.2. Примеры RISC‑архитектур
- ARM (Cortex‑M, Cortex‑A);
- MIPS;
- RISC‑V (открытый стандарт);
- AVR (упрощённый RISC);
- PIC (в 8/16‑битных версиях — близкий к RISC).
3.3. Преимущества RISC
- Простота декодирования: фиксированная длина → быстрый конвейер.
- Предсказуемое время выполнения: большинство команд — за 1 такт.
- Эффективность конвейеризации: лёгкая организация 3–5‑ступенчатого конвейера.
- Низкое энергопотребление: меньше логики, проще управление тактованием.
- Масштабируемость: легко добавлять расширения (FPU, DSP).
3.4. Недостатки RISC
- Раздувание кода: простые операции требуют нескольких команд → больше объём прошивки.
- Необходимость оптимизирующего компилятора: человек редко пишет эффективный RISC‑ассемблер вручную.
- Ограниченная гибкость: нет «волшебных» команд для сложных операций.
3.5. Типичные RISC‑команды (на примере ARM)
ADD R1, R2, R3— R1 = R2 + R3.LDR R1, [R2, #4]— загрузить в R1 значение из памяти по адресу R2 + 4.STR R1, [R2, #0]— сохранить R1 в память по адресу R2.B label— безусловный переход.BL function— вызов подпрограммы (с сохранением адреса возврата в регистре).
4. Ключевые различия CISC и RISC
| Параметр | CISC | RISC |
|---|---|---|
| Длина команды | Переменная (1–15 байт) | Фиксированная (обычно 32 бита) |
| Число команд | Сотни | Десятки |
| Режимы адресации | Много (сложные) | Мало (простые) |
| Операции с памятью | Прямые (в команде) | Через LOAD/STORE |
| Число регистров | Мало (8–16) | Много (32+) |
| Время выполнения | Непредсказуемое (1–100 тактов) | Предсказуемое (1 такт для базовых) |
| Конвейеризация | Трудная | Лёгкая |
| Энергопотребление | Выше | Ниже |
| Компактность кода | Высокая | Низкая |
| Сложность декодера | Высокая | Низкая |
| Типичные применения | ПК, серверы (x86), старые МК | МК, мобильные устройства, IoT |
5. Эволюция: где граница между CISC и RISC?
На практике чистые CISC/RISC встречаются редко. Современные архитектуры гибридны:
- x86 (CISC):
- снаружи — сложные команды переменной длины;
- внутри — декодирование в микрооперации (RISC‑подобные), исполнение на RISC‑ядре.
- ARM (RISC):
- поддерживает расширения (Thumb — уплотнённый код, NEON — SIMD, TrustZone — безопасность).
- RISC‑V:
- базовая RISC‑модель + модульные расширения (умножение, FPU, атомики).
6. Влияние на микроконтроллеры
6.1. CISC в МК
- Где встречается: 8‑битные МК с legacy‑поддержкой (например, MCS‑51).
- Плюсы для МК:
- малый объём Flash (важно для дешёвых МК);
- простота программирования на ассемблере.
- Минусы для МК:
- низкое быстродействие на сложных операциях;
- высокое энергопотребление;
- сложность конвейеризации → задержки в реальном времени.
6.2. RISC в МК
- Где встречается: почти все современные 16/32‑битные МК (ARM Cortex‑M, RISC‑V, PIC24, dsPIC).
- Плюсы для МК:
- высокая производительность на такт;
- предсказуемое время реакции (критично для реального времени);
- низкое энергопотребление в спящих режимах;
- поддержка DSP/FPU для обработки сигналов.
- Минусы для МК:
- больший объём кода → нужен Flash побольше;
- зависимость от оптимизирующего компилятора.
7. Практические примеры в МК
7.1. AVR (ATmega328P) — упрощённый RISC
- 32 регистра общего назначения;
- фиксированная длина команд (16/32 бита);
- операции «регистр‑регистр»;
LOAD/STOREдля памяти;- 1 такт на большинство команд.
7.2. PIC16F877 — близкий к RISC
- 8 регистров + W‑регистр;
- простая система команд;
- однооперандные и двухоперандные команды;
- ограниченная адресация.
7.3. STM32F103 (Cortex‑M3) — чистый RISC
- 32 регистра;
- 32‑битные команды (Thumb‑2 — смешанные 16/32 бита для компактности);
- конвейер 3 ступени;
- все базовые операции за 1 такт;
- аппаратный умножитель.
7.4. ESP32 (Xtensa LX6) — RISC‑подобная
- 16 регистров



