Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура средств ВТ / Литература / Цилькер / Организация ЭВМ и систем / Глава 3.Функциональная организация фон-неймановская ВМdoc.doc
Скачиваний:
127
Добавлен:
01.06.2015
Размер:
6.15 Mб
Скачать

Машинный цикл с косвенной адресацией

Многие команды предполагают чтение операндов из памяти или запись в память. В простейшем случае в адресном поле таких команд явно указывается исполни­тельный адрес соответствующей ячейки ОП. Однако часто используется и другой способ указания адреса, когда адрес операнда хранится в какой-то ячейке памяти, а в команде указывается адрес ячейки, содержащей адрес операнда. Как уже отме­чалось ранее, подобный прием называется косвенной адресацией. Чтобы прочитать или записать операнд, сначала нужно извлечь из памяти его адрес и только после этого произвести нужное действие (чтение или запись операнда), иными словами, требуется выполнить два обращения к памяти. Это, естественно, отражается и на цикле команды, в котором появляется косвенная адресация. Этап косвенной адре­сации можно отнести к этапу вычисления адресов операндов, поскольку его сущ­ность сводится к определению исполнительного адреса операнда.

Применительно к вычислительной машине, приведенной на рис. 3.1, при кос­венной адресации имеют место следующие микрооперации:

РАРАП: РАП := РК(РА), ЧтЗУ: РДП := ОП[(РА)];

РДПРА:РК(РА):=РДП.

Иными словами, содержимое адресного поля команды в регистре команд ис­пользуется для обращения к ячейке ОП, в которой хранится адрес операнда, после чего извлеченный из памяти исполнительный адрес операнда помещается в адрес ное поле регистра команды на место косвенного адреса. Дальнейшее выполнейИ команды протекает стандартным образом.

Машинный цикл с прерыванием

Практически во всех ВМ предусмотрены средства, благодаря которым модули ввода/вывода (и не только они) могут прервать выполнение текущей программы для внеочередного выполнения другой программы, с последующим возвратом к прерванной.

Первоначально прерывания были введены для повышения эффективности

ислений при работе с медленными ПУ. Положим, что процессор пересылает данные на принтер, используя стандартный цикл команды. После каждой операции записи ЦП будет вынужден сделать паузу, в ожидании подтверждения от принтера об обработке символа. Длительность этой паузы может составлять сотни и тысячи циклов команды. Ясно, что такое использование ЦП очень неэффективно. В случае прерываний, пока протекает операция ввода/вывода, ЦП способен вы­полнять другие команды.

В упрощенном виде процедуру прерывания можно описать следующим обра­зом Объект, требующий внеочередного обслуживания, выставляет на соответству­ющем входе ЦП сигнал запроса прерывания. Перед переходом к очередному циклу команды процессор проверяет этот вход на наличие запроса. Обнаружив запрос, ЦП запоминает информацию, необходимую для продолжения нормальной работы после возврата из прерывания, и переходит к выполнению программы обработки прерывания (обработчика прерывания). По завершении обработки прерывания ЦП восстанавливает состояние прерванного процесса, используя запомненную инфор­мацию, и продолжает вычисления. Описанный процесс иллюстрирует рис. 3.5.

В терминах цикла команды сказанное выглядит так. Для учета прерываний к циклу команды добавляется этап прерывания, в ходе которого процессор прове­ряет, не поступил ли запрос прерывания. Если запроса нет, ЦП переходит к этапу выборки следующей команды программы. При наличии запроса процессор:

1. Приостанавливает выполнение текущей программы и запоминает содержимое всех регистров, которые будут использоваться программой обработки преры­вания. Это называется сохранением контекста программы. В первую очередь необходимо сохранить содержимое счетчика команд, аккумулятора и регистра признаков. Контекст программы обычно сохраняется в стеке.

2. Заносит в счетчик команд начальный адрес программы обработки преры­вания.

Рис. 3.5. Передача управления при прерываниях

146 Глава 3. Функциональная организация фон-неймановской ВМ

На языке микроопераций это можно записать следующим образом:

СКРДП: РДП := СК; -1УС: УС := УС - 1 <3апись в стек содержимого СК>;

УСРАП: РАП := УС; ЗпЗУ, СКРДП: ОП[(УС)] := РДП := СК;

АккРДП: РДП := Акк; -1УС: УС := УС - 1 <3апись в стек содержимого Акк>;

УСРАП: РАП := УС; ЗпЗУ, АккРДП: ОП[(УС)] := РДП := Акк;

РПрзРДП: РДП := РПрз; -1УС: УС := УС - 1 <3апись в стек содержимого РПрз>;

УСРАП: РАП := УС; ЗпЗУ, РПрзРДП: ОП[(УС)] := РДП := РПрз;

СК := Аобр <3анесение в СК начального адреса обработчика прерываниям

Теперь процессор продолжает с этапа выборки первой команды обработчика прерывания. Обработчик (обычно он входит в состав операционной системы) определяет природу прерывания и выполняет необходимые действия. Когда про­грамма обработки прерывания завершается, процессор может возобновить выпол­нение программы пользователя с точки, где она была прервана. Для этого он вос­станавливает контекст программы (содержимое СК и других регистров) и начинает с цикла выборки очередной команды прерванной программы. Соответствующая микропрограмма представлена ниже (с целью упрощения схемы некоторые трак­ты и сигналы управления не показаны, и соответствующие микрооперации ото­бражают лишь логику выхода из прерывания).

УСРАП: РАП :=УС, ЧтЗУ: РДП:=ОП[(УС)] восстановление содержимого РПрз>;

+1УС: УС := УС + 1; РДПРПрз: РПрз := РДП;

УСРАП: РАП := УС, ЧтЗУ: РДП := ОП[(УС)] восстановление содержимого Акк>;

+1УС: УС := УС + 1; РДПАкк: Акк := РДП;

УСРАП: РАП := УС, ЧтЗУ: РДП := ОП[(УС)] восстановление содержимого СК>;

+1УС: УС := УС + 1; РДПСК: СК := РДП.