Микроко?д
?
программа
, реализующая набор
инструкций
процессора
. Так же, как одна инструкция
языка высокого уровня
преобразуется в серию
машинных инструкций
, в процессоре, использующем микрокод, каждая машинная инструкция реализуется в виде серии микроинструкций ? микропрограммы, микрокода.
На большинстве
компьютеров
, использующих микрокод, он присутствует не в основной
памяти
, а в специальной быстродействующей памяти (
англ.
control store
), как например, в наборе микросхем 588 серии с АЛУ КА588ВС2 и ПЗУ управляющей памяти КА588ВУ2. Эта память может допускать только чтение либо чтение-запись; в последнем случае микрокод может быть загружен из
постоянной памяти
в процессе запуска процессора. Возможность изменения микрокода позволяет исправлять найденные ошибки и добавлять реализацию новых инструкций. Микрокод также позволяет настроить микроархитектуру компьютера на
эмуляцию
другой (как правило, более сложной)
архитектуры
.
Микропрограммы состоят из серий микроинструкций, часто называемых
элементарными операциями
. Микроинструкции управляют процессором на самом низком уровне. Например, отдельная микроинструкция может содержать указание следующих действий:
- Подсоединить
регистр
1 ко входу A
АЛУ
;
- Подсоединить регистр 7 ко входу B АЛУ;
- Настроить АЛУ на выполнение операции сложения;
- Установить разряд переноса АЛУ в ноль;
- Сохранить результат операции в регистр 8;
- Обновить коды состояния из флагов АЛУ (≪Отрицательное≫, ≪Ноль≫, ≪Переполнение≫, ≪Перенос≫);
- Установить указатель микрокоманд на микроинструкцию номер nnn.
Для того, чтобы одна микроинструкция могла описывать весь этот набор, микроинструкции часто делаются довольно ≪широкими≫, например, длиной в 56
битов
или даже больше. Микроинструкции, или микрокоманды, в свою очередь, инициируют так называемые микрооперации. Микрооперации ? это и есть элементарные преобразования над данными; в качестве примеров можно привести следующие:
- скопировать операнд в регистр;
- установить флаг в 1;
- выставить операнд на шину;
- увеличить содержимое верхушки стека на 1, и т. д.
Подход микропрограммирования процессоров (микрокода) был предложен в 1953 году
Вилксом
и Стрингером
[1]
.
Первоначально микрокод был использован в качестве более простого способа разработки управляющего устройства процессора. Прежде набор инструкций задавался жёстко, каждая машинная инструкция (сложение, сдвиг, копирование) реализовывалась непосредственно в
схеме
. Это давало высокую скорость, но по мере того, как набор инструкций рос, всё сложнее становилось реализовывать в виде схемы и отлаживать инструкции всё возрастающей сложности. Микрокод смягчил эту проблему тем, что позволил инженерам-проектировщикам при реализации сложной инструкции заменить создание сложной схемы на написание микропрограммы. Более того, микрокод можно было с лёгкостью изменить на поздних этапах проектирования, схему же изменить намного сложнее. Таким образом, микрокод облегчил проектирование процессоров, что привело к усложнению
набора команд
.
Использование микропрограмм также смягчило проблему пропускной способности памяти. В
1970-х
рост скорости процессора намного обгонял рост скорости памяти. Некоторые способы ускорения, такие как многоуровневые
кэши
, несколько смягчали проблему, но не решали её. Использование микрокода здесь очень помогло, поскольку меньшее количество более сложных инструкций требовало меньшего обмена с памятью. Например, если вся операция над строкой символов выполняется одной машинной инструкцией, то во время её выполнения не требуется выбирать из памяти другие инструкции.
Список архитектур, использующих принцип микрокода, включал в себя
IBM
System/360
и
DEC
VAX
, набор команд которых был реализован с помощью сложных микропрограмм. Подход, при котором используются всё более сложные микрокодные инструкции, был позже назван
CISC
.
Движение по созданию
RISC
иногда рассматривают как противников микрокодируемых архитектур, но лишь ранние RISC-процессоры не использовали микрокод, а в более поздних он мог применяться
[1]
.
|
---|
Общие понятия
| |
---|
Типы кода
| |
---|
Стратегии компиляции
| |
---|