История отечественной вычислительной техники

Назначение, структура и основные характеристики ЭВМ “Минск-22”

Назначение и общая характеристика

Вычислительные машины “Минск-2, -22 и -32” были одним из наиболее распространенных типов отечественных ЭВМ 60-70-х годов. Для них был разработан настолько большой объем программного обеспечения, что при переходе к Единой системе ЭВМ потребовалось предпринять специальные усилия, чтобы обеспечить выполнение программ для “Минска” на новых машинах. С этой целью на ЭВМ ЕС-1035 была встроена эмуляция системы команд вычислительных машин серии “Минск”.

ЭВМ “Минск-22” имеет следующие основные технические характеристики:

  • быстродействие 5-6 тыс. операций в секунду;
  • разрядность машинного слова 37 бит (разряды нумеруются с нуля до 36 слева направо);
  • двоичная арифметика с фиксированной и плавающей запятой;
  • емкость оперативной памяти 8192 37-разрядных ячеек;
  • емкость внешней памяти на магнитных лентах 1600 тыс. 37-разрядных ячеек;
  • потребляемая мощность 10 кВт;
  • занимаемая площадь 80 м2.

Последние варианты ЭВМ “Минск-22” помимо основного режима работы поддерживали так называемый режим “Т”, облегчающий программирование и дающий некоторые дополнительные возможности. Далее приводится описание основного режима работы ЭВМ. Отличия режима “Т” от основного режима будут рассмотрены далее.

Состав машины

В состав ЭВМ “Минск-22” входят: арифметическое устройство (АУ), устройство управления (УУ), оперативное запоминающее устройство на магнитных сердечниках (ОЗУ), внешнее запоминающее устройство на магнитных лентах (НМЛ), пульт управления машиной (ПУ), устройства ввода-вывода (УВВ).

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

Регистр Р1 предназначен для приема из ОЗУ и хранения первого 37-разрядного слова, участвующего в операции. Регистр Р2 играет вспомогательную роль при выполнении операций (например, хранит сначала множитель, а затем младшие разряды произведения, хранит результат операции и т. п.). С оперативной памятью он не связан.

Сумматор См является 37-разрядным регистром. Он предназначен для приема из ОЗУ и хранения второго слова, участвующего в операции, а также для выполнения операций над словами, поступающими в АУ. В командах, использующих в качестве второго операнда результат предшествующей операции, второй операнд принимается в сумматор не из памяти, а из регистра Р2.

Запись информации в ОЗУ, обмен данными между ОЗУ и НМЛ, вывод информации на внешние устройства осуществляется через Р1 или сумматор.

Операции, выполняемые АУ, имеют различную длительность. Среднее время выполнения основных арифметических операций приведено ниже (в мкс):

  • сложение с фиксированной запятой — 96;
  • умножение с фиксированной запятой — 300;
  • деление с фиксированной запятой — 716;
  • сложение с плавающей запятой — 240;
  • умножение с плавающей запятой — 285;
  • деление с плавающей запятой — 600.

При выполнении некоторых операций в АУ вырабатываются специальные сигналы, характеризующие результат операции, например сигнал переполнения “Авост” (аварийный останов), при получении которого машина обычно останавливается.

Устройство управления обеспечивает автоматическую работу всех устройств машины в соответствии с заданной программой. Оно имеет в своем составе счетчик адреса команд (СчАК) и регистр дешифратора операций (РДШО). Кроме того, в первых двух тактах выполнения команды в качестве рабочего регистра используется сумматор.

Счетчик адреса команд представляет собой 13-разрядный счетчик, вырабатывающий адреса выполняемых команд (номера ячеек ОЗУ, в которых хранятся коды подлежащих выполнению команд). Обычно СчАК изменяется путем добавления единицы, благодаря чему вслед за одной командой выполняется следующая за ней.

Регистр дешифратора операций является семиразрядным регистром и служит для хранения и распознавания кода исполняемой операции.

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

Оперативное запоминающее устройство (ОЗУ) является внутренней памятью машины. В нем хранится программа решения задачи, исходные данные, промежуточные и окончательные результаты. Емкость ОЗУ составляет 8192 37-разрядных ячейки, адреса (номера) которых обозначаются восьмеричными цифрами от 0 до 17 777.

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

Время считывания или записи одной ячейки ОЗУ составляет 24 мкс.

Внешнее запоминающее устройство на магнитных лентах является внешней памятью машины. Емкость внешней памяти составляет 1600 тыс. ячеек, распределенных по 16 магнитным лентам (по числу шкафов НМЛ — № 0-3 и лентопротяжных механизмов в каждом шкафу — № 0-3). Скорость обмена информацией между ОЗУ и НМЛ составляет 2500 слов в секунду. С одной магнитной ленты без перезаписи допускается до 10 тыс. считываний.

Для удобства поиска каждая магнитная лента предварительно размечается на зоны по 2048 слов каждая.

Устройства ввода-вывода предназначены для ввода программ и данных в машину и для вывода результатов.

Ввод информации возможен с перфоленты, с перфокарт и с клавиатуры телеграфного аппарата. Скорость ввода с перфоленты достигает 800 строк в секунду (60 кодов в секунду), с перфокарт — 250 карт в минуту.

Вывод информации производится на быстропечатающий механизм (20 чисел в секунду), алфавитно-цифровое печатающее устройство (400 строк в минуту), перфоленту (20 символов в секунду), перфокарты (100 карт в минуту) и на печатающее устройство телеграфного аппарата.

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

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

Машинный код любой команды ЭВМ “Минск-22” состоит из четырех полей:

  • кода операции (разряды 0-6);
  • адреса индексной ячейки (разряды 9-12);
  • адреса первого операнда (разряды 7, 13-24);
  • адреса второго операнда (разряды 8, 25-36).

Код команды записывается как целое восьмеричное число со знаком. Коду операции соответствуют две старшие цифры машинного кода вместе со знаком. Следующие две цифры задают старшие разряды адресов операндов и адрес индексной ячейки. Затем идут четыре цифры, определяющие младшие 12 разрядов адреса первого операнда, а в конце — еще четыре цифры младших разрядов адреса второго операнда. Такая система записи была весьма неудобна, поэтому в режиме Т формат кода команды был несколько изменен.

Каждая команда выполняется за пять тактов.

В первом такте результат предыдущей операции пересылается из сумматора в регистр Р2, затем код очередной команды, адрес которой находится в СчАК, выбирается из ОЗУ и заносится в сумматор. В этом и следующем тактах выполнения команды сумматор является регистром кода команды, в котором размещается и расшифровывается подлежащая выполнению команда. Код операции поступает одновременно в сумматор и в регистр РДШО. В соответствии с кодом операции, находящимся в РДШО, устройство управления обеспечивает настройку АУ и других устройств на выполнение заданной операции.

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

Если адрес индексной ячейки равен нулю, первый такт выполнения команды на этом заканчивается. В том случае, если указан ненулевой адрес индексной ячейки, первый такт продолжается следующим образом. В регистр Р1 выбирается содержимое индексной ячейки (в команде заданы четыре младших разряда ее адреса, старшие разряды предполагаются равными нулю). Затем адресные части содержимого сумматора, т. е. кода команды, и содержимого Р1 складываются и результат помещается в сумматор. Таким образом, использование индексной ячейки позволяет изменить адреса операндов команды на значение, содержащееся в индексной ячейке.

В индексной ячейке для модификации адреса ячейки a1 используются разряды 13-24, а для модификации адреса ячейки a2 — разряды 25-36, т. е. константы модификации адресов имеют длину 12 разрядов и могут принимать значения от 0 до 77778. Разряды 0-12 индексной ячейки игнорируются.

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

Во втором такте адрес первого операнда из сумматора поступает в регистр адреса ОЗУ. Затем первый операнд выбирается из памяти по этому адресу и заносится в Р1.

В третьем такте адрес второго операнда из сумматора поступает в регистр адреса ОЗУ. После этого производится выборка второго операнда из памяти и занесение его в сумматор. В конце третьего такта машина готова к выполнению команды: операнды находятся в регистре Р1 и сумматоре, а код операции находится в РДШО.

В четвертом такте в АУ выполняется заданная операция над числами, содержащимися в регистре Р1 и сумматоре. Результат операции остается в сумматоре.

В пятом такте по адресу второго операнда, хранящегося в регистре адреса ОЗУ, производится запись результата в память.

После пятого такта рабочий цикл повторяется.

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

Представление информации

ЭВМ “Минск-22” обеспечивает представление информации в двоичном и двоично-кодированном десятичном виде в формате с фиксированной и плавающей запятой. Кроме того, возможно представление символьной информации.

Двоичные числа с фиксированной запятой. Двоичные числа с фиксированной запятой представлены в прямом коде со знаком. Этим “Минск” отличается от современных ЭВМ, использующих дополнительный код для представления отрицательных чисел.

Знак числа находится в разряде 0. Его нулевое значение соответствует положительному числу, единичное — отрицательному. Поскольку используется прямой код, возможны две формы записи нуля: положительная и отрицательная.

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

Двоичные числа с плавающей запятой. Знак числа хранится в нулевом разряде, мантисса в прямом коде — в разрядах 1-28. Считается, что мантисса имеет значащие разряды только после запятой, т. е. по модулю всегда меньше единицы.

Разряд 29 не используется и принимается равным нулю.

Знак порядка находится в разряде 30, а сам порядок (также в прямом коде) — в разрядах 31-36. Такая структура числа отличается от принятой в современных ЭВМ, где порядок хранится в смещенном виде. Порядок соответствует степеням двойки.

Порядок может принимать значения от -63 до +63. Диапазон представимых нормализованных чисел находится в пределах от 2-64 до 263х(1-2-28), а ненормализованных чисел — от 2-91 до 263х(1-2-28).

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

Десятичные числа с фиксированной запятой. Десятичные числа с фиксированной запятой записываются в виде девяти тетрад (разряды 1-36) и знака (разряд 0). Как и в случае с двоичными числами, считается, что мантисса задает дробную часть числа, а его целая часть равна нулю.

Десятичные числа с плавающей запятой. Мантисса десятичного числа с плавающей запятой состоит из семи тетрад, занимающих разряды 1-28. Знак мантиссы находится в разряде 0. Считается, что целая часть мантиссы всегда равна нулю.

Разряды 29 и 31 не используются и принимаются равными нулю.

Знак порядка находится в разряде 30. Сам порядок состоит из одной неполной и одной полной тетрады (разряды 32-36). Порядок задан относительно основания 10.

Символьная информация

Символьная информация кодируется с помощью шестиразрядного кода. В одной ячейке можно записать шесть символов (разряды 1-36), при этом старший разряд остается неиспользованным. Кодировка символов показана в следующей табл. 1.

Таблица 1

Код Символ
000 000 0
000 001 1
000 010 2
000 011 3
000 100 4
000 101 5
000 110 6
000 111 7
001 000 8
001 001 9
001 010 +
001 011 -
001 100 /
001 101 ,
001 110 .
001 111 Пробел
010 000 Десятичный
010 001 ^
010 010 (
010 011 )
010 100 X
010 101 =
010 110 ;
010 111 [
011 000 ]
011 001 *
011 010 '
011 011 '
011 100 ?
011 101 <
011 110 >
011 111 :
100 000 А (A)
100 001 Б (B)
100 010 В (W)
100 011 Г (G)
100 100 Д (D)
100 101 Е (E)
100 110 Ж (V)
100 111 З (Z)
101 000 И (I)
101 001 Й (J)
101 010 К (K)
101 011 Л (L)
101 100 М (M)
101 101 Н (N)
101 110 О (O)
101 111 П (P)
110 000 Р (R)
110 001 С (S)
110 010 Т (T)
110 011 У (U)
110 100 Ф (F)
110 101 Х (H)
110 110 Ц (C)
110 111 Ч
111 000 Ш
111 001 Щ
111 010 Ы (Y)
111 011 Ь (X)
111 100 Э
111 101 Ю
111 110 Я (Q)
111 111 Выделение

Система команд ЭВМ “Минск-22”

ЭВМ “Минск-22” выполняет четыре основные операции:

  • арифметические операции;
  • логические операции;
  • операции управления;
  • операции ввода-вывода.

Выполняемое командой действие однозначно определяется кодом операции, занимающим старшие семь разрядов кода команды. Некоторые команды имеют четыре модификации, задаваемые двумя младшими разрядами кода операции. Эти модификации следующие:

- 00 — См, (а2):= (а2) х (а1)

- 01 — См:= (а2) х (а1)

- 10 — См, (а2):= Р2 х (а1)

- 11 — См:= Р2 х (а1)

Здесь См — сумматор, Р2 — регистр результата предыдущей операции; а1, и а2, — содержимое ячеек памяти для адресов первого и второго операнда соответственно, * — выполняемая операция.

Первая модификация выполняет операцию над двумя величинами, полученными из ОЗУ, и сохраняет результат в памяти (заметим, что в сумматоре результат сохраняется всегда).

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

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

Арифметические операции

Арифметические операции (табл. 2) могут выполняться с округлением или без округления результата. В исходном состоянии (после выполнения сброса машины) операции выполняются с округлением.

Таблица 2

Код операции Название операции Формат команды
+1М Сложение +1М i a1 a2
+2М Вычитание +2М i a1 a2
+3М Умножение +3М i a1 a2
+4М Деление +4М i a1 a2
+5М Вычитание модулей +5М i a1 a2
-04 Блокировка округления -04 0 0 0
-05 Округление -05 0 0 0
-70 Получение младших разрядов произведения -70 i a1 a2
-71 Получение остатка от деления -71 i a1 a2
-72 Сложение порядков -72 i a1 a2
-73 Вычитание порядков -73 i a1 a2
-75 Нормализация -75 i a1 a2
-76 Подсчет единиц -76 i a1 a2

Операции управления округлением

После сброса ЭВМ арифметические операции выполняются с округлением, которое производится по обычным арифметическим правилам. Однако программист с помощью операций -04 и -05 имеет возможность управлять округлением результата. Никаких действий кроме изменения режима округления эти операции не производят. Результат предыдущей операции сохраняется.

Основные арифметические операции

Операции сложения, вычитания, умножения и деления имеют по восемь разновидностей: четыре модификации для операций с фиксированной запятой и столько же для операций с плавающей запятой. Способ представления операнда определяется разрядом 4 кода операции: нуль соответствует операциям с фиксированной запятой, единица — с плавающей. Два младших разряда определяют модификацию, зависящую от использования операндов и результата. Модификации были описаны выше.

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

Операции изменения порядка

Операции сложения и вычитания порядков (коды -72 и -73) в целом выполняются одинаково: в ячейке a2 знак и мантисса остаются неизменными, а порядок замещается величиной, равной сумме или разности порядков чисел в ячейках a1 и a2, причем при вычитании порядков уменьшаемое находится в a2, а вычитаемое — в a1. Результат сохраняется также в сумматоре.

Если полученный порядок имеет значение, меньше чем -63, вырабатывается признак нулевого результата. Если порядок превосходит 63, формируется “Авост”.

Операция нормализации (-75) заключается в следующем. Число в формате с фиксированной запятой из ячейки a1 нормализуется и полученная нормализованная мантисса записывается в ячейку a2+1. Порядок нормализации, т. е. количество разрядов, на которое была сдвинута мантисса, записывается в соответствующие разряды ячейки a2. Если исходное число в ячейке a1 нулевое, в ячейки a2 и a2+1 записываются нули.

Операция нормализации может использоваться для записи нулей в две смежные ячейки памяти. Для этого в качестве адреса a1 необходимо указать нуль (нулевая ячейка всегда содержит нулевой код), а в качестве адреса a2 — адрес младшей из двух обнуляемых смежных ячеек ОЗУ.

Прочие арифметические операции

Операция получения младших разрядов произведения (-70) умножает числа с фиксированной запятой из ячеек a1 и a2. Младшие 36 разрядов произведения остаются в сумматоре (запись в ОЗУ не производится). Если старшие 36 разрядов произведения отличны от нуля, вырабатывается “Авост”.

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

Операция получения остатка от деления (-71) делит число с фиксированной запятой из ячейки a2 на число из ячейки a1. Остаток от деления остается в сумматоре (запись в ОЗУ не происходит). Знак остатка совпадает со знаком делимого (числа a2). Если при делении было обнаружено переполнение, то, как и при обычном делении, вырабатывается “Авост”.

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

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

Логические операции

В эту группу команд входят собственно логические операции, операции пересылки, сдвига, циклического сложения. Они перечислены в табл. 3. В коде операции m означает, что операция имеет четыре модификации, описанные выше, и разряд 4 кода операции равен нулю, а m* означает, что операция также имеет четыре модификации, но разряд 4 кода операции равен единице.

Таблица 3

Код операции Название операции Формат команды
+0m* Исключающее ИЛИ +0m* i a1 a2
+6m Сдвиг логический +6m i a1 a2
+6m* Сдвиг арифметический +6m* i a1 a2
+7m Логическое И +7m i a1 a2
+7m* Логическое ИЛИ +7m* i a1 a2
-10 Передача кода -10 i a1 a2
-11 Передача с переменой знака -11 i a1 a2
-12 Передача модуля -12 i a1 a2
-13 Снятие кода с клавишного набора -13 i 0 a2
-14 Присвоение знака -14 i a1 a2
-15 Передача адреса из регистра -15 0 0 a2
-16 Присвоение порядка -16 i a1 a2
-74 Циклическое сложение -74 i a1 a2

Логические операции над числами

Исключающее ИЛИ (+0m*). Каждый разряд результата равен нулю в том случае, если соответствующие разряды обоих исходных операндов равны, и равен единице, если разряды исходных операндов не равны. Это свойство операции позволило разработчикам вычислительных машин серии “Минск” называть ее сравнением (результат будет равен нулю, если оба исходных операнда равны друг другу, и будет отличен от нуля, если исходные операнды не равны). Однако операция “Исключающее ИЛИ” не позволяет определить, какой из операндов больше, поэтому правильнее все же не называть ее сравнением.

Логическое И (+7m) и логическое ИЛИ (+7m*) выполняют соответствующие поразрядные операции: “Логическое И” дает нулевой разряд результата в том случае, если хотя бы один из соответствующих разрядов исходных операндов содержит нуль, и единицу, если оба исходных разряда равны единице. “Логическое ИЛИ”, наоборот, дает нулевой результат только в том случае, если оба исходных операнда равны нулю, и дает единицу, если хотя бы один исходный операнд равен единице.

Операции сдвига

Сдвиг логический (+6m). Второй операнд (ячейка a2) или результат предыдущей операции в зависимости от модификации сдвигается вправо или влево. Направление сдвига и количество разрядов, на которое сдвигается операнд, задается полем порядка первого операнда. Результат сохраняется в сумматоре и (при модификациях 0 и 2) записывается в ОЗУ.

Знак порядка в ячейке a1 определяет направление сдвига: положительное значение (нуль в разряде знака порядка) соответствует сдвигу влево, отрицательное — вправо. Величина сдвига определяется абсолютным значением порядка.

При логическом сдвиге производится сдвиг всех 37 разрядов операнда.

Сдвиг арифметический (+6m*) отличается от логического тем, что сдвигаются только 36 разрядов второго операнда, а старший, знаковый, разряд остается неизменным.

Операции пересылки

Операции передачи кодов (-10), передачи с переменой знака (-11) и передачи модуля (-12) осуществляют пересылку первого операнда на место второго, а также в сумматор. При этом операция передачи кодов передает все 37 разрядов исходного операнда без изменений; передача с переменой знака меняет знак пересылаемого числа (разряд 0) на противоположный; передача модуля обнуляет знак числа (разряд 0).

Во всех трех командах при передаче кода полного нуля вырабатывается признак нулевого результата.

Операция снятия кода с клавишного набора (-13) заносит в ячейку a2 и сумматор код, набранный на 37 переключателях пульта управления ЭВМ (нажатый переключатель соответствует единичному значению соответствующего разряда). Если все переключатели регистра клавишного набора выключены, вырабатывается признак нулевого результата.

Передача адреса из регистра (-15). Эта команда должна выполняться первой после ввода информации (программы или исходных данных) с внешнего носителя. Она заносит код, находящийся в регистре Р1, в ячейку a2. Этот код является адресом, на единицу превышающим адрес последней ячейки, заполненной информацией во время ввода с перфоленты или перфокарт.

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

Прочие операции

Операция присвоения знака (-14) присваивает числу в ячейке a2 знак числа из ячейки a1. Если получился нулевой результат, вырабатывается признак нуля.

Для присвоения положительного знака можно использовать в качестве первого операнда нулевую ячейку памяти (она всегда содержит нулевой код, который считается положительным), а для присвоения отрицательного знака — ячейку, содержащую саму команду присвоения знака, поскольку ее код отрицательный.

Операция присвоения порядка (-16) пересылает порядок числа из ячейки a1 в ячейку a2.

Циклическое сложение (-74) заключается в том, что содержимое ячеек a1 и a2 складывается, а перенос из старшего (знакового) разряда добавляется к младшему разряду результата. Эта операция обычно используется для подсчета контрольных сумм массивов информации.

Операции управления

В эту группу входят операции, влияющие на порядок выполнения команд программы (табл. 4). Сюда же относятся две команды, управляющие прерываниями (система прерываний вычислительной машины “Минск-22” будет обсуждена отдельно).

Таблица 4

Код операции Название операции Формат команды
-00 Останов машины -00 i a1 a2
-30 Безусловный переход -30 i a1 a2
-31 Переход к подпрограмме -31 i a1 a2
-32 Условный переход по знаку -32 i a1 a2
-33 Условный переход по переполнению -33 i a1 a2
-34 Условный переход по нулю -34 i a1 a2
-35 Условный переход по ключу -35 i k a2
-37 Условный переход по несовпадению -37 I a1 a2
-20 Конец цикла -20 I a1 a2
-06 Разрешение - запрещение прерываний -06 i k 0
-36 Снятие блокировки прерываний -36 i a1 a2

Останов машины (-00). По этой команде число из ячейки a1 заносится в регистр Р1, число из ячейки a2 — в сумматор, а в Р2 размещается результат предшествующей операции. После этого ЭВМ останавливается, а содержимое регистров Р1, Р2 и сумматора отображается на пульте управления.

Безусловный переход (-30). По этой команде результат предыдущей операции записывается в ячейку a2, после чего происходит переход на команду, расположенную в ячейке памяти a1.

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

Переход к подпрограмме (-31). Эта команда заносит в ячейку a2 код команды “-30 00 k+1 0000”, где k — адрес данной команды перехода к подпрограмме. Таким образом, в ячейке a2 размещается команда безусловного перехода на команду, следующую за командой перехода к подпрограмме, т. е. команда возврата из подпрограммы.

После записи в ячейку a2 команды возврата происходит переход на команду, размещенную в ячейке a1, — первую команду подпрограммы.

Условный переход по знаку (-32). По этой команде происходит передача управления команде в ячейке a1, если результат предыдущей операции положительный (старший разряд результата предыдущей операции равен нулю), и команде в ячейке a2, если результат предыдущей операции отрицательный.

Условный переход по переполнению (-33). По этой команде происходит переход на команду a1, если в результате выполнения предыдущей операции не возник признак “Авост”, и на команду a2, если возник “Авост”.

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

Условный переход по нулю (-34). По этой команде происходит переход на ячейку a1, если при выполнении предыдущей операции не был выработан признак нуля, или на ячейку a2, если признак нуля был выработан.

Условный переход по ключу (-35). По этой команде происходит переход на ячейку a2, если на пульте управления вычислительной машины включен тумблер с номером k, т. е. с номером, указанным в качестве адреса a1. Если заданный тумблер выключен, перехода не происходит, продолжается обычное выполнение программы.

Условный переход по несовпадению (-37). Эта команда используется при выводе информации на перфокарты. Код в ячейке a2 сравнивается с содержимым регистра Р2, содержащим часть кода одной строки, считанного с контролируемой карты. Если обнаружено неравенство содержимого ячейки a2 и считанного с карты кода, происходит переход на ячейку a1 и одновременно вырабатывается сигнал сбоя перфорации, по которому две карты (контролируемая и следующая за ней перфорируемая) сбрасываются в карман брака.

Для полного контроля одной строки необходимо поместить в программе три команды -37 подряд, например:

-37 00 a1 a21

-37 00 a1 a22

-37 00 a1 a23

В ячейках a21 и a22 размещается по 37 разрядов контролируемой строки перфокарты. Оставшиеся 6 разрядов размещаются в старших битах ячейки a23, а ее разряды 6-36 должны содержать нули.

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

К разрядам 13-24 и 25-36 индексной ячейки прибавляются соответствующие разряды ячейки a2, т. е. происходит изменение констант модификации адресов в индексной ячейке. Из разрядов 0-12 индексной ячейки вычитается единица. Если в результате вычитания получено отрицательное значение, продолжается обычное выполнение программы, т. е. выполняется команда, следующая за командой конца цикла. Если же получен положительный или нулевой результат, происходит переход на ячейку с адресом a1.

Таким образом, перед первым выполнением цикла в разрядах 0-12 индексной ячейки записывается величина n-1, где n — число выполнений цикла, а в разрядах 13-24 и 25-36 — начальные значения констант модификации адресов, используемых в теле цикла.

Разрешение — запрещение прерываний (-06). Эта команда разрешает или запрещает прерывания от различных внешних устройств вычислительной машины. Подробно использование прерываний будет обсуждено ниже.

Вместо адреса a1 записывается константа k, определяющая, от каких устройств прерывания будут разрешены или запрещены. Старший разряд этой константы определяет, разрешаются или запрещаются прерывания. Если он равен нулю (k < 40008), прерывания разрешаются; если единице (k > 40008) — прерывания запрещаются.

Младшие разряды определяют, для каких устройств разрешаются — запрещаются прерывания. В одной команде можно разрешить или запретить прерывания от нескольких устройств сразу; для этого необходимо сложить коды устройств, приведенные ниже, а также установить правильное значение старшего разряда константы. Используются следующие восьмеричные коды устройств:

0001 — быстропечатающее устройство и перфоратор ленты № 1;

0002 — выводная часть телетайпа и перфоратор ленты № 2;

0004 — алфавитно-цифровое печатающее устройство;

0010 — прерывание по псевдокоду;

0020 — вводная часть телетайпа.

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

При возникновении прерывания происходит передача управления на одну из следующих ячеек (адреса восьмеричные):

0020 — прерывание от быстропечатающего устройства или ленточного перфоратора № 1;

0021 — прерывание от выводной части телетайпа или ленточного перфоратора № 2;

0022 — прерывание от алфавитно-цифрового печатающего устройства;

0023 — прерывание по псевдокоду;

0024 — прерывание от вводной части телетайпа.

Снятие блокировки прерываний (-36). По этой команде содержимое ячейки a2 заносится в сумматор (становится результатом предыдущей операции), разблокируются через одну команду прерывания и происходит переход по адресу a1. Подробнее использование этой команды рассматривается в соответствующем разделе.

Операции ввода-вывода

К этой группе относятся все операции, связанные с обменом информацией между оперативной памятью и внешними устройствами. Некоторые команды, работающие с магнитными лентами, состоят из двух подряд идущих кодов операций (табл. 5).

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

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

Таблица 5

Код
операции
Название операции Формат
команды
-07 Реверс перфоленты -07 0 0 0
-50 Ввод цифровой с перфоленты -50 i 0 a2
-51 Ввод цифровой контрольный с перфоленты -51 0 0 0
-52 Ввод текстовый с перфоленты -52 i 0 a2
-53 Ввод текстовый контрольный с перфоленты -53 0 0 0
-54 Ввод с перфокарт -54 i k a2
-60 Выдача кодов на быстропечатающее устройство или перфоратор ленты № 1 -60 i s a2
-61 Выдача кодов на перфоратор ленты № 2 или телетайп -61 i s a2
-62 Вывод на АЦПУ -62 i k a2
-63 Вывод на перфокарты -63 i 0 a2
-40 Подвод зоны НМЛ в прямом направлении -40 i x
-41 Подвод зоны НМЛ в обратном направлении -41 i x
-46
-45
Чтение с магнитной ленты (поиск зоны в прямом направлении) -46 i x
-45 i k a2
-47
-45
Чтение с магнитной ленты (поиск зоны в обратном направлении) -47 i x
-45 i k a2
-46
-43
Запись на магнитную ленту (поиск зоны в прямом направлении) -46 i x
-43 i k a2
-47
-43
Запись на магнитную ленту (поиск зоны в обратном направлении) -47 i x
-43 i k a2
-46
-44
Контрольное чтение с магнитной ленты (поиск зоны в прямом направлении) -46 i x
-44 i k 0
-47
-44
Контрольное чтение с магнитной ленты (поиск зоны в обратном направлении) -47 i x
-44 i k 0
-03 Пуск - останов перфокарты -03 0 k 0
-17 Ввод с телетайпа -17 i a1 a2

Операции обращения к устройствам ввода

Для ввода информации в ЭВМ “Минск-22” используются устройство ввода с перфоленты, устройство ввода с перфокарт и телетайп (в составе телетайпа имеются клавиатура и стартстопный механизм ввода с перфоленты).

Реверс перфоленты (-07). По этой команде происходит обратная перемотка перфоленты, установленной на устройстве ввода, до первой встречи с комбинацией пробивок “начало зоны”. Во время перемотки ленты машина может продолжать вычисления.

Ввод цифровой с перфоленты (-50). Эта команда обеспечивает ввод информации с перфоленты в оперативную память с адреса a2. Вводится массив чисел, отперфорированный между двумя комбинациями “граница ввода”. Ввод производится в адресно-групповом режиме.

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

Ввод цифровой контрольный с перфоленты (-51). По этой команде информация считывается с перфоленты таким же образом, как и в команде -50, и производится накопление контрольной суммы, но запись информации в ОЗУ не производится. Эта команда используется для контроля правильности считывания информации с перфоленты по команде -50.

Ввод текстовый с перфоленты (-52). По этой команде текстовая информация, нанесенная на перфоленту между двумя границами ввода, заносится в групповом режиме в память, начиная с адреса a2. В процессе ввода в сумматоре формируется контрольная сумма. В регистре Р1 по окончании операции находится адрес следующей за введенным массивом ячейки.

Ввод текстовый контрольный с перфоленты (-53). Эта команда производит чтение текстовой информации с перфоленты между двумя границами ввода и подсчет контрольной суммы, но не записывает считываемую информацию в память. Она используется для контроля ввода информации по команде -52.

Ввод с перфокарт (-54). Эта команда обеспечивает ввод содержимого одной или нескольких перфокарт и запись введенной информации в память, начиная с адреса a2.

Старший разряд константы k (разряд 13 кода команды) определяет способ ввода информации: в коде перфокарт (разряд 13 равен нулю, т. е. k < 4000) или в формате копии карт (разряд 13 равен единице, т. е. k > 4000). Когда производится ввод информации в коде перфокарт, перед информационными картами должна размещаться форматная карта.

Количество вводимых карт задается младшими разрядами константы k (разряды 16-24 кода команды) и не может превышать 7778. Оставшиеся два разряда константы k (разряды 14 и 15 кода команды) должны содержать нули.

Ввод с телетайпа (-17). По этой команде содержимое ячейки a2 сдвигается на число разрядов, указанное в ячейке a1, после чего в разряды 32-36 ячейки a2 с помощью операции “Логическое ИЛИ” заносится пятиразрядный код, соответствующий нажатой клавише клавиатуры телетайпа или очередной строке перфоленты, установленной в стартстопном механизме.

В отличие от других устройств ввода, телетайп поддерживает работу с использованием механизма прерываний.

Операции обращения к устройствам вывода

Для вывода информации используются быстропечатающее устройство (печать цифрового материала), два ленточных перфоратора (перфоратор № 1 предназначен для вывода цифровой информации, № 2 — текстовой), телетайп, алфавитно-цифровое печатающее устройство и устройство вывода на перфокарты. Все перечисленные устройства обеспечивают работу с использованием механизма прерываний.

Вывод цифровых кодов (-60). Эта команда обеспечивает вывод информации на быстропечатающее устройство или перфоратор № 1. Устройство вывода и формат выводимой информации определяется константой s, находящейся на месте адреса a1. Осуществляется печать или перфорация содержимого ячейки с адресом a2.

Константа s может принимать следующие восьмеричные значения:

0400 — печать десятичных чисел с плавающей запятой (разряды, тетрады которых образуют недопустимый код, при печати пропускаются);

1000 — перфорация цифрового кода в восьмеричной системе счисления;

1400 — печать восьмеричных чисел;

2000 — перфорация цифрового кода в десятичной системе счисления;

2400 — печать десятичных чисел с фиксированной запятой;

3000 — перфорация комбинации “запись”;

3400 — протяжка бумаги на одну строку без печати;

4000 — перфорация цифры или буквы русского — содержимого разрядов 1-6 ячейки a2;

5000 — перфорация текста (цифры и русские буквы) из ячейки a2;

6000 — перфорация текста (цифры и латинские буквы) из ячейки a2.

Вывод на АЦПУ (-62). По этой команде происходит занесение в буферный накопитель АЦПУ содержимого ячейки a2 или печать содержимого накопителя в одной строке. Накопитель АЦПУ содержит 128 ячеек — по одной для каждого символа строки.

Разряды кода команды 7 и 17 не используются и должны содержать нули (разряд 17 должен оставаться нулевым и после модификации с помощью индексной ячейки, если такая модификация используется).

Поле первого адреса (разряды 13-24) разбито на три подполя:

  • разряды 13-15 определяют форму представления информации при выводе на АЦПУ;
  • разряд 16 указывает, выполняется ли занесение в буферный накопитель информации или печать содержимого буферного накопителя;
  • разряды 18-24 определяют адрес ячейки буферного накопителя.

Когда разряд 16 равен нулю, производится занесение информации из ячейки ОЗУ a2 в ячейки накопителя, начиная с указанной разрядами кода команды 18-24. Способ перекодировки информации, хранящейся в оперативной памяти, определяется содержимым разрядов кода команды 13-15:

0 — занесение десятичного числа с плавающей запятой (требуется 13 ячеек буферного накопителя);

1 — занесение восьмеричного числа (требуется 15 ячеек буферного накопителя);

2 — занесение десятичного числа с фиксированной запятой (требуется 12 ячеек буферного накопителя);

3 — занесение десятичного числа с фиксированной запятой с блокировкой знака и ведущих нулей (требуется 12 ячеек буферного накопителя);

4 — занесение русского символа (разряды 1-6 ячейки a2 содержат код русского символа, заносимого в адресуемую ячейку буферного накопителя АЦПУ);

5 — занесение русского текста (требуется 6 ячеек буферного накопителя);

6 — занесение латинского символа (разряды 1-6 ячейки a2 содержат код латинского символа, заносимого в адресуемую ячейку буферного накопителя АЦПУ);

7 — занесение латинского текста (требуется 6 ячеек буферного накопителя).

Во время выполнения перекодировки информации из внутреннего кода машины в код АЦПУ и заполнения ячеек буферного накопителя процессор ЭВМ может продолжать вычисления.

Когда разряд 16 равен единице, в зависимости от значения разрядов 13-15 выполняются определенные действия с буферным накопителем и печатающим механизмом. Разряды 13-15 могут принимать следующие значения:

1 — протяжка бумаги на одну строку (содержимое буферного накопителя не изменяется);

2 — гашение буферного накопителя (в каждую ячейку накопителя заносится код символа “пробел”, никаких действий на печатающем механизме не выполняется);

5 — печать без гашения с протяжкой бумаги;

6 — печать с гашением без протяжки бумаги;

7 — печать с гашением и протяжкой бумаги.

Вывод на телетайп или перфоленту № 2 (-61). По этой команде происходит печать на телетайпе символа, код которого находится в разрядах 1-6 ячейки a2, или перфорация его на ленте № 2. Вид выводимого символа и устройство вывода определяются константой s, находящейся в поле первого адреса:

40008 — перфорируется цифра или русская буква;

44008 — печатается цифра или русская буква;

60008 — перфорируется цифра или латинская буква;

64008 — печатается цифра или латинская буква.

В одной строке может быть напечатано до 72 знаков.

Пуск — останов перфокарты (-03). По этой команде в зависимости от кода k выполняются следующие действия:

00008 — происходит пуск подачи карт на выходном перфораторе и блокируются все прерывания;

40008 — происходит останов подачи карт на выходном перфораторе и снимается блокировка прерываний.

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

Команда пуска — останова используется непосредственно перед выполнением вывода на перфокарты для пуска перфоратора и после завершения вывода для его останова.

Вывод на перфокарты (-63). Эта команда обеспечивает вывод части одной строки перфокарты. Для вывода полностью одной строки необходимо использовать подряд три команды -63. При этом первая и вторая команды выводят по 37 колонок одной строки, а третья команда выводит оставшиеся шесть колонок, информация для которых располагается в разрядах 0-5 адресуемой ячейки оперативной памяти.

Обычно сразу выводится содержимое 36 ячеек памяти, что соответствует всем 12 строкам перфокарты.

Операции с накопителями на магнитной ленте

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

Предварительная команда (-46 и -47). Команда с кодом -46 используется при движении ленты в прямом направлении, команда с кодом -47 — при движении ленты в обратном направлении.

В предварительных командах разряды 7, 8, 13, 16 и 19 кода команды не используются и должны содержать нули. В разрядах 14-15 содержится номер шкафа НМЛ, в разрядах 17-18 — номер лентопротяжного механизма.

Разряды 20-25 содержат номер зоны магнитной ленты, а разряды 26-36 — номер ячейки в зоне, с которой начинается выполнение операции. Каждая лента разбита на 64 зоны по 2048 ячеек. Подвод к нужной зоне осуществляется путем перемещения ленты вперед или назад.

Сразу за предварительной командой следует одна из команд чтения или записи (коды -43, -44, -45).

Чтение с магнитной ленты (-45). По этой команде происходит передача k ячеек с магнитной ленты в оперативную память, начиная с ячейки с адресом a2. Одновременно в сумматоре формируется контрольная сумма переписываемых кодов.

Контрольное чтение с магнитной ленты (-44). Операция выполняется аналогично предыдущей, но запись прочитанной информации в ОЗУ не происходит. Эта команда позволяет подсчитать контрольную сумму информации на магнитной ленте.

Запись на магнитную ленту (-43). Эта команда выполняет запись содержимого k ячеек ОЗУ, начиная с адреса a2, на магнитную ленту.

Подвод зоны в прямом направлении (-40). Структура кода этой команды аналогична предварительным командам -46 и -47. Разница заключается в том, что разряды 26-36 кода команды не используются, так как эта команда выполняет подвод ленты к заданной зоне, а не ячейке. Пока НМЛ осуществляет перемотку ленты, машина может продолжать вычисления.

Подвод зоны в обратном направлении (-41). Эта команда полностью аналогична предыдущей и отличается от нее только направлением движения ленты.

Система прерываний

Как уже отмечалось, вычислительная машина “Минск-22” обеспечивает для некоторых внешних устройств работу с использованием прерываний, что позволяет эффективно совмещать вычисления с работой внешних устройств.

Прерывания могут возникать по следующим причинам:

  • при свободном быстропечатающем устройстве или перфораторе № 1 (вектор прерывания 0020);
  • при свободном перфораторе № 2 или печатающем механизме телетайпа (вектор прерывания 0021);
  • при свободном алфавитно-цифровом печатающем устройстве (вектор прерывания 0022);
  • при появлении в программе псевдокода, т. е. инструкции с кодом операции от -21 до -27 (вектор прерывания 0023);
  • при нажатии клавиши на клавиатуре телетайпа (вектор прерывания 0024).

Как видно из приведенного списка, устройства ввода (кроме телетайпа), устройство вывода на перфокарты и накопители на магнитных лентах не используют прерываний.

Можно произвольно разрешить прерывания по одним причинам и запретить по другим. Для этого используется команда с кодом операции -06. Когда прерывание запрещено, оно сохраняется в ожидании обработки.

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

  • прерывание по псевдокоду;
  • прерывание от клавиатуры телетайпа;
  • прерывание от АЦПУ;
  • прерывание от печатающего механизма телетайпа или перфоратора № 2;
  • прерывание от быстропечатающего устройства или перфоратора № 1.

Когда происходит одно прерывание, последующие прерывания блокируются. Блокировка может быть снята с помощью команды -36, которая также служит для возврата управления прерванной программе. Следует отметить, что блокировка прерываний не запрещает прерывания аналогично команде -06, а лишь задерживает их обработку до снятия блокировки командой -36.

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

  1. В ячейку вектора прерывания (0020-0024) записывается команда перехода к подпрограмме -31, обеспечивающая сохранение адреса возврата в ячейке памяти с адресом a2 (эта ячейка содержит команду -36, завершающую программу обработки прерывания) и переход к программе по адресу a1.
  2. Первой командой программы обработки прерывания является команда -30, сохраняющая содержимое сумматора, т. е. результат последней команды, выполненной до возникновения прерывания, в ячейке с адресом a2 (этот адрес указывается в команде -36, завершающей программу обработки прерывания) и производящая переход на адрес a1. Обычно это адрес следующей команды.
  3. Далее следуют команды, обеспечивающие обработку прерывания.
  4. Последней командой программы обработки прерывания является команда снятия блокировки -36, загружающая сумматор содержимым ячейки с адресом a2 и выполняющая переход по адресу a1.

Особенности режима Т

Режим работы Т был введен для устранения недостатков, присущих ранним вариантам вычислительной машины “Минск-22”, к числу которых относятся: разрыв адресов памяти в коде команды, невозможность организации циклов с числом повторений более 4095 с помощью команды -20, невозможность уменьшения адресов с помощью индексных ячеек и др.

Отличительными признаками режима Т являются:

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

Режим Т включается специальным тумблером на пульте управления ЭВМ. Когда этот тумблер выключен, машина работает в обычном режиме.

Формат кода команды

Разряды 0-6, как и в обычном режиме, занимает код операции.

Разряды 7-10 задают адрес индексной ячейки. Если они равны нулю, индексная ячейка не используется.

Разряды 11-23 определяют адрес первого операнда.

Разряды 24-36 определяют адрес второго операнда.

Формат индексной ячейки

Разряды 0-10 используются командой -20 для кодирования числа повторений цикла (не более 2048).

Разряды 11-23 содержат величину изменения первого адреса в коде команды.

Разряды 24-36 содержат величину изменения второго адреса в коде команды.

Изменения в системе команд

Разрешение и запрещение округления (-04). Эта команда соответствует командам округления и блокировки округления в основном варианте. Запрещением или разрешением округления управляет константа, записанная в поле первого адреса (разряды 11-23 кода команды):

020008 — разрешение округления;

120008 — запрещение округления.

Управление циклом (-20). Исполнение этой команды по сравнению с основным вариантом изменилось в связи с изменением формата индексной ячейки (допускается 2048 повторений и переадресация во всем диапазоне адресов).

Условный переход по ключу (-35). Смысл команды остался прежним, изменилась только нумерация ключей в поле первого адреса: код 00001 соответствует ключу № 1, код 00002 — ключу № 2 и т. д. Ключу № 7 соответствует код 001008.

Разрешение (запрещение) прерывания (-06). Значения константы в поле первого адреса приведены в табл. 6.

Таблица 6

Разрешение прерывания Запрещение прерывания Причина прерывания
00001 10001 Вывод на телетайп или ленточный перфоратор № 2
00002 10002 Вывод на АЦПУ
00004 10004 Псевдокод
00010 10010 Ввод с телетайпа
00020 10020 Вывод на быстропечатающее устройство или ленточный перфоратор № 2

Разряды 12-18 и 24-36 кода команды должны быть нулевыми. В остальном эта команда не отличается от своего основного варианта.

Ввод с перфокарт (-54). Режим ввода задается константой в поле первого адреса:

00000+k — ввод по форматной карте;

10000+k — ввод копии карт;

01000+k — ввод карт сплошной.

Здесь k — количество вводимых карт.

Выдача кодов на печать или перфоленту (-60). Константа, находящаяся в поле первого адреса, определяет формат вывода информации из ячейки a2:

00200 — вывод на печать десятичного числа с плавающей запятой;

00600 — вывод на печать восьмеричного числа;

01200 — вывод на цифровую печать десятичного числа с фиксированной запятой;

01600 — пропуск строки;

00400 — вывод на перфоленту восьмеричного числа;

01000 — вывод на перфоленту десятичного числа;

01400 — вывод на перфоленту комбинации “запись”;

02000 — вывод на перфоленту русского символа;

02400 — вывод на перфоленту русского текста;

03000 — вывод на перфоленту латинского символа;

03400 — вывод на перфоленту латинского текста.

Вывод на телетайп или перфоленту (-61). Порядок выполнения команды не изменился. Константа на месте первого адреса определяет выводное устройство и вид информации:

02000 — вывод на перфоленту русского символа;

02200 — вывод на телетайп русского символа;

03000 — вывод на перфоленту латинского символа;

03200 — вывод на телетайп латинского символа.

Вывод на АЦПУ (-62). Константа на месте первого адреса определяет выполняемую операцию и адрес буферного накопителя (k):

00000+k — занесение в буфер десятичного числа с плавающей запятой;

00400+k — занесение в буфер восьмеричного числа;

00600 — протяжка бумаги;

01000+k — занесение в буфер десятичного числа с фиксированной запятой;

01200 — гашение буфера;

01400+k — занесение в буфер десятичного числа с блокировкой знака и лидирующих нулей;

02000+k — занесение в буфер русского символа;

02400+k — занесение в буфер русского текста;

02600 — печать строки с протяжкой бумаги без гашения буфера;

03000+k — занесение в буфер латинского символа;

03200 — печать строки с гашением буфера;

03400+k — занесение в буфер латинского текста;

03600 — печать строки с протяжкой бумаги и гашением буфера.

Пуск — останов перфокарты (-03). Использование этой команды не изменилось. Выполняемая функция определяется константой в поле первого адреса:

00000 — пуск карты;

10000 — останов карты.

Ввод копии перфоленты (-52). В поле первого адреса должна содержаться константа 10000. По этой команде выполняется ввод информации с перфоленты в символьном коде. Каждые шесть символов записываются в одну ячейку памяти, начиная с ячейки a2.

Счетчик цикла (-22). Это новая команда режима Т. Она вычитает из ячейки a2 единицу. Если до вычитания эта ячейка содержала нуль, управление передается следующей по порядку команде, в противном случае управление получает команда a1. Содержимое ячейки a2 рассматривается как двоичная целая положительная величина.

Эта команда в отличие от обычной команды организации цикла с кодом -20 позволяет организовать до 8192 повторений.

Использование команд с кодами операций -01, -02, -05, -42, -53, -56, -57, -64, -65, -66, -77 недопустимо. Если при выполнении программы будет встречен один из этих кодов, вычислительная машина перейдет в останов.

Устройства ввода — вывода

Ввод информации в вычислительную машину “Минск-22” осуществляется с перфоленты, перфокарт или с клавиатуры телетайпа; вывод информации производится на перфоленту, перфокарты, быстропечатающее устройство, АЦПУ или телетайп.

Перфоленточные устройства

Наиболее распространенным носителем информации для ЭВМ “Минск-22” является бумажная пятидорожечная перфолента (лента имеет также шестую дорожку, которая предназначена для синхронизации и содержит отверстия в каждой строке). Наличие пробивки в той или иной позиции на ленте соответствует логической единице, отсутствие пробивки — нулю.

Информация на перфоленте может быть закодирована либо в цифровом коде машины, либо в международном телеграфном коде М-2.

Цифровой код машины

Пробивки, соответствующие цифровому коду машины, представлены в табл. 7. В ней же приведено кодирование информации в коде М-2, обсуждаемое в следующем подразделе.

Таблица 7

Код Значение в цифровом коде Значение в коде М-2
    русский латинский цифровой
00000 0 Русский регистр
00001 1 Т T 5
00010 2 Возврат каретки
00011 3 О O 9
00100 4 Пробел
00101 5 Х H Щ
00110 6 Н N ,
00111 7 М M .
01000 8 Перевод строки
01001 9 Л L )
01010 + восьмеричный Р R 4
01011 - восьмеричный Г G Ш
01100 + десятичный И I 8
01101 - десятичный П P 0
01110 Запятая Ц C :
01111 Десятичный пробел Ж V =
10000 Пробел Е E З
10001 Передача адреса З Z +
10010 Пробел Д D Кто там
10011 Передача адреса Б B ?
10100 Пробел С S ' (апостроф)
10101 Передача адреса Ы Y 6
10110 Пробел Ф F Э
10111 Передача адреса Ь X /
11000 Запись А A -
11001 Пробел В W 2
11010 Запись Й J Ю
11011 Пробел Цифровой регистр
11100 Запись У U 7
11101 Пробел Я Q 1
11110 Запись К K (
11111 Граница ввода (вместе с нулем) Латинский регистр

Цифровые коды для обозначения восьмеричных и десятичных чисел одни и те же. Для того чтобы различать эти числа, используются обозначения знаков (десятичные и восьмеричные плюс и минус).

Перфорация каждого числа начинается со знака. Если знак отсутствует, то считается, что отперфорировано восьмеричное положительное число. Затем следуют цифры, между которыми допустимо набивать пробелы (всего можно указывать до 12 цифр). Последним перфорируется код “запись”, указывающий окончание числа.

Комбинация пробивок 11111 и 00000, следующих подряд, используется для обозначения начала и конца зоны, т. е. участка информации на перфоленте.

В режиме T восьмеричная информация кодируется несколько другим способом. Для кодирования одного числа используется знак и 14 цифр. Первые две цифры совместно со знаком образуют разряды 0-6 кода команды, следующие две — разряды 7-10 (адрес индексной ячейки). Затем идут два адреса операндов по пять цифр (разряды 11-23 и 24-36). После этого перфорируется код “запись”.

Международный телеграфный код М-2

Текстовая информация на перфоленте может быть представлена с помощью международного телеграфного кода М-2. Поскольку пятидорожечная перфолента позволяет кодировать только 32 символа, что явно недостаточно, все символы поделены на три группы: цифровую, русскую и латинскую (часть русских букв находится в цифровой группе). Три кода (00000, 11011 и 11111) используются для переключения регистров. Для определения начала зоны подряд пробиваются коды 00000 и 11111, а для определения конца зоны — коды 11111 и 00000. Перед концом зоны рекомендуется пробивать пять пробелов, что связано с особенностями ввода информации в вычислительную машину.

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

Ввод информации с перфоленты в вычислительную машину

Ввод информации, подготовленной в цифровом коде, возможен в трех режимах: адресном, групповом и адресно-групповом.

При адресном вводе перед каждым кодом числа перфорируется адрес ячейки памяти (ведущие нули не обязательны), код “передача адреса”, а затем само число и код “запись”. Вычислительная машина в процессе ввода информации затем заносит адрес в регистр Р1. Встретив комбинацию “передача адреса”, машина передает адрес из регистра Р1 в регистр адреса ОЗУ и очищает Р1. Затем в регистр Р1 заносится число, пробитое на перфоленте. По коду “запись” производится запись содержимого Р1 по адресу, находящемуся в регистре адреса ОЗУ, после чего цикл ввода повторяется.

В групповом режиме числа перфорируются на ленте без адресов. Адрес первой ячейки, заполняемой при вводе, указывается в команде ввода с перфоленты либо заносится в регистр адреса ОЗУ с пульта управления вычислительной машиной (последнее используется обычно при начальной загрузке программы с перфоленты). Каждое число на перфоленте заносится в регистр Р1, а по коду “запись” записывается в ОЗУ по адресу, находящемуся в регистре адреса ОЗУ. После записи содержимое регистра адреса увеличивается на единицу.

Адресно-групповой режим является комбинацией двух предыдущих. На ленте перфорируется адрес первой ячейки памяти и код “передача адреса”, а затем следуют числа. Далее возможен новый адрес с кодом “передача адреса” и очередная группа чисел и т. п.

Ввод информации в коде М-2 возможен только в групповом режиме.

Встретив очередной символ, машина заносит его код, пробитый на ленте, в разряды 32-36 регистра Р1. В разряд 31 заносится единица, если символ пробит в буквенном регистре, или нуль, если он пробит в цифровом регистре. После этого содержимое Р1 сдвигается влево на шесть разрядов и производится ввод с перфоленты очередного символа. Знаковый (нулевой) разряд Р1 всегда остается нулевым. По окончании ввода шестого символа содержимое Р1 записывается в память по адресу в регистре адреса ОЗУ, после чего содержимое этого регистра увеличивается на единицу.

Ввод заканчивается с обнаружением комбинации “конец зоны”. Чтобы избежать при этом потери информации, перед концом зоны следует пробивать пять пробелов.

Как видно из приведенного описания, вычислительная машина “Минск-22” не различает русские и латинские символы, поэтому программа должна сама “знать”, какую информацию она обрабатывает.

Перфокарточные устройства

Кодировка информации

Кроме перфоленты, вычислительные машины “Минск-22” могут использовать стандартные 80-колоночные перфокарты. Информация на картах набивается в специальном коде перфокарт. Кроме того, возможен режим ввода копии карт без перекодировки.

В табл. 8 приведена кодировка символов в коде перфокарт.

Таблица 8

Символ Пробивка
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
+ 0-2-8
- 0-3-8
/ 0-4-8
, 0-5-8
. 0-6-8
Пробел 0-7-8
Десятичный 12
^ 12-0-1
( 12-0-2
) 12-0-3
x 12-0-4
= 12-0-5
; 12-0-6
[ 12-0-7
] 12-0-8
* 12-0-9
' 12-2-8
' 12-3-8
? 12-4-8
< 12-5-8
> 12-6-8
: 12-7-8
А 11
Б 11-0-1
В 11-0-2
Г 11-0-3
Д 11-0-4
Е 11-0-5
Ж 11-0-6
З 11-0-7
И 11-0-8
Й 11-0-9
К 11-2-8
Л 11-3-8
М 11-4-8
Н 11-5-8
О 11-6-8
П 11-7-8
Р 12-11-0
С 12-11-1
Т 12-11-2
У 12-11-3
Ф 12-11-4
Х 12-11-5
Ц 12-11-6
Ч 12-11-7
Ш 12-11-8
Щ 12-11-9
Ы 12-11-0-2-8
Ь 12-11-0-3-8
Э 12-11-0-4-8
Ю 12-11-0-5-8
Я 12-11-0-6-8
Выделение 12-11-0-7-8

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

Ввод информации в память ЭВМ

При вводе копии карт первая колонка перфокарты попадает в разряды 1-12 ячейки памяти, вторая — в разряды 13-24, третья — в разряды 25-36. Разряд 0 содержит нуль. Следующие три колонки перфокарты попадут в следующую ячейку памяти и т. д.

Для ввода целой перфокарты требуется 27 ячеек памяти. В последней ячейке разряды 25-36 остаются неиспользованными.

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

При вводе информации в восьмеричном виде в первой колонке первой карты, называемой форматной картой, пробивается комбинация 12-6-8-9. Далее следуют неотперфорированные колонки, соответствующие колонкам, в которых будут содержаться знаки и цифры восьмеричных чисел. В последней колонке каждого числового поля перфорируется признак записи — пробивка в первой строке. Например, если предыдущий признак записи был отперфорирован в 28-й колонке, а следующий — в 41-й, знак числа на информационных перфокартах должен находиться в 29-й колонке, а цифры — в колонках с 30-й по 41-ю.

Помимо пробивок “запись” на форматной карте могут существовать пробивки “пропуск” (12-11). Колонки информационных карт, которым соответствуют признаки пропуска, при вводе карт игнорируются. Пропускаются также все последующие колонки до тех пор, пока на форматной карте не встретится признак “конец пропуска” — пробивка в 12-й строке.

Форматные карты для ввода десятичной и символьной информации выглядят аналогично. Разница заключается в первой колонке: для десятичных чисел в ней пробивается комбинация 12-7-8-9, а для символьной информации — 11-7-8-9.

Режим сплошного ввода обеспечивается только в режиме Т. В этом режиме шесть подряд расположенных колонок перфокарты преобразуются в символы и заносятся в очередную ячейку памяти. Если в какой-либо колонке отсутствуют пробивки, на месте соответствующего символа будет находиться комбинация 111111. Знаковый разряд ячейки остается равным нулю. В этом режиме на одну перфокарту требуется 14 ячеек памяти, причем в последней ячейке используются только разряды 24-36, соответствующие 79-й и 80-й колонкам карты.