Исполнительный адрес рассматривается как 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. При выполнении команды сдвига большие значения счетчика заменяются меньшими