Выбрать главу

Исполнительный адрес рассматривается как 16-разрядное число в дополнительном коде, называемое счетчиком сдвига. Содержимое регистра R1 сдвигается на число разрядов, равное значению счетчика сдвига, сдвиг происходит влево при положительном значении счетчика и вправо — при отрицательном. Разряды, выталкиваемые за границы регистра, теряются. При потере хотя бы одного единичного разряда в РПР устанавливается О-бит. Для установки в РПР остальных разрядов результат сравнивается с нулем[50]).

Shift Circular RS 7D16 SHIFTC,R1 A,R2 GLE (Сдвиг циклический)

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

Shift Arithmetic RS 7E16 SHIFTA,R1 A,R2 OGLE (Сдвиг арифметический)

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

Shift Real RS 7F16 SHIFTR,R1 A,R2 GLE (Сдвиг вещественный)

Исполнительный адрес рассматривается как 16-разрядный счетчик сдвига в дополнительном коде. Мантисса абсолютного значения вещественного числа в регистре R1 сдвигается влево или вправо на 4 разряда, освободившиеся позиции заполняются нулями. Если в итоге мантисса равна нулю, значит, таков результат. В противном случае из порядка вычитается значение счетчика сдвига и полученная величина записывается с исходным знаком в регистр R1. Переполнение произойти не может, но возможен особый случай некорректности вещественного представления. Для установки РПР результат сравнивается с нулем.

Особые случаи и обращения к супервизору

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

Таблица 25.1 Сводка кодов операций

 Обращения к супервизору могут осуществляться как непосредственно при помощи команды вызова супервизора Supervisor Call, так и косвенным образом — при возникновении особых случаев. Различные поля команды Supervisor Call используется для задания требуемых действий и передачи параметров. Далее представлен минимальный набор действий супервизора в зависимости от содержимого указателя регистра R1.

R1 = 0 — Завершить выполнение программы и произвести после нее «чистку мусора»

R1 = 1 — Прочитать из входного потока целое число и записать его по исполнительному адресу команды SVC (адрес должен указывать на слово).

R1 = 2 — Прочитать вещественное число и записать его по исполнительному адресу.

R1 = 3 —Прочитать литеру и записать по исполнительному адресу.

R1 = 4 — Перейти во входном потоке к новой записи.

R1 = 5 — Слово по исполнительному адресу записать в выходной поток в виде целого числа.

R1 = 6 — Слово по исполнительному адресу записать в выходной поток в виде вещественного числа.

R1 = 7 —Байт по исполнительному адресу записать в выходной поток в виде литеры.

R1 = 8 —Записать в выходной поток признак конца записи.

R1 = 9 и R2 = 0 —Закончить трассировку выполнения команд.

R1 = 9 и R2 = 1 — Начать трассировку выполнения команд. Печатать текущую информацию о каждой выполняемой команде.

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

R1 = F — Данный вызов супервизора никогда не будет предназначаться для системного применения и может быть использован в имитаторе для любых целей.

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

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

вернуться

50

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