Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
151
Добавлен:
10.05.2015
Размер:
165.38 Кб
Скачать

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

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

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

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

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

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

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

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

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

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

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

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

Соседние файлы в папке Lection