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

IBM370

.pdf
Скачиваний:
36
Добавлен:
02.06.2015
Размер:
5.21 Mб
Скачать

4.) прерывание вызвано особым случаем доступа в процессе выборки команды; адрес ко-

манды был введен в PSW не в результате последовательного выполнения команд, а каким-

либо другим путем (командой перехода, прерыванием или командой ЗАГРУЗКА PSW);

5.) прерывание вызвано особым случаем спецификации, связанным с нечетностью адреса команды;

6.) прерывание вызвано особым случаем доступа или спецификации, встретившимся в про-

цессе выборки команды; причем могли быть внесены или оказались уже внесенными измене-

ния в параметры, управляющие соотношением между логическим и реальным адресами (из-

менение режима переадресации без полной замены PSW; изменение параметров в управля-

ющих регистрах 0 и 1, управляющих переадресацией; внесение некорректных значений в биты

0–7 PSW расширенного режима управления).

В ситуациях 1 и 2 операция аннулируется, а адрес команды указывает последнюю выпол-

нявшуюся команду. Это единственные случаи, в которых адрес команды в старом PSW иден-

тифицирует команду, вызвавшую прерывание.

Вситуациях 3—5 адрес команды в старом PSW программных прерываний был заменен; его нельзя вычислить, используя появившийся в PSW новый адрес.

Вситуации 6 логический адрес команды в PSW заменен не был, однако соответствующий реальный адрес после изменения стал другим.

Когда бит 8 (событие в программе) в коде прерывания установлен в единицу, адрес PER в

области памяти с адресами 153–155 указывает местоположение команды, вызывающей пре-

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

Точно так же информация, содержащаяся в коде длины команды, является избыточной, если операция аннулируется, так как в этом случае код длины команды можно определить по коду операции команды, которая указана старым PSW.

Момент прерывания

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

Для некоторых команд, называемых прерываемыми командами, прерывание разрешено по-

сле частичного выполнения команды. Считается, что выполнение прерываемой команды скла-

дывается из выполнения ряда элементов операций, и процессору разрешается производить прерывания между этими элементами. Объем данных, обработанных в процессе выполнения элемента операции, зависит от конкретной команды и зависит от модели и конкретных условий,

вызвавших выполнение команды, которая может быть прервана.

Когда в данной книге идет речь о моментах прерывания, включая и те прерывания, которые происходят в процессе выполнения прерываемой команды, используется термин “элемент операции”. При использовании этого термина подразумевается, что завершаемое выполнение непрерываемой команды – это фактическая операция, состоящая из одного элемента.

121

Замечания по программированию

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

дить прерывания ввода-вывода, внешние прерывания и прерывания от схем контроля, а также программные прерывания, обусловленные особыми случаями доступа.

Выполнение команд

Разновидности окончаний

Выполнение команд может окончиться одним из четырех способов: завершением, аннули-

рованием, подавлением или прекращением.

Когда выполнение команды завершается, результаты получаются такими, какими они долж-

ны быть согласно описанию. Когда прерывание происходит после завершения выполнения ко-

манды, адрес команды в старом PSW указывает на команду, которая должна выполняться сле-

дующей.

Когда выполнение команды подавляется, команда выполняется так, как если бы была зада-

на фиктивная операция “нет операции”. Содержимое всех полей, предназначенных для записи результатов, включая признак результата, не изменяется. После прерывания в результате по-

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

Аннулирование аналогично подавлению, отличие лишь в том, что при прерывании после выполнения аннулированной команды адрес команды в старом PSW указывает команду, кото-

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

Когда выполнение команды прекращается, содержимое всех полей, которые должны изме-

ниться в результате выполнения команды, непредсказуемо. Содержимое всех полей, отведен-

ных под результат, может быть заменено полностью или частично или вообще не заменено, а

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

кращение не вызвано сигналом от схем контроля при условии нарушения, то оно не оказывает никакого другого влияния на состояние или работу системы. После прерывания в результате прекращения адрес команды в старом PSW указывает на команду, расположенную непосред-

ственно за прекращенной командой.

Выполнение прерываемых команд

Выполнение прерываемой команды завершается, когда завершаются все элементы опера-

ции, связанные с этой командой. Когда прерывание происходит после завершения, аннулиро-

вания или подавления некоторого элемента операции, все предшествующие элементы опера-

ции уже завершены.

После завершения выполнения элемента операции, не являющегося последним, или после аннулирования любого элемента операции адрес команды в старом PSW указывает прерван-

122

ную команду, а параметрам операндов присваиваются такие значения, которые могут обеспе-

чить возобновление выполнения прерванной команды с момента прерывания, когда старое

PSW, записанное в результате прерывания, снова станет текущим. Присвоенное параметрам операндов значение зависит от команды. Когда элемент операции подавляется, адрес команды в старом PSW указывает на команду, расположенную непосредственно за подавленной. Но па-

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

команда выполняется вторично, то выполнение ее начинается с момента прерывания. Как и в случае с завершением или аннулированием выполнения команды, значение, присваиваемое параметрам операндов, зависит от команды.

Когда при выполнении прерываемой команды элемент операции прекращается, содержи-

мое всех полей, которые должны быть изменены этой командой, вообще говоря, является не-

предсказуемым. После прерывания адрес команды в старом PSW указывает на команду, рас-

положенную непосредственно за прерванной командой.

6.2.Прерывания от схем контроля машины

Прерывания от схем контроля являются тем средством, которое позволяет сообщить про-

грамме о сбоях в работе оборудования. Информация сообщается для того, чтобы помочь про-

грамме определить место и степень повреждения.

При прерываниях от схем контроля старое PSW записывается в память по адресу 48, а вы-

борка нового PSW производится по адресу 112. Когда в старом PSW задан режим BC, код пре-

рывания и код длины команды непредсказуем.

Причина и серьезность неисправности при сбоях оборудования идентифицируются 64-

битовым кодом прерывания от схем контроля, записываемым в память по адресу 232. Допол-

нительная информация, уточняющая причину прерывания и локализующая неисправность, мо-

жет быть записана в область памяти с адресами 216–511, а также в область, указанную управ-

ляющим регистром 15.

Прерыванием и записью соответствующей информации управляют бит 13 слова состояния программы и биты управляющего регистра 14. Более подробно информация по этому вопросу изложена в главе 12.

6.3.Программные прерывания

Программные прерывания возникают в ходе выполнения команды при неправильной спе-

цификации, неправильном использовании команд и данных или же при обнаружении про-

граммных или мониторных событий.

При программном прерывании старое PSW записывается в память по адресу 40, а выборка нового PSW производится по адресу 104.

Причина прерывания идентифицируется кодом прерывания. Если в старом PSW задан ре-

жим BC, код прерывания и код длины команды помещаются в старое PSW; если задан режим

EC, код прерывания помещается в память по адресам 142–143, а код длины команды – в биты

123

5 и 6 байта 141, причем во все остальные биты байта заносятся нули; нули заносятся и во все биты байта 140. В некоторых случаях в основную память по адресам 144–159 записывается дополнительная информация, идентифицирующая причину прерывания.

За исключением условий, вызывающих программное событие, условия, вызывающие пре-

рывания, идентифицируются значением семи младших битов кода прерывания. Несколько условий не могут быть идентифицированы одновременно. Биты 0–7 кода прерывания устанав-

ливаются в нуль.

На условие программного события указывает единица в бите 8 кода прерывания, причем в биты 0–7 заносятся нули. Условие программного события может идентифицироваться одно-

временно с другим условием программного прерывания; в этом случае в бит 8 заносится еди-

ница, а в биты 9–15 – закодированная величина.

Программное прерывание может произойти только тогда, когда соответствующий бит маски

(если таковой имеется) равен единице. Маска программы в PSW позволяет замаскировать че-

тыре особых случая; содержимое бита 1 управляющего регистра 0 определяет, будет ли ко-

манда УСТАНОВИТЬ МАСКУ СИСТЕМЫ вызывать особый случай, называемый специальной операцией; биты 16–31 управляющего регистра 8 управляют прерываниями, возникающими вследствие мониторных событий; в режиме EC предусмотрены маски для управления преры-

ваниями, которые обусловлены программными событиями. Если бит маски содержит нуль,

условие игнорируется; оно также не сохраняется для последующей обработки.

Замечания по программированию

Когда при программном прерывании новое PSW имеет некорректный формат или вызывает особый случай, распознаваемый при выборке команды, то имеет место цепочка программных прерываний. Описание того, как прекращается цепочка программных прерываний, можно найти в разделе 6.8.

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

ся в слове состояния канала.

Условия программных прерываний

Особый случай употребления кода операции

Особый случай употребления кода операции распознается тогда, когда процессор пытается выполнить некоторую команду с недействительным кодом операции: или такому коду не соот-

ветствует никакая операция, или на данном процессоре не предусмотрено выполнение коман-

ды с этим кодом операции. При распознавании особого случая в качестве кода операции рас-

сматриваются первые 8 битов команды или первые 16 битов, если значение первых 8 битов выражается шестнадцатеричной величиной B2.

Операция подавляется.

Код длины команды равен 1, 2 или 3.

124

Замечания по программированию

Если в командах ввода-вывода содержимое битов 0–7 имеет значение 9C, 9D или 9E, то бит

15 дополнительно используется как бит кода операции. Биты 8–14 на равенство нулю не про-

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

Для того чтобы существующие программы могли работать и в том случае, когда коды опе-

раций будут расширены для обеспечения новых функций (если это будет иметь место), в биты

8–14 следует помещать только нули. Точно так же нули следует записывать в биты 8–15 в ко-

манду с кодом операции 9F. В соответствии с этими рекомендациями коды операций для семи команд ввода-вывода имеют следующий вид: 9C00, 9C01, 9D00, 9D01, 9E00, 9E01, 9F00.

На некоторых моделях предусмотрены команды, не описанные в этой книге, например ко-

манды эмуляции и команды, введенные по заказу пользователя. Коды, не описанные в данной книге, могут и не вызывать особого случая употребления кода операции. Более того, эти ко-

манды могут вызывать изменение режима выполнения операции или каким-либо образом вли-

ять на выполнение последующих команд. Чтобы исключить возможность нежелательного влия-

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

В тех случаях, когда программист сознательно желает вызвать индикацию особого случая употребления кода операции, можно воспользоваться кодом операции 00 в двухбайтовых ко-

мандах и 16-битовыми кодами операций от B2E0 до B2EF в четырехбайтовых командах. Эти коды отведены для нужд программного обеспечения, и не предполагается, чтобы когда-либо в будущем в процессоре появились операции с этими кодами.

Особый случай употребления привилегированной операции

Этот случай имеет место, если привилегированная команда встречается в состоянии “зада-

ча”.

Операция подавляется.

Код длины команды равен 1 или 2.

Особый случай употребления команды ВЫПОЛНИТЬ

Этот случай имеет место, если команда ВЫПОЛНИТЬ ссылается на команду ВЫПОЛНИТЬ.

Операция подавляется.

Код длины команды равен 2.

Особый случай защиты памяти

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

Выполнение команды подавляется, если команда, в том числе подчиненная команда для команды ВЫПОЛНИТЬ, находится в области памяти, защищенной от выборки. Когда в процес-

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

125

этом подавляется. В табл. 6.3 указаны действия, выполняемые при особых случаях защиты памяти.

Таблица 6.3. Действия при особых случаях защиты памяти и адресации

Особый

Действия

 

 

случай

 

 

 

 

 

 

 

 

при выборке строки

при выборке

при обращении к операнду

 

таблицы переадреса-

команды

 

 

ции

 

 

 

 

 

 

Зашиты

Не бывает

Подавление

Подавление команд LPSW, SSM,

 

 

 

STNSM, STOSM, SCKC, SPT, SPX

 

 

 

и прекращение * остальных команд

 

 

 

 

Адресации

Подавление

Подавление

Подавление команд LPSW, SSM,

 

 

 

STNSM, STOSM, SCKC, SPT, SPX

 

 

 

и прекращение остальных команд

 

 

 

 

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

да должна изменить содержимое только основной памяти и каждый байт поля результа-

тов вызывает особый случай доступа, производится подавление команды. Термин “поле результатов” в этом смысле включает признак результата и регистры (если они есть),

которые должны быть изменены командой.

В случае выполнения выборки защищенная информация не загружается в адресуемый ре-

гистр и не пересылается в другую область памяти. Когда часть операнда защищена против за-

писи, а часть не защищена, то может произойти запись в незащищенную часть операнда. Со-

держимое защищенной части операнда не изменяется.

При обращении к защищенной области за операндом код длины команды может принимать значения 1, 2 или 3 и указывает длину команды, вызвавшей обращение. Но на некоторых мо-

делях при обращении к защищенной области памяти для записи операнда код длины команды может равняться нулю.

Если часть команды защищена против выборки, код длины команды равен 1, 2 или 3, что указывает на количество полуслов, на которое был увеличен адрес команды. Невозможно предсказать заранее, будет ли код равен 1, 2 или 3.

Особый случай адресации

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

126

но питание физического блока памяти. Адрес, указывающий на недоступную область памяти,

считается некорректным.

Если адрес команды, в том числе команды, инициируемой командой ВЫПОЛНИТЬ, некор-

ректен, выполнение команды подавляется. Точно так же элемент операции подавляется, когда в процессе неявного обращения к строке таблицы динамической переадресации (DAT) имеет место этот особый случай. Если адрес операнда, который может быть динамически преобразо-

ван, указывает на недоступную область памяти, операция прекращается во всех случаях, за исключением особых команд, которые подавляются. Действия, выполняемые при особых слу-

чаях адресации, приведены в табл. 6.3.

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

ную часть.

В случае некорректного адреса операнда или некорректного адреса строки таблицы DAT,

используемой при обращении к операнду, код длины команды равен 1, 2 или 3, что указывает на длину команды, вызвавшей обращение. Если, однако, особый случай адресации возникает как результат попытки произвести запись и адрес может быть динамически преобразован, но указывает на недоступный операнд, код длины на некоторых моделях может быть равен нулю.

Если часть команды недоступна или адрес строки таблицы динамической переадресации,

используемой при выборке команды, некорректен, код длины команды равен 1, 2 или 3, что указывает на количество полуслов, на которое был увеличен адрес команды. Будет ли код ра-

вен 1, 2 или 3, предсказать невозможно.

Особый случай спецификации

Особый случай спецификации возникает по следующим причинам.

1.Адрес команды не является четным.

2.Адрес операнда не соответствует целочисленной границе, соблюдение которой требует-

ся при выполнении данной команды.

3.Четыре младших бита адреса блока в командах УСТАНОВИТЬ КЛЮЧ ПАМЯТИ и ПРОЧИТАТЬ КЛЮЧ ПАМЯТИ не равны нулю.

4.Поле R команды, требующей указания регистра с четным адресом, определяет регистр с нечетным адресом.

5.Для короткого или длинного операнда указан номер регистра с плавающей точкой, отли-

чающийся от 0, 2, 4 или 6, либо для расширенного операнда указывается номер регистра с плавающей точкой, отличающийся от 0 и 4.

6. Множитель или делитель в операциях десятичной арифметики превышает по размерам

15 цифр и знак.

7.При десятичном умножении или делении поле первого операнда короче поля второго операнда или равно ему.

8.Биты 8–11 команды ВЫЗОВ МОНИТОРА не установлены в нуль.

127

9. В процессоре, который не оборудован для работы в режиме EC, задан режим EC (бит 12

PSW установлен в единицу).

10. В режиме EC в незакрепленный бит PSW занесена единица (биты 0, 2–4, 16–17, 34–39).

Выполнение команды, адрес которой указан в старом PSW, подавляется. Однако в случаях

9 и 10 производится завершение операции, которая вводит новое PSW, и сразу же после него происходит прерывание.

Если адрес команды нечетный (случай 1), код длины команды равен 1, 2 или 3, что указы-

вает на число полуслов, на которое был увеличен код команды. Невозможно предсказать, бу-

дет ли код равен 1, 2 или 3.

Для случаев 2–8 код длины команды равен 1, 2 или 3, что указывает на длину команды, вы-

звавшей прерывание.

Когда в соответствии с п. 9 и 10 распознается особый случай и некорректное значение бита введено командой ЗАГРУЗКА PSW или в результате прерывания, код длины команды равен нулю. Когда эти особые случаи возникают в результате выполнения команды УСТАНОВИТЬ МАСКУ СИСТЕМЫ или ЗАПИСЬ В ПАМЯТЬ И МОДИФИКАЦИЯ МАСКИ СИСТЕМЫ ЛОГИЧЕСКИМ СЛОЖЕНИЕМ, код длины команды равен двум.

В разделе 4.3 рассматривается, когда именно распознаются особые случаи, связанные с

PSW.

Особый случай в данных

Особый случай в данных распознается когда:

1.) знак или коды цифр операндов в командах десятичной арифметики или в команде ПРЕОБРАЗОВАНИЕ В ДВОИЧНУЮ являются некорректными;

2.) поля операндов в командах СЛОЖЕНИЕ ДЕСЯТИЧНОЕ, СРАВНЕНИЕ ДЕСЯТИЧНОЕ,

ДЕЛЕНИЕ ДЕСЯТИЧНОЕ, УМНОЖЕНИЕ ДЕСЯТИЧНОЕ и ВЫЧИТАНИЕ ДЕСЯТИЧНОЕ пере-

крываются так, что их младшие байты не совпадают; поля операндов в команде СЛОЖЕНИЕ С ОЧИСТКОЙ перекрываются и младшие байты второго операнда расположены правее младших байтов первого операнда;

3.) множимое команды УМНОЖЕНИЕ ДЕСЯТИЧНОЕ не имеет достаточного количества старших нулей.

За исключением команд ОТРЕДАКТИРОВАТЬ и ОТРЕДАКТИРОВАТЬ И ОТМЕТИТЬ, опера-

ция подавляется, когда код знака некорректен, независимо от того, существуют ли какие-либо другие условия, вызывающие особый случай; в других случаях операция прекращается. Одна-

ко или поле знака в младшем байте поля результата остается неизменным, или устанавлива-

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

При выполнении команды ОТРЕДАКТИРОВАТЬ или ОТРЕДАКТИРОВАТЬ И ОТМЕТИТЬ не-

корректный код знака не распознается, а при особом случае в данных операциях прекращает-

ся.

Код длины команды равен 2 или 3.

128

Замечания по программированию

Если после программного прерывания из-за особого случая в данных программа обнаружи-

вает некорректность кода знака, то это означает. что операция была подавлена, если одновре-

менно выполняются следующие два условия:

1.) Некорректный знак не находится в цифровой части поля результата; 2.) Код знака расположен так, что при выполнении данной команды он проверяется на кор-

ректность знака (это условие не относится к первому операнду команды СЛОЖЕНИЕ С ОЧИСТКОЙ и обоим операндам команд ОТРЕДАКТИРОВАТЬ и ОТРЕДАКТИРОВАТЬ И ОТМЕТИТЬ).

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

Переполнение в операции с фиксированной точкой

Особый случай, называемый переполнением с фиксированной точкой, распознается, когда при арифметических операциях с фиксированной точкой происходит перенос из старшего бита или старшие значимые биты теряются в результате арифметического сдвига влево.

В режиме BC прерывание может быть замаскировано битом 36 PSW, в режиме EC – битом

20 PSW.

Операция завершается с признаком результата, равным 3, а информация, выходящая за пределы регистра, теряется.

Код длины команды равен 1 или 2.

Особый случай деления с фиксированной точкой

Особый случай деления с фиксированной точкой распознается всегда, когда частное пре-

вышает размер регистра, в том числе при делении на нуль, а также тогда, когда результат вы-

полнения команды ПРЕОБРАЗОВАНИЕ В ДЕСЯТИЧНУЮ превышает 31 бит.

Операция деления подавляется. Команда ПРЕОБРАЗОВАНИЕ В ДЕСЯТИЧНУЮ заверша-

ется, причем старшие биты, которые не могут быть помещены в регистр, теряются.

Код длины команды равен 1 или 2.

Десятичное переполнение

Особый случай, называемый десятичным переполнением, распознается, когда одна или не-

сколько значащих старших цифр теряются из-за того, что результат не помещается в отведен-

ное для него поле.

В режиме BC прерывание может быть замаскировано битом 37 PSW, в режиме EC – битом

21 PSW.

Операция завершается с признаком результата, равным 3, при этом информация, выходя-

щая за пределы поля, теряется.

Код длины команды равен 2 или 3.

129

Особый случай десятичного деления

Особый случай десятичного деления распознается, когда частное выходит за пределы ука-

занного поля.

Операция подавляется.

Код длины команды равен 2 или 3.

Переполнение порядка

Если при сложении, вычитании, умножении или делении с плавающей точкой характеристи-

ка результата превышает 127, распознается особый случай, называемый переполнением по-

рядка.

Операция завершается. Мантисса нормализуется, знак и мантисса результата остаются ис-

тинными. Характеристика результата становится меньше истинной характеристики на 128.

Код длины команды равен 1 или 2.

Исчезновение порядка

Особый случай, называемый исчезновением порядка, распознается, когда при сложении,

вычитании, умножении, делении или выполнении операции ПОПОЛАМ характеристика резуль-

тата меньше нуля, а мантисса результата не равна 0.

В режиме BC прерывание маскируется битом 38 PSW, в режиме EC – битом 22 PSW.

Операция завершается. Содержимое маски исчезновения порядка влияет также и на ре-

зультат операции. Если бит маски равен нулю, знак, характеристика и мантисса устанавлива-

ются в нуль и результат становится истинным нулем. Если бит маски равен единице, мантисса нормализуется, характеристика становится на 128 больше истинного значения характеристики,

а знак и мантисса остается истинными.

Код длины команды равен 1 или 2.

Потеря значимости

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

В режиме BC прерывание может быть замаскировано битом 39 PSW, в режиме EC – битом

23 PSW.

Операция завершается. Состояние маски потери значимости влияет также и на результат.

Если бит маски равен нулю, операция завершается путем замены результат истинным нулем.

Если бит маски равен единице, операция завершается без каких-либо дополнительных изме-

нений характеристики и знака результата.

Код длины команды равен 1 или 2.

Особый случай деления с плавающей точкой

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

Операция подавляется.

Код длины команды равен 1 или 2.

130

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]