- •Глава 3
- •Регистр команды
- •Указатель стека
- •Языки микропрограммирования
- •Описание слов, шин, регистров
- •Описание памяти, слова памяти
- •Описание микроопераций
- •1 38 Глава 3. Функциональная организация фон-неймановской вм
- •Цикл команды
- •Этап формирования адреса следующей команды
- •Этап декодирования команды
- •Машинный цикл с косвенной адресацией
- •Машинный цикл с прерыванием
- •Диаграмма состояний цикла команды
- •Критерии эффективности вычислительных машин
- •Способы построения критериев эффективности
- •Учет приоритета частных показателей
- •Контрольные вопросы
Этап формирования адреса следующей команды
Для фон-неймановских машин характерно размещение соседних команд программы в смежных ячейках памяти. Если извлеченная команда не нарушает естествен-
140
ного порядка выполнения программы, для вычисления адреса следующей выполняемой команды достаточно увеличить содержимое счетчика команд на длину текущей команды, представленную количеством занимаемых кодом команды ячеек памяти. Для однословной команды это описывается микрооперацией: +1СК: СК •=СК+1
Длина команды, а также то, способна ли она изменить естественный порядок выполнения команд программы, выясняются в ходе ранее упоминавшегося предварительного декодирования. Если извлеченная команда способна изменить по следовательность выполнения программы (команда условного или безусловного перехода, вызова процедуры и т. п.), процесс формирования адреса следующей команды переносится на этап исполнения операции. В силу сказанного, в ряде BМ рассматриваемый этап цикла команды следует не за выборкой команды, а находится в конце цикла.
Этап декодирования команды
После выборки команды она должна быть декодирована, для чего ЦП расшифровывает находящийся в РК код команды. В результате декодирования выясняются следующие моменты:
*находится ли в РК полный код команды или требуется дозагрузка остальных слов команды;
* какие последующие действия нужны для выполнения данной команды;
* если команда использует операнды, то откуда они должны быть взяты (номер регистра или адрес ячейки основной памяти);
* если команда формирует результат, то куда этот результат должен быть направлен.
Ответы на два первых вопроса дает расшифровка кода операции, результатом которой может быть унитарный код, где каждый разряд соответствует одной из команд, что можно описать в виде УнитК := decod(Kon). На практике вместо унитарного кода могут встретиться самые разнообразные формы представления результатов декодирования, например адрес ячейки специальной управляющей памяти, где хранится первая микрокоманда микропрограммы для реализации указанной в команде операции.
Полное выяснение всех аспектов команды, помимо расшифровки кода операции, требует также анализа адресной части команды, включая поле способа адресации.
По результатам декодирования производится подготовка электронных схем ВМ к выполнению предписанных командой действий.
Этап вычисления адресов операндов
Этап имеет место, если в процессе декодирования команды выясняется, что команда использует операнды. Если операнды размещаются в основной памяти, осуществляется вычисление их исполнительных адресов, с учетом указанного в команде способа адресации. Так, в случае индексной адресации для получения исполни тельного адреса производится суммирование содержимого адресной части команды и содержимого индексного регистра.
141
Этап выборки операндов
Вычисленные на предыдущем этапе исполнительные адреса используются для считывания операндов из памяти и занесения в определенные регистры процессора. Например, в случае арифметической команды операнд после извлечения из памяти может быть загружен во входной регистр АЛУ. Однако чаще операнды предварительно заносятся в специальные вспомогательные регистры процессора, а их пересылка на вход АЛУ происходит на этапе исполнения операции.
Этап исполнения операции
На этом этапе реализуется указанная в команде операция. В силу различия сущности каждой из команд ВМ, содержание этого этапа также сугубо индивидуально. Этапы исполнения некоторых команд будут рассмотрены ниже на примере выполнения учебной программы для приведенной на рис. 3.1 гипотетической вычислительной машины.
Этап записи результата
Этап записи результата присутствует в цикле тех команд, которые предполагают занесение результата в регистр или ячейку основной памяти. Фактически его можно считать частью этапа исполнения, особенно для тех команд, которые помещают результат сразу в несколько мест.
Описание стандартных циклов команды для гипотетической машины
Для анализа содержания стандартных циклов команды обратимся к гипотетической ВМ (см. рис. 3.1), для которой составим программу сложения двух чисел и вывода суммы на устройство вывода, если эта сумма не равна 0.
Список необходимых команд приведен в табл. 3.1, а сама программа — в табл. 3.2. Предполагается, что команды программы будут размещаться в основной памяти, начиная с адреса 100, а операнды — с адреса 200. Для вывода результата назначим порт с номером 5.
Таблица 3.1. Команды гипотетической вычислительной машины
|
КОп |
АЧ |
Описание |
|
LDA |
Adr |
Загрузка в аккумулятор содержимого ячейки ОП с адресом Adr |
|
ADD |
Adr |
Сложение содержимого аккумулятора с содержимым ячейки ОП, имеющей адрес Adr. Результат остается в аккумуляторе |
|
BRZ |
Adr |
Переход к команде, хранящейся по адресу Adr, если результат предыдущей арифметической операции равен 0, иначе естественный порядок вычислений не нарушается |
|
out |
PortN |
Вывод содержимого аккумулятора на периферийное устройство, подключенное к порту с номером PortN |
|
hlt |
|
Останов вычислений |
142
Таблица 3.2. Программа к рассматриваемому примеру
|
Адрес порта |
Код операции |
Адрес ячейки или номер |
|
100 |
LDA |
200 |
|
101 |
ADD |
201 |
|
102 |
BRZ |
104 |
|
103 |
OUT |
5 |
|
104 |
HLT |
|
|
200 |
Операнд 1 |
|
|
201 |
Операнд 2 |
|
Перед запуском программы необходимо занести в СК адрес ячейки основной памяти, содержащей первую выполняемую команду программы, то есть 100.
Поскольку выборка и декодирование, а также формирование адреса следующей команды для всех команд выполняются по идентичной схеме, опишем их однократно, детализируя в дальнейшем лишь остальные этапы основного цикла команды. Кроме того, напомним, что все сигналы управления и управляющие коды формируются микропрограммным автоматом, поэтому в дальнейшем ссылки на МПА будут опущены.
Выборка команды. Сначала остановимся на содержании этапа выборки, идентичного для всех команд программы. На этом этапе происходит извлечение двоичного кода команды из ячейки основной памяти и его занесение в регистр команды:
СКРАП: РАП := СК, ЧтЗУ: РДП := ОГЩСК)];
РДПКОп, РДПРА: РК := РДП <РКОп := РДП(КОп), РА := РДП(АЧ)>.
В первом такте вырабатывается сигнал управления СКРАП, инициирующий пересылку содержимого счетчика команд в регистр адреса памяти. По сигналу ЧтЗУ содержимое ячейки, выбранной дешифратором адреса памяти (код команды), переписывается в регистр данных памяти. В следующем такте формируются сигналы РДПКОп и РДПРА, по которым содержимое РДП передается в РК, при этом поле РКОп заполняется кодом операции, а поле РА — адресной частью команды.
Декодирование команды. Сразу же после размещения кода операции в РК производится его декодирование, что можно описать микрооператором УнитК := decod(Kon). Прежде всего выясняется, может ли данная команда изменить последовательность вычислений, что влияет на дальнейшее выполнение цикла команды. Для всех команд, кроме команд управления (в нашем случае это BRZ), начинается этап формирования адреса следующей команды.
Формирование адреса следующей команды. В фон-неймановских ВМ команды программы располагаются в естественном порядке следования, в соседних ячеи ках памяти, и выполняются в том же порядке. Для формирования адреса следующей команды достаточно увеличить содержимое СК на единицу: +1СК: СК := СК +1
В рассматриваемой ВМ предусмотрена только прямая адресация, поэтому эта вычисления адресов операндов опускается.
В анализируемой программе этап выборки операндов предполагается только в командах загрузки аккумулятора и сложения. Для простоты изложения будем расценивать выборку операндов как часть этапа исполнения соответствующих операций. В свою очередь, этапы исполнения специфичны для каждой команды и рассматриваются применительно к каждой команде нашей программы.
Исполнение операции загрузки аккумулятора. Команда LDA 200 обеспечивает несение в аккумулятор содержимого ячейки ОП с адресом 200, то есть первого операнда, и реализуется следующим образом:
*МПА вырабатывает сигнал РАРАП, передающий содержимое РА (адресную часть команды) в РАП;
*по сигналу ЧтЗУ содержимое ячейки 200 заносится в РДП;
*по сигналу РДПАкк первый операнд из РДП помещается в аккумулятор.
На языке микроопераций это выглядит так:
РАРАП: РАП := РК(РА); ЧтЗУ: РДП := ОП[200];
РДПАкк: Акк := РДП.
Исполнение операции сложения. Команда ADD 201 обеспечивает суммирование текущего содержимого аккумулятора с содержимым ячейки 201 (вторым операндом). Результат сложения остается в аккумуляторе. Одновременно с этим в АЛУ формируются признаки результата:
* МПА вырабатывает сигнал РАРАП, и содержимое РА поступает в РАП;
* по сигналу ЧтЗУ содержимое ячейки 201 заносится в РДП;
* сигнал управления РДП РХ вызывает пересылку операнда 2 из РДП в регистр РХ АЛУ; одновременно с этим МПА вырабатывает сигнал АккРУ, по которому в PY переписывается содержимое аккумулятора, то есть хранящийся там первый операнд; операционный блок выполняет над данными, расположенными в РХ и PY, операцию, заданную в коде операции команды (в нашем случае — сложение);
* по сигналу ОПБАкк информация с выхода ОПБ загружается в аккумулятор.
Сказанное может быть описано в виде: РАРАП: РАП := РК(РА), ЧтЗУ: РДП := ОП[201];
РДПРХ: РХ := РДП, АккРУ: PY := Акк, ОПБ := РХ + PY;
ОПБАкк1: Акк:=ОПБ.
Исполнение операции условного перехода. Для изменения порядка выполнения программы используются команды безусловного (БП) и условного (УП) переходов, в нашем случае — команда BRZ 104. Адрес перехода хранится в адресном поле команды. Команда анализирует хранящийся в РПрз признак (флаг) нулевого результата, выработанный в АЛУ на предыдущем этапе вычислений, и формирует адрес следующей команды в зависимости от состояния этого признака. При нулевом значении флага (условие перехода не выполнено) естественный порядок выполнения программы не нарушается, и адрес следующей команды формируется обычным образом, путем увеличения содержимого СК на единицу (+1СК: СК := СК=1) При единичном значении флага (условие перехода выполнено) в СК зано-
144
сится содержимое РА. Напомним, что в РА находится адресная часть извлеченной из ОП команды перехода, то есть адрес точки перехода. Сказанное можно записать в виде БПУП: СК := РК(РА). Поскольку для команд перехода формирование адреса следующей команды по сути является и исполнением их операций, описании микрооперации для них обычно относят к этапу исполнения.
Исполнение операции вывода. Команда OUT 5 обеспечивает вывод содержимого аккумулятора на периферийное устройство (ПУ), подключенное к порту вывода с номером 5. МПА вырабатывает управляющий сигнал РАДВВ, по которому адресная часть команды — номер порта вывода — из РА поступает на вход дешифратора номера порта ввода/вывода. В следующем такте по сигналу Выв содержимое аккумулятора через выбранный дешифратором порт вывода передается на подключенное к этому порту ПУ:
РАДВВ: ДВВ := РК(РА); Выв: Порт вывода 5 := Акк.
Исполнение операции останова. Команда HLT приводит к завершению вычислений. При этом вырабатывается сигнал Ост, нужный для того, чтобы известить операционную систему о завершении текущей программы.
