Поведение процессора при выполнении команды в зависимости от режима, в котором он находится, страница 8

сброшен, то после выполнения этой команды будет возбуждено исключение по трассировке.

Таблица 6-5. Управление трассировкой

-----T----T--------------------------------------------¬

¦ T1 ¦ T0 ¦       функция трассировки                  ¦

+----+----+--------------------------------------------+

¦ 0  ¦  0 ¦    трассировки нет                         ¦

¦    ¦    ¦                                            ¦

¦ 0  ¦  1 ¦    трассировка по изменению хода программы ¦

¦    ¦    ¦    (BRA, JMP и т.д.)                       ¦

¦ 1  ¦  0 ¦    трассировка после выполнения каждой     ¦

¦    ¦    ¦    команды                                 ¦

¦ 1  ¦  1 ¦    неопределено, зарезервировано           ¦

L----+----+--------------------------------------------В  целом,  можно  рассматривать  исключение по трассировке, как расширение функций каждой команды. При этом, если команда породила исключение по трассировке, то выполнение ее считается  незавершенным, пока соответствующее исключение не будет полностью обработано.  Если  команда  не завершит своего выполнения из-за возникновения исключения по ошибке шины или адреса, то обработка исключения по трассировке откладывается до тех пор, пока выполнение приостановленной команды не возобновится (соответствующей командой RTE) и не завершится нормальным образом. Если  во время выполнения команды будет заявлено прерывание, то исключение  по трассировке обрабатывается до начала обработки исключения по прерыванию. Если команда во время своего выполнения возбуждает исключение, то оно обрабатывается до обработки исключения по трассировке.

Если в режиме трассировки происходит попытка  выполнить  запрещенную или нереализованную команду, то эта команда  не  вызовет исключение по трассировке, так как она не будет выполнена.  Это особенно важно для процедуры программной эмуляции команды,  которая выполняет функции команды, корректирует сохраненное  значение программного счетчика, записывая в  него  адрес  команды, следующей за нереализованной, и выполняет возврат. Перед  возвратом следует проверить сохраненное в стеке  значение  регистра состояния с тем, чтобы установить, был ли включен режим трассировки. Если режим был включен, то следует также эмулировать обработку исключения по трассировке, чтобы учесть при трассировке эмулируемую команду.

Обработка исключения по трассировке  начинается  по  завершении нормального выполнения трассируемой команды, до начала выполнения следующей команды. Создается внутренняя копия регистра состояния. Происходит переход в режим супервизора. В регистре состояния обнуляются биты T и тем самым дальнейшая трассировка отменяется. Генерируется номер вектора для получения адреса  процедуры обработки трассировки. Смещение  вектора  исключения  по трассировке, текущее значение программного  счетчика,  а  также копия регистра состояния сохраняются в стеке супервизора.  Сохраненное значение программного счетчика указывает на адрес следующей команды, подлежащей выполнению. Наконец, с  адреса,  содержащегося в векторе исключения по трассировке, возобновляется выполнение команд.

Следует отметить один случай, когда трассировка влияет на  нормальное выполнение команды. Если выполнение команды STOP  начинается при T1=1, то исключение по трассировке будет  возбуждено после того, как команда STOP загрузит регистр состояния.  После возврата из процедуры обслуживания трассировки выполнение будет продолжено со следующей за STOP команды, так  что  процессор  в режим останова не перейдет.

6.3.10 Прерывания

Обработка исключения может быть вызвана запросом внешнего  устройства на обслуживание посредством механизма прерываний, который  рассмотрен в разделе 5.1.1 ДЕЙСТВИЯ ПО ПРЕРЫВАНИЮ. Запросы на прерывания, поступающие в  процессор  по  сигнальным  линиям

IPL0*-IPL2*,  необязательно влекут немедленную обработку исключения - они могут быть задержаны. Отложенные прерывания  обслуживаются  в промежутках между выполнением команд, по завершении обработки исключений, а также во время выполнения команд сопроцессора, когда это  разрешено.  Если  приоритет  запрашиваемого прерывания меньше или равен текущей маске уровня прерываний, то прерывание  игнорируется и выполнение продолжается со следующей команды. (В случае уровня 7 распознавание прерываний имеет  некоторую специфику, как это будет показано ниже). Если приоритет запрашиваемого  прерывания  выше текущего значения маски уровня прерываний, то обработка прерывания будет отложена до  завершения выполнения текущей команды.

Обработка исключений по прерыванию следует намеченной выше схеме. Сначала создается внутренняя копия регистра состояния, после чего устанавливается  привилегированный  режим  супервизора, подавляется трассировка. Маска уровня прерываний процессора устанавливается равной уровню обслуживаемого прерывания. В  цикле шины, который называется циклом подтверждения прерывания,  процессор считывает номер вектора из устройства, выдавшего  запрос на прерывание; при этом значение уровня подтверждаемого  прерывания выставляется на линиях A1-A3 адресной  шины.  Если  номер вектора устройством, выдавшим запрос на прерывание, не  генерируется, то внешняя логика выдает запрос на автоматическое  формирование номера вектора и процессор порождает номер вектора  в соответствии с номером уровня прерывания. Если же внешняя логика диагностирует ошибку шины, прерывание считается ложным и генерируемый номер вектора определяет вектор ложного прерывания.

Как только номер вектора  сформирован, процессор  приступает  к обычной обработке исключения, сохраняя в стеке супервизора смещение вектора исключения, программный счетчик, регистр  состояния. Сохраненное значение  программного  счетчика  представляет собой адрес команды, которая выполнялась бы, не случись  прерывания. Если прерывание было распознано во время выполнения  команды сопроцессора, то в стек будет также записана дополнительная информация о внутреннем состоянии процессора. Это  позволит процессору MC68020 продолжить выполнение  команды  сопроцессора по окончании работы процедуры обслуживания прерывания. Если бит