Микрокод процессора что это
Кремневый беспредел (часть 2.)
Продолжим нашу печальную историю…
Первую часть цикла можно посмотреть здесь.
Продолжим нашу печальную историю…
Но сначала еще раз о АМТ.
Распространено мнение, что эта технология присутствует только в некоторых современных чипсетах Intel, и для ухода от проблем безопасности достаточно выбирать чипсеты без поддержки АМТ. На данном этапе это уже не верно, последний чипсет 7 серии во всех модификациях поддерживает данную технологию.
И еще, к сожалению, проблема безопасности АМТ у нас абсолютно не обсуждается в силу безграмотности специалистов ИБ, но на западе полно публикаций на эту тему, с очень жесткими выводами. Наберите в поисковике: «Intel AMT backdoor» и убедитесь сами.
Начну эту часть издалека. Был (дай бог пускай и сейчас здравствует) такой известный в компьютерных кругах человек Крис Касперски (Николай Лихачёв). Не путать, пожалуйста, с другим Касперским, хоть сферы деятельности этих людей раньше тесно пересекалась, совпадение фамилии одного и псевдонима другого чистая случайность. Крис Касперский был известным специалистом в области «белого» взлома, у него много публикаций на эту тему. Последняя публикация датируется серединой 2008 года и касается обнаруженных им уязвимостей в процессорах фирмы Интел.
Собственно как таковой публикации не было кроме безобидной презентации, ее можно посмотреть по ссылке здесь:
Но автор собирался сделать полный доклад и демонстрацию конкретного сплойта для обнаруженной им уязвимости в процессорах Intel на конференции Hack In The Box (HITB). Вот новость того времени: http://www.xakep.ru/post/44450/.
Доклад состоялся, но обнаруженная уязвимость и демонстрация ее эксплуатации так и не были представлены…, вместо этого докладчик оказался в Америке на ПМЖ уже осенью того же 2008года.
Что там конкретно нарыл Касперский так и не известно, но общее представление о реальных разборках в этой кремневой сфере можно получить из еще двух событий уже не такого далекого прошлого.
Между давними соперниками процессоростроения произошел крупный конфликт, приведший к «сливу» конфиденциальной информации о бекдорах в процессорах.
В середине прошлого года стала публичной информация о недокументированной возможности в аппаратуре процессоров Intel, только на этот раз бекдор сидел в процессорной команде и был гораздо серьезнее, почитать подробнее можно здесь: http://blog.xen.org/index.php/2012/06/13/the-intel-sysret-privilege-escalation/
Кстати, фирма Intel назвала это недокументированную возможность обтекаемой фразой «специфическая реализация» и не признала эту «особенность» бекдором или ошибкой реализации. Фирма так и поставляет процессора с этой, как она выражается; «специфической реализацией команды SYSRET».
Поэтому всем крупным разработчикам коммерческого софта пришлось пропатчить собственные продукты для обхода этой «специфической особенности выполнения команды». Но эту уязвимость команды SysRet можно эксплуатировать с уровня драйверов и приложений, и их может писать кто не попадя. Так что уязвимость, позволяющая повышать уровень привилегий, присутствует в процессорах Intel до настоящего момента.
Приведенной выше информации думаю достаточно для обоснования утверждения о тайных противостояниях производителей процессоров и аппаратных закладках в их продукции. В силу периферийности нашей страны и убогости профессиональных познаний «генералов» ИБ в этой сфере контролировать и участвовать в этих процессах в настоящий момент мы не в состоянии, хотя могли бы легкостью, будь на то хотя бы малейшее желание.
Как ни странно, у нас, « как в Греции,- все есть…» необходимый научный задел в автоматизированной верификации системы команд в стране имеется. Несомненным лидером в этой области является Институт Системного Программирования Российской Академии Наук (ИСП РАН). К сожалению, наработки в области автоматизированной верификации процессорных структур этого института вместо нашего собственного государства использует Корея, фирма Самсунг в частности.
Вот и получается, что имеем не ценим, а окончательно потеряв, даже не заплачем…
Но у этой темы есть и другая, хоть и легальная, но абсолютно непрозрачная сторона. Речь идет об механизмах обновления микрокода.
Страсти по микрокоду
Немного теории, чтобы ввести в курс дела. Процессора архитектуры х86 имеют смешанное программно-аппаратное управление. Любая команда для процессора х86 это набор микроопераций, простые команды это одна микрооперация, а сложные команды могут состоять из сотен, а для некоторых современных команд из тысяч микроопераций.
Простые команды (типа арифметических, логических) процессор выполняет на комбинаторной логике за одну микрооперацию, фактически это аппаратное выполнение команды.
Более сложные команды состоят из цепочек микроопераций с условными переходами, циклами, прерываниями. Так вот, эти цепочки микроопераций и являются микропрограммами выполнения команд процессора. Это конечно очень поверхностное и упрощенное объяснение механизма выполнения команд на современных процессорах х86, но думаю, суть понятна.
Все микропрограммы выполнения команд хранятся в самом процессоре, в специальной энергонезависимой памяти, и заливаются туда на этапе его изготовления. Но, как известно, у любого программиста на тысячу строк кода всегда найдется хотя бы одна ошибка, так что ошибки в микропрограммах бывают, и для оперативного их исправления используется механизм патчей.
Другими словами, содержимое памяти микропрограмм можно подправить уже на действующем оборудовании, для этого используются специальные информационные блоки (microcode update).
У Intel все написано в документации (Vol. 3A глава 9.11 MICROCODE UPDATE FACILITIES). Механизм обновления микрокода для процессоров AMD можно обнаружить на официальном сайте, в документации он не описан. Алгоритмы обновления микрокода у обоих производителей практически одинаковы, различия только в структуре патча. Так что разберем тему на основе официальной документации Intel, вот выдержка:
9.11 MICROCODE UPDATE FACILITIES
The Pentium 4, Intel Xeon, and P6 family processors have the capability to correct errata by loading an Intel-supplied data block into the processor. The data block is called a microcode update. This section describes the mechanisms the BIOS needs to provide in order to use this feature during system initialization. It also describes a specification that permits the incorporation of future updates into a system BIOS.
Intel considers the release of a microcode update for a silicon revision to be the equivalent of a processor stepping and completes a full-stepping level validation for releases of microcode updates.
A microcode update is used to correct errata in the processor. The BIOS, which has an update loader, is responsible for loading the update on processors during system initialization (Figure 9-7). There are two steps to this process: the first is to incorporate the necessary update data blocks into the BIOS; the second is to load update data blocks into the processor.

Механизм обновления микрокода прост, каждый раз после подачи питания или после выдачи сигнала сброса (Reset) необходимо загрузить патч во все процессорные ядра. Другими словами, текущие патчи не сохраняются в энергонезависимой памяти и их нужно каждый раз перезаписывать.
Структура патча состоит из трех частей, первая часть «Header» и последняя «extended signature» описана в документации полностью, но они не несут существенного значения.
Предполагается (так сказано в документации), что процедура обновления микрокода производится из БИОС, но нет никаких ограничений на ее проведение и во время последующей работы процессора. Другими словами, патчить микропрограмму процессора можно до бесконечности и во время работы операционной системы. Блокировок режима обновления микрокода в аппаратуре процессора не предусмотрено, проверки подлинности патча также нет. А вот это уже некорректно, и попахивает бекдором, скрытым под недокументированными возможностями
Переводя на общепонятный язык, имеется возможность в любой момент времени подправить алгоритм работы любой команды процессора, таким образом, чтобы она выполняла недокументированную функцию, нужно только знать структуру информационного блока, и тогда из любой процессорной команды можно будет сотворить совершенно иную, собственную, по своему вкусу и разумению.
Производители процессоров регулярно распространяют официальные обновления микрокода, но списка исправленных ошибок, либо добавленных оптимизаций нет. Есть только номер патча, его можно контролировать после заливки в процессор.
Идиотизм ситуации в том, что эти обновления должны попасть в процессор во время загрузки ОС, и, к примеру, Microsoft не сообщает официальной информации про номер патча который она грузит.
Вот пример такого файла обновления микрокода операционной системы Windows.
Другими словами, нет возможности контролировать текущую прошивку микрокода даже на уровне его номера. Также невозможно блокировать функцию обновления микрокода аппаратно, она всегда доступна из нулевого кольца привилегий.
Еще одной проблемой становится БИОС материнских плат, там всегда имеется патч микрокода для процессора, но кто гарантирует, что он корректен? Недобросовестное искажение его содержимого возможно и на этапе его создания в Интел и на этапе заливки в БИОС при производстве материнской платы.
Кроме этого патч может обновляться во время обновления БИОС материнской платы уже в процессе эксплуатации оборудования да и просто заменить его в БИОСе не проблема. Хоть какую то гарантию давала бы цифровая подпись на патче, но ее наличие не предусмотрено в структуре блока обновления микропрограммы, производители БИОС никакой внешней защиты на эти патчи также не накладывают.
Вот мы и подошли к теме современных БИОС, но об этом в следующей части этого печального цикла статей.
Микрокод
Микроко́д — программа, реализующая набор инструкций процессора. Так же, как одна инструкция языка высокого уровня преобразуется в серию машинных инструкций, в процессоре, использующем микрокод, каждая машинная инструкция реализуется в виде серии микроинструкций — микропрограммы, микрокода.
На большинстве компьютеров, использующих микрокод, он присутствует не в основной памяти, а в специальной быстродействующей памяти (англ. control store ). Эта память может допускать только чтение либо чтение-запись; в последнем случае микрокод может быть загружен из постоянной памяти в процессе запуска процессора. Возможность изменения микрокода позволяет исправлять найденные ошибки и добавлять реализацию новых инструкций. Микрокод также позволяет настроить микроархитектуру компьютера на эмуляцию другой (как правило, более сложной) архитектуры.
Микропрограммы состоят из серий микроинструкций. Микроинструкции управляют процессором на самом низком уровне. Например, отдельная микроинструкция может содержать указание следующих действий:
Для того чтобы одна микроинструкция могла описывать весь этот набор, микроинструкции часто делаются довольно «широкими», например, длиной в 56 бит или даже больше. Микроинструкции, или микро-команды — в свою очередь, инициируют так называемые микрооперации. Микрооперации — это и есть элементарные преобразования над данными; в качестве примеров можно привести следующие: скопировать операнд в регистр; установить флаг в 1; выставить операнд на шину; увеличить содержимое верхушки стэка на 1, и т. д.
Причины появления и использования
Первоначально микрокод был использован в качестве более лёгкого метода разработки контролирующего устройства компьютера. Прежде набор инструкций задавался жёстко, каждая машинная инструкция (сложение, сдвиг, копирование) реализовывалась непосредственно в схеме. Это давало высокую скорость, но по мере того как набор инструкций рос, всё сложнее становилось реализовать в виде схемы и отладить инструкции всё возрастающей сложности. Микрокод смягчил эту проблему тем, что позволил инженерам-проектировщикам при реализации сложной инструкции заменить создание сложной схемы на написание микропрограммы. Более того, микрокод можно было с лёгкостью изменить на поздних этапах проектирования, схему же изменить намного сложнее. Таким образом, микрокод облегчил проектирование процессоров, что привело к усложнению набора команд.
Использование микропрограмм также смягчило проблему пропускной способности памяти. В 1970-х рост скорости процессора намного обгонял рост скорости памяти. Некоторые способы ускорения, такие как многоуровневые кэши, несколько смягчали проблему, но не решали её. Использование микрокода здесь очень помогло, поскольку меньшее количество более сложных инструкций требовали меньшего обмена с памятью. Например, если вся операция над строкой символов выполняется одной машинной инструкцией, то во время её выполнения не требуется выбирать из памяти другие инструкции.
Список архитектур, использующих принцип микрокода, включал в себя IBM System/360 и DEC VAX, набор команд которых был реализован с помощью сложных микропрограмм. Подход, при котором используются всё более сложные микрокодные инструкции, был позже назван CISC.
СОДЕРЖАНИЕ
Обзор
Микропрограммы состоят из серии микрокоманд, которые управляют процессором на очень фундаментальном уровне аппаратных схем. Например, одна типичная горизонтальная микрокоманда может определять следующие операции:
Для одновременного управления всеми функциями процессора за один цикл микрокоманда часто имеет длину более 50 бит; например, 128 бит на 360/85 с функцией эмулятора. Микропрограммы тщательно спроектированы и оптимизированы для максимально быстрого выполнения, поскольку медленная микропрограмма может привести к медленным машинным инструкциям и снижению производительности связанных прикладных программ, использующих такие инструкции.
Обоснование
Микрокод упростил работу, позволяя определять большую часть поведения процессора и модели программирования с помощью подпрограмм микропрограмм, а не с помощью специальных схем. Даже на поздних этапах процесса проектирования микрокод можно было легко изменить, тогда как конструкцию зашитого процессора было очень сложно изменить. Таким образом, это значительно облегчило конструкцию ЦП.
Микропрограммирование все еще используется в современных конструкциях ЦП. В некоторых случаях после отладки микрокода в моделировании логические функции заменяются хранилищем управления. Логические функции часто быстрее и дешевле, чем эквивалентная память микропрограмм.
Преимущества
Микропрограммы процессора работают на более примитивной, совершенно иной и гораздо более ориентированной на оборудование архитектуре, чем инструкции сборки, видимые обычным программистам. В координации с оборудованием микрокод реализует архитектуру, видимую программисту. Базовое оборудование не обязательно должно иметь фиксированное отношение к видимой архитектуре. Это упрощает реализацию заданной архитектуры набора команд на широком спектре базовых аппаратных микроархитектур.
Аналогичный подход был использован Digital Equipment Corporation (DEC) в своем семействе компьютеров VAX. В результате разные процессоры VAX используют разные микроархитектуры, но видимая для программиста архитектура не меняется.
Микропрограммирование также снижает стоимость полевых изменений для исправления дефектов ( ошибок ) в процессоре; Ошибка часто может быть исправлена путем замены части микропрограммы, а не путем внесения изменений в аппаратную логику и проводку.
История
В 1947 году при разработке MIT Whirlwind была представлена концепция хранилища управления как способ упростить компьютерный дизайн и выйти за рамки специальных методов. Накопитель управления представляет собой диодную матрицу : двумерную решетку, в которой одно измерение принимает «импульсы времени управления» от внутренних часов ЦП, а другое подключается к управляющим сигналам на вентилях и других схемах. «Распределитель импульсов» берет импульсы, генерируемые тактовой частотой процессора, и разбивает их на восемь отдельных временных импульсов, каждый из которых активирует разные строки решетки. Когда ряд активирован, он активирует связанные с ним управляющие сигналы.
Примеры
Реализация
Каждая микрокоманда в микропрограмме предоставляет биты, которые управляют функциональными элементами, составляющими внутренний ЦП. Преимущество перед жестко зашитым ЦП состоит в том, что внутреннее управление ЦП становится специализированной формой компьютерной программы. Таким образом, микрокод превращает сложную задачу электронного проектирования (управление процессором) в менее сложную задачу программирования. Чтобы воспользоваться этим, ЦП разделен на несколько частей:
Горизонтальный микрокод
«Горизонтальный микрокод имеет несколько дискретных микроопераций, которые объединены в одной микрокоманде для одновременной работы». Горизонтальный микрокод обычно содержится в довольно широком хранилище элементов управления; нередко каждое слово состоит из 108 бит и более. На каждом такте тактового генератора секвенсора слово микрокода считывается, декодируется и используется для управления функциональными элементами, составляющими ЦП.
В типичной реализации горизонтальное слово микропрограммы содержит довольно четко определенные группы битов. Например, одна простая компоновка может быть такой:
| Зарегистрируйте источник A | Зарегистрируйте источник B | Регистр назначения | Работа арифметико-логического устройства | Тип прыжка | Адрес перехода |
Для этого типа микромашины для реализации инструкции JUMP с адресом, следующим за кодом операции, микрокод может потребовать два такта часов. Инженер, разрабатывающий его, напишет исходный код микроассемблера примерно так:
Для каждого тика обычно обнаруживается, что используются только некоторые части ЦП, а остальные группы битов в микрокоманде не выполняются. При тщательном проектировании аппаратного обеспечения и микрокода это свойство можно использовать для распараллеливания операций, которые используют разные области ЦП; например, в приведенном выше случае ALU не требуется во время первого тика, поэтому его потенциально можно использовать для выполнения более ранней арифметической инструкции.
Вертикальный микрокод
В вертикальном микрокоде каждая микрокоманда существенно кодируется, то есть битовые поля обычно проходят через промежуточную комбинаторную логику, которая, в свою очередь, генерирует фактические сигналы управления и последовательности для внутренних элементов ЦП (ALU, регистры и т. Д.). Это контрастирует с горизонтальным микрокодом, в котором сами битовые поля либо непосредственно создают сигналы управления и последовательности, либо кодируются только минимально. Следовательно, вертикальный микрокод требует меньшей длины инструкций и меньшего объема памяти, но требует больше времени для декодирования, что приводит к более медленным тактовым частотам процессора.
Другая форма вертикального микрокода имеет два поля:
| Выбор поля | Значение поля |
По мере того, как транзисторы становились дешевле, горизонтальный микрокод стал доминировать в конструкции процессоров, использующих микрокод, а вертикальный микрокод использовался реже.
Записываемое хранилище элементов управления
Некоторые коммерческие машины, например IBM 360/85, имеют как хранилище только для чтения, так и хранилище управления микрокода с возможностью записи.
WCS предлагает несколько преимуществ, включая простоту внесения исправлений в микропрограмму и, для определенных поколений оборудования, более быстрый доступ, чем может обеспечить ПЗУ. Программируемая пользователем система WCS позволяет пользователю оптимизировать машину для конкретных целей.
Сравнение с VLIW и RISC
Тенденция проектирования процессоров с сильным микрокодированием со сложными инструкциями началась в начале 1960-х годов и продолжалась примерно до середины 1980-х годов. С этого момента философия дизайна RISC стала более заметной.
При разработке нового процессора проводное управление RISC имеет следующие преимущества перед микрокодированными CISC:
Есть и контрапункты:
Многие процессоры RISC и VLIW предназначены для выполнения каждой инструкции (пока она находится в кэше) за один цикл. Это очень похоже на то, как процессоры с микрокодом выполняют одну микрокоманду за цикл. У процессоров VLIW есть инструкции, которые ведут себя аналогично очень широкому горизонтальному микрокоду, хотя обычно без такого детального контроля над оборудованием, который обеспечивается микрокодом. Инструкции RISC иногда похожи на узкий вертикальный микрокод.
Микрооперации
СОДЕРЖАНИЕ
Обзор
Микропрограммы состоят из серии микрокоманд, которые управляют процессором на очень фундаментальном уровне аппаратных схем. Например, одна типичная горизонтальная микрокоманда может определять следующие операции:
Для одновременного управления всеми функциями процессора за один цикл микрокоманда часто имеет длину более 50 бит; например, 128 бит на 360/85 с функцией эмулятора. Микропрограммы тщательно спроектированы и оптимизированы для максимально быстрого выполнения, поскольку медленная микропрограмма может привести к медленным машинным инструкциям и снижению производительности связанных прикладных программ, использующих такие инструкции.
Обоснование
Микрокод упростил работу, позволяя определять большую часть поведения процессора и модели программирования с помощью подпрограмм микропрограмм, а не с помощью специальных схем. Даже на поздних этапах процесса проектирования микрокод можно было легко изменить, тогда как конструкцию зашитого процессора было очень сложно изменить. Таким образом, это значительно облегчило конструкцию ЦП.
Микропрограммирование все еще используется в современных конструкциях ЦП. В некоторых случаях после отладки микрокода в моделировании логические функции заменяются хранилищем управления. Логические функции часто быстрее и дешевле, чем эквивалентная память микропрограмм.
Преимущества
Микропрограммы процессора работают на более примитивной, совершенно иной и гораздо более ориентированной на оборудование архитектуре, чем инструкции сборки, видимые обычным программистам. В координации с оборудованием микрокод реализует архитектуру, видимую программисту. Базовое оборудование не обязательно должно иметь фиксированное отношение к видимой архитектуре. Это упрощает реализацию заданной архитектуры набора команд на широком спектре базовых аппаратных микроархитектур.
Аналогичный подход был использован Digital Equipment Corporation (DEC) в своем семействе компьютеров VAX. В результате разные процессоры VAX используют разные микроархитектуры, но видимая для программиста архитектура не меняется.
Микропрограммирование также снижает стоимость полевых изменений для исправления дефектов ( ошибок ) в процессоре; Ошибка часто может быть исправлена путем замены части микропрограммы, а не путем внесения изменений в аппаратную логику и проводку.
История
В 1947 году при разработке MIT Whirlwind была представлена концепция хранилища управления как способ упростить компьютерный дизайн и выйти за рамки специальных методов. Накопитель управления представляет собой диодную матрицу : двумерную решетку, в которой одно измерение принимает «импульсы времени управления» от внутренних часов ЦП, а другое подключается к управляющим сигналам на вентилях и других схемах. «Распределитель импульсов» берет импульсы, генерируемые тактовой частотой процессора, и разбивает их на восемь отдельных временных импульсов, каждый из которых активирует разные строки решетки. Когда ряд активирован, он активирует связанные с ним управляющие сигналы.
Примеры
Реализация
Каждая микрокоманда в микропрограмме предоставляет биты, которые управляют функциональными элементами, составляющими внутренний ЦП. Преимущество перед жестко зашитым ЦП состоит в том, что внутреннее управление ЦП становится специализированной формой компьютерной программы. Таким образом, микрокод превращает сложную задачу электронного проектирования (управление процессором) в менее сложную задачу программирования. Чтобы воспользоваться этим, ЦП разделен на несколько частей:
Горизонтальный микрокод
«Горизонтальный микрокод имеет несколько дискретных микроопераций, которые объединены в одной микрокоманде для одновременной работы». Горизонтальный микрокод обычно содержится в довольно широком хранилище элементов управления; нередко каждое слово состоит из 108 бит и более. На каждом такте тактового генератора секвенсора слово микрокода считывается, декодируется и используется для управления функциональными элементами, составляющими ЦП.
В типичной реализации горизонтальное слово микропрограммы содержит довольно четко определенные группы битов. Например, одна простая компоновка может быть такой:
| Зарегистрируйте источник A | Зарегистрируйте источник B | Регистр назначения | Работа арифметико-логического устройства | Тип прыжка | Адрес перехода |
Для этого типа микромашины для реализации инструкции JUMP с адресом, следующим за кодом операции, микрокод может потребовать два такта часов. Инженер, разрабатывающий его, напишет исходный код микроассемблера примерно так:
Для каждого тика обычно обнаруживается, что используются только некоторые части ЦП, а остальные группы битов в микрокоманде не выполняются. При тщательном проектировании аппаратного обеспечения и микрокода это свойство можно использовать для распараллеливания операций, которые используют разные области ЦП; например, в приведенном выше случае ALU не требуется во время первого тика, поэтому его потенциально можно использовать для выполнения более ранней арифметической инструкции.
Вертикальный микрокод
В вертикальном микрокоде каждая микрокоманда существенно кодируется, то есть битовые поля обычно проходят через промежуточную комбинаторную логику, которая, в свою очередь, генерирует фактические сигналы управления и последовательности для внутренних элементов ЦП (ALU, регистры и т. Д.). Это контрастирует с горизонтальным микрокодом, в котором сами битовые поля либо непосредственно создают сигналы управления и последовательности, либо кодируются только минимально. Следовательно, вертикальный микрокод требует меньшей длины инструкций и меньшего объема памяти, но требует больше времени для декодирования, что приводит к более медленным тактовым частотам процессора.
Другая форма вертикального микрокода имеет два поля:
| Выбор поля | Значение поля |
По мере того, как транзисторы становились дешевле, горизонтальный микрокод стал доминировать в конструкции процессоров, использующих микрокод, а вертикальный микрокод использовался реже.
Записываемое хранилище элементов управления
Некоторые коммерческие машины, например IBM 360/85, имеют как хранилище только для чтения, так и хранилище управления микрокода с возможностью записи.
WCS предлагает несколько преимуществ, включая простоту внесения исправлений в микропрограмму и, для определенных поколений оборудования, более быстрый доступ, чем может обеспечить ПЗУ. Программируемая пользователем система WCS позволяет пользователю оптимизировать машину для конкретных целей.
Сравнение с VLIW и RISC
Тенденция проектирования процессоров с сильным микрокодированием со сложными инструкциями началась в начале 1960-х годов и продолжалась примерно до середины 1980-х годов. С этого момента философия дизайна RISC стала более заметной.
При разработке нового процессора проводное управление RISC имеет следующие преимущества перед микрокодированными CISC:
Есть и контрапункты:
Многие процессоры RISC и VLIW предназначены для выполнения каждой инструкции (пока она находится в кэше) за один цикл. Это очень похоже на то, как процессоры с микрокодом выполняют одну микрокоманду за цикл. У процессоров VLIW есть инструкции, которые ведут себя аналогично очень широкому горизонтальному микрокоду, хотя обычно без такого детального контроля над оборудованием, который обеспечивается микрокодом. Инструкции RISC иногда похожи на узкий вертикальный микрокод.


