Cтраница 4
Макрокоманда XCTL предназначена для передачи управления без возврата в вызывающую программу в динамических последовательных структурах. Прежде чем выдается макрокоманда XCTL, регистры со 2-го по 12 - й, область управления программными прерываниями и маска программы должны быть приведены в состояние, в котором они находились в момент, когда текущая программа получила управление. [46]
Адрес перехода определяется до запоминания информации для возврата. Информация для возврата имеет формат, совпадающий с форматом правых 32 битов PSW режима ВС, и содержит код длины команды, признак результата, маску программы и продвинутый адрес команды. [47]
Всего имеется 15 кодов программных прерываний, которые запоминаются в PSW и по которым ОС определяет причину прерывания. Эти коды приведены в табл. 1.2. Некоторые виды прерывания, такие как переполнение с фиксированной точкой ФП, десятичное переполнение ДП, исчезновение порядка И и потеря значимости ЗН, могут быть замаскированы с помощью маски программы, которая устанавливается в нулевое состояние. Тогда в случае появления программной ошибки прерывание не происходит. В табл. 1.2 показано, как заканчивается работа каждой команды в случае появления программного прерывания: команда совсем не выполняется, завершается или прекращается в какой-то момент времени. [48]
Команда загрузка PSW задает целиком новое PSW; команда установить маску программы задает новый признак результата и 4 бита новой маски программы; команды установить маску системы, запись в память и модификация маски системы логическим умножением, запись в память и модификация маски системы логическим сложением задают новую конфигурацию битов в левом байте PSW; команда установить ключ PSW вводит новый ключ PSW; адрес команды получает приращения при последовательном выполнении команд и заменяется при выполнении перехода. По команде прочитать ключ PSW записывается в память ключ PSW; по командам запись в память и модификация маски системы логическим умножением и запись в память и модификация маски системы логическим сложением записывается в память левый байт PSW; по команде переход с возвратом запоминается код длины команды, код признака результата, маска программы и адрес команды. [49]
Используя фразу ON SIZE ERROR при переполнении после арифметических операций, программист легко может определить свои процедуры обработки - арифметического переполнения. Однако он платит за это дополнительной памятью, временем компиляции и выполнения. Компилятор должен сгенерировать дополнительный код для установки регистра маски программы, чтобы запретить автоматические прерывания при арифметических переполнениях и чтобы вместо прерываний переходить к пользовательской подпрограмме обработки переполнения. [50]
Биты 2 - 7 регистра RI замещают признак результата и маску программы в PSW. Остальная часть PSW не изменяется. Биты 2 - 3 замещают признак результата; биты 4 - 7 - маску программы. Маска программы обсуждается в разд. Этой команде часто предшествуют команды BAL или BALR, которые запоминают предыдущее содержимое PSW в регистре. Затем для изменения нужных битов используются команды И или ИЛИ. [51]
Биты 2 - 7 общего регистра Ri замещают биты 34 - 39 в PSW. Другие биты регистра Ri и все содержимое регистра R игнорируются. Биты 2 - 3 регистра Ri замещают признак результата, биты 4 - 7 - маску программы. Остальная часть PSVV не изменяется. [52]