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

Обзор архитектуры и системы команд мини-ЭВМ СМ-2М

1. Общие сведения

Комплексы СМ-2М появились в процессе развития первой отечественной управляющей ЭВМ М-6000 и завершили архитектурную линию машин, в основу которой был положен интерфейс “Сопряжение 2К”. Они программно совместимы “снизу вверх” с предшествующими им вычислительными машинами типов М-6000, М-7000, СМ-1, СМ-2, а также некоторыми другими. Несколько сокращенная система команд ЭВМ СМ-2М реализована в микропроцессорах СМ-50/60, на базе которых было создано несколько моделей микро-ЭВМ.

ЭВМ СМ-2М состоит из одного или двух центральных процессоров (ЦП), оперативного запоминающего устройства (ОЗУ) емкостью от 64 до 256 Кб, одного или двух блоков контроля, одного-трех согласователей ввода-вывода (СВВ), двух каналов прямого доступа в память (КПДП) и набора внешних устройств.

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

Оперативное запоминающее устройство выполнено в виде автономных комплексных блоков (кубов) памяти по 64 Кб в каждом. В составе комплекса может использоваться до четырех таких АКБ.

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

Согласователь ввода-вывода предназначен для подключения к вычислительной машине внешних устройств. Конструктивно СВВ выполнен в виде каркасного блока и имеет 16 мест для размещения интерфейсных блоков (БИФ), посредством которых подключаются внешние устройства, или самих внешних устройств. В состав вычислительной машины может входить до трех согласователей, содержащих в общей сложности 48 интерфейсных мест и 4 места для работы с каналом прямого доступа в память в селекторном режиме. Если 48 интерфейсных мест оказывается недостаточно, а также в тех случаях, когда внешние устройства должны быть удалены от вычислительного комплекса на значительное расстояние (до 3 км), используют мультиплексные разветвители интерфейса (РИМ). Всего через цепочку СВВ-РИМ к ЭВМ можно подключить до 1512 внешних устройств.

Канал прямого доступа в память предназначен для быстрого обмена информацией между ОЗУ и внешними устройствами без участия процессора. Максимальная скорость передачи данных достигает 1,4 млн. байт в секунду. Каждый из двух каналов, входящих в состав ЭВМ, имеет четыре подканала, и каждый подканал может обслуживать любое внешнее устройство, подключенное к СВВ. Сеанс обмена информацией начинается по команде процессора и продолжается без его участия. С точки зрения программиста КПДП представляет собой как бы один канал с восемью подканалами.

К внешним устройствам (ВУ) относятся накопители на магнитных дисках и магнитных лентах, устройства отображения (дисплеи и печатающие устройства), таймеры, устройства связи с объектами и др.

На вычислительных комплексах СМ-2М функционируют агрегатная система программного обеспечения (АСПО), операционная система вычислительной сети (ОС ВС) и распределенная операционная система (РОС). Последние две системы обеспечивают работу многомашинных вычислительных комплексов.

2. Архитектура процессора и памяти ЭВМ СМ-2М

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

Процессор ЭВМ СМ-2М обеспечивает обработку 16-разрядных двоичных чисел. В машинах М-6000 не были предусмотрены команды обработки отдельных байтов. Такие команды появились только в СМ-2М; они входят в так называемый дополнительный набор команд.

Разряды в машинном слове нумеруются слева направо от 0 до 15. Нулевой (старший) разряд обычно содержит знак числа. Для представления чисел со знаком используется общепринятый дополнительный код. Для удобства записи машинных кодов принята восьмеричная система счисления.

Для представления символьной информации служат код КОИ-7. Код каждого символа занимает один байт, старший разряд которого всегда равен нулю. Таблица кодов КОИ-7 приведена в приложении.

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

Знак порядка вещественного числа расположен в 31-м (младшем) разряде двойного слова, а сам порядок в дополнительном коде размещается в разрядах 24-30. Таким образом, порядок может изменяться в диапазоне от -128 до +127, а диапазон нормализованных чисел, представимых в машине, составляет по модулю от 2,9в10-39 до 1,6в1038.

2.2. Регистры процессора

Процессор ЭВМ СМ-2М имеет 13 программно доступных регистров различной длины.

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

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

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

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

Индексные регистры (РИ1 и РИ2, иначе обозначаемые X и Y) имеют по 16 разрядов и предназначены для формирования адресов операндов арифметико-логических команд при использовании определенных видов адресации. ЭВМ М-6000 не имела индексных регистров.

Регистр базы непривилегированного состояния (РБ1) имеет 8 разрядов, предназначенных для формирования абсолютного адреса памяти при работе процессора в непривилегированном режиме. Этот регистр отсутствовал в М-6000.

Регистр базы привилегированного состояния (РБ2) имеет два разряда и используется для формирования абсолютного адреса памяти при работе процессора в привилегированном режиме. Этот регистр также отсутствовал в М-6000.

Регистры верхней и нижней границ (РВГ и РНГ) имеют по 8 разрядов и обеспечивают защиту памяти. Их не было в М-6000.

Регистр адреса возврата (РАВ) имеет 15 разрядов и хранит адрес команды, которой необходимо вернуть управление при завершении подпрограммы или прерывания.

Триггер состояния (ТС) задает состояние процессора: привилегированное (равен нулю) или непривилегированное (равен единице).

2.3. Слово состояния программы

Слово состояния программы (ССП) содержит основную информацию, характеризующую текущее состояние процессора. Оно имеет длину 32 бита. Назначение разрядов ССП следующее:

  • разряд 0 — регистр расширения РР;
  • разряд 1 — регистр переполнения РП;
  • разряд 2 — триггер состояния ТС;
  • разряды 3 и 4 — номер процессора. Содержат 00 для первого процессора и 11 для второго процессора;
  • разряды 5-7 не используются, их содержимое не определено;
  • разряды 8-15 — регистр базы непривилегированного состояния РБ1;
  • разряд 16 всегда содержит 0;
  • разряды 17-31 — регистр номера команды РНК.

2.4. Организация памяти

Оперативная память вычислительных комплексов СМ-2М компонуется из модулей по 32К слова (64 Кб); максимальное количество модулей составляет четыре, что определяет предельный объем ОЗУ в 128К слов.

Для адресации ячеек памяти используется 17-разрядный адрес, в котором старшие два разряда задают номер модуля (куба) памяти, а младшие 15 — номер слова в кубе. Адресация отдельных байтов не предусмотрена. 17-разрядный адрес ячейки называется абсолютным адресом.

Система команд СМ-2М, совместимая с системой команд комплексов М-6000, позволяет использовать только 15-разрядные адреса, называемые относительными, что ограничивает адресуемый объем памяти 32К словами (именно таким был максимальный объем ОЗУ у вычислительной машины М-6000). Для расширения объема памяти до 128К слов используются базовые регистры РБ1 и РБ2.

При работе ЭВМ в привилегированном режиме (ТС=0) 2 разряда регистра базы РБ2 добавляются слева к 15-разрядному относительному адресу, что дает 17-разрядный абсолютный адрес. Исключением является автоиндексация, когда абсолютный адрес операнда определяется с помощью регистра базы непривилегированного состояния РБ1 (см. ниже). Автоиндексация описана в следующей главе вместе с другими видами адресации.

При работе ЭВМ в непривилегированном режиме (ТС=1) 15-разрядный относительный адрес дополняется слева двумя нулевыми разрядами, а 8-разрядное значение регистра базы РБ1 — справа девятью нулями. Оба полученных 17-разрядных адреса складываются, в результате чего получается абсолютный адрес ячейки.

Таким образом, начальный адрес привилегированного раздела памяти кратен 32К словам, а начальный адрес непривилегированного раздела — 512 словам. Обычно в привилегированном режиме работают программы операционной системы, а в непривилегированном — прикладные программы пользователей ЭВМ.

Регистры верхней и нижней границы памяти (РВГ и РНГ) используются для защиты памяти при работе процессора в непривилегированном режиме. РНГ задает абсолютный адрес памяти в 512-словных блоках, начиная с которого программа может выполнять запись в память. РВГ задает абсолютный адрес в 512-словных блоках, начиная с которого программа уже не может выполнять запись в память. Таким образом, для записи программе доступны ячейки памяти, находящиеся в 512-байтовых блоках, начиная с заданного в РНГ и кончая, но не включая, заданным в РВГ.

Обычно в РНГ загружается номер блока, на 2 превышающий номер, указанный в РБ1. Это связано с особенностями режимов адресации ЭВМ СМ-2М и с тем, что первое килослово раздела памяти, предназначенного для задачи пользователя, используется операционной системой для управления этой задачей и для связи с ней. Чтобы исключить возможность порчи содержимого этого первого килослова, оно защищается установкой в РНГ номера третьего блока раздела памяти, благодаря чему первые два блока оказываются защищенными от записи со стороны задачи. При таком использовании защиты памяти минимальный размер раздела для задачи составит 1,5К слова, из которых только 512 слов может занять сама программа, что на практике является недостаточным. Максимальный размер раздела составляет 32К слова, из которых 31К слово может занимать программа.

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

При возникновении того или иного прерывания управление передается ячейке в привилегированном разделе (т. е. в разделе, базовый адрес которого находится в РБ2). Номер ячейки, т. е. адрес вектора прерывания, зависит от причины прерывания.

Падение напряжения в сети ниже определенного значения (авария источника электропитания) вызывает прерывание по вектору 4.

Прерывание по обращению к супервизору (команда SVC, иначе кодируемая как STC 6), вызывает переход на ячейку 6.

Прерывания от устройств ввода-вывода (при возникновении сигнала ГТ-Т) вызывают переход на ячейку, адрес которой равен коду выборки соответствующего устройства, т. е. коду выборки, используемому согласователем ввода-вывода для обращения к этому устройству. Если устройство подключено через разветвитель ввода-вывода РИМ, используется код выборки, соответствующий разветвителю, а не самому устройству. Таким образом, группа устройств, подключенных к одному РИМу, вызывает прерывание по одному и тому же вектору.

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

Предусмотрена возможность программной блокировки прерываний от устройств с конкретными кодами выборки. Это достигается использованием команд STF и CLF, изменяющих состояние триггеров запрета прерываний в согласователях ввода-вывода. В исходом состоянии эти триггеры разрешают прерывания от всех устройств, но процессор блокирует распознавание любых прерываний ввода-вывода.

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

При возникновении прерывания от схем контроля (вектор 5) формируются основное и дополнительное управляющие слова прерывания (УСП). Основное УСП может быть загружено в регистр РА или РБ с помощью команд ввода-вывода LIA, LIB, MIA или MIB с кодом выборки 5. Дополнительное УСП может быть загружено в РА с помощью команды дополнительного набора LES.

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

Разряды основного УСП имеют следующее назначение:

  • разряд 0 — обращение с помощью прямой адресации к устройству ввода-вывода, выдавшему сигнал КОП-Т;
  • разряд 1 — нарушение защиты памяти;
  • разряд 2 — попытка выполнения привилегированной команды в непривилегированном режиме работы процессора;
  • разряд 3 — превышение предельного времени выполнения команды;
  • разряды 4-7 не используются;
  • разряд 8 — сбой ОЗУ при чтении;
  • разряд 9 — сбой ОЗУ при записи;
  • разряд 10 — сбой при вводе информации с внешнего устройства;
  • разряд 11 — сбой в памяти микрокоманд центрального процессора;
  • разряд 12 — нарушение питания;
  • разряд 13 — попытка выполнить несуществующую команду;
  • разряд 14 — признак наличия информации в дополнительном УСП;
  • разряд 15 — обращение с помощью прямой адресации к внешнему устройству, выдавшему сигнал ОШ-Т.

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

  • разряды 0-3 — не используются;
  • разряд 4 — ошибка при обмене информацией с СВВ;
  • разряд 5 — ошибка информации на выходе арифметико-логического устройства процессора;
  • разряд 6 — ошибка паритета в адресе микрокоманды центрального процессора;
  • разряд 7 — нарушение вторичного питания в ОЗУ или СВВ;
  • разряды 8-13 — не используются;
  • разряд 14 — ошибка при обмене информацией с РИМ;
  • разряд 15 не используется.

3. Команды процессора

3.1. Форматы команд и адресация

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

Каждая команда может занимать одно или два слова памяти. В однословном адресном формате команды разряды 1-4 занимает код операции (КОП), а разряды 0 и 5-15 служат для адресации операнда команды. В двухсловном адресном формате команды разряды 0-3 всегда содержат величину 10002, в разрядах 4-14 содержится код операции (при этом разряд 5 всегда нулевой), а разряды 15-31 используются для адресации операнда. Имеются также однословные команды ввода-вывода, однословные регистровые команды, однословные команды сдвигов двойной длины и команды дополнительного набора, реализованные только в СМ-2М и отсутствующие в предшествующих вычислительных машинах этой архитектурной линии.

В однословных адресных командах используются прямой, косвенный и индексный виды адресации. При записи на языке ассемблера вслед за мнемоническим кодом операции указывается адрес ячейки памяти и при необходимости через запятую признак вида адресации (I — косвенная адресация; X или Y — индексная адресация с использованием индексного регистра РИ1 или РИ2 соответственно).

Прямая адресация служит для доступа к ячейкам в двух младших 512-словных блоках раздела памяти, используемых для связи с операционной системой (так называемая нулевая страница), или к текущей странице объемом 512 слов, серединой которой является текущая выполняемая команда.

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

При доступе к текущей странице код команды содержит нуль в нулевом (признак прямой адресации) и 102 в пятом и шестом (признак текущей страницы) разрядах. Разряды 7-15 содержат смещение операнда относительно адреса текущей выполняемой команды. Смещение является числом в дополнительном коде; его знак находится в седьмом разряде. Для определения 15-разрядного относительного адреса операнда производится расширение знака смещения на 1-6 разряды (т. е. в них копируется значение седьмого разряда), а затем выполняется сложение полученного 15-разрядного смещения с 15-разрядным относительным адресом текущей выполняемой команды. Смещение обеспечивает доступ к ячейкам, отстоящим от текущей команды в пределах от -256 до +255 ячеек.

Косвенная адресация обеспечивает доступ ко всему разделу памяти. Ее признаком является 1 в нулевом разряде кода команды и 0 в пятом или шестом разряде. Разряды 5-15 определяют ячейку памяти, как при прямой адресации, т. е. задают ячейку в нулевой или в текущей странице. Если в нулевом разряде этой ячейки содержится 0, ее разряды 1-15 определяют адрес ячейки, содержащей операнд команды. В этом случае имеет место одноуровневая косвенная адресация.

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

Индексная адресация также обеспечивает доступ ко всем ячейкам памяти раздела. Признаком ее являются единицы в пятом и шестом разрядах кода команды. Нулевой разряд определяет, какой из двух индексных регистров будет использоваться: 0 соответствует регистру РИ1, 1 — РИ2.

Нулевой разряд индексного регистра определяет одну из разновидностей индексной адресации. Значение 0 соответствует индексации, значение 1 — автоиндексации.

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

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

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

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

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

Косвенная адресация через произвольную ячейку памяти задается нулем в 15-м и единицей в 16-м разрядах кода команды. Разряды 17-31 содержат адрес ячейки, содержащей адрес операнда (при одноуровневой адресации) или адрес адреса (при многоуровневой адресации). Как и в случае однословных команд, цепочка косвенной адресации прослеживается до тех пор, пока не будет обнаружен нуль в старшем разряде ячейки памяти или пока не истечет время, отведенное на выполнение операции.

Прямая и косвенная адресации с ограниченным адресом и индексная адресация задаются единицей в 15-м разряде кода команды. Второе слово (разряды 16-31) в этом случае служит для определения вида адресации и адреса операнда в соответствии с правилами, используемыми в однословных командах, при этом разряды 17-20, содержащие в однословных командах код операции, игнорируются.

Регистровые команды содержат нули в старших четырех разрядах кода команды. Разряд 4 задает используемый регистр (0 — РА, 1 — РБ), разряд 5 содержит 0 для команд сдвига и 1 для команд изменений и пропусков. В разрядах 6-15 содержится код операции.

Команды сдвигов двойной длины имеют 1 в нулевом разряде кода команды, 0 в разрядах 1-3, 5 и 7-8. В разрядах 4, 6, 9-11 задается код операции, а в разрядах 12-15 — число разрядов, на которое должен быть произведен сдвиг (код 0000 воспринимается как приказ сдвига на 16 разрядов, 0001 — на один и т. д.).

Формат команд ввода-вывода описан в соответствующей главе.

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

3.2. Однословные адресные команды

Ниже приведено описание всех 14 однословных команд, выполняемых процессором ЭВМ СМ-2М. В описании указываются мнемоника команды, 4-разрядный двоичный код операции (содержимое разрядов 1-4 кода команды), описание функций команды и время ее выполнения при прямой адресации. При одноуровневой косвенной адресации время выполнения увеличивается на 1,3 мкс, при индексации и автоиндексации — на 1 мкс.

Сложение с РА

Мнемоника: ADA
Код операции: 1000
Время выполнения: 2 мкс

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

Сложение с РБ

Мнемоника: ADB
Код операции: 1001
Время выполнения: 2 мкс

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

Неэквивалентность

Мнемоника: XOR
Код операции: 0100
Время выполнения: 2 мкс

Выполняется операция “Исключающее ИЛИ” между содержимым ячейки памяти и регистром РА, результат операции сохраняется в РА.

Конъюнкция

Мнемоника: AND
Код операции: 0010
Время выполнения: 2 мкс

Выполняется операция “Логическое И” между содержимым ячейки памяти и регистром РА, результат операции сохраняется в РА.

Дизъюнкция

Мнемоника: IOR
Код операции: 0110
Время выполнения: 2 мкс

Выполняется операция “Логическое ИЛИ” между содержимым ячейки памяти и регистром РА, результат операции сохраняется в РА.

Засылка в РА

Мнемоника: LDA
Код операции: 1100
Время выполнения: 2 мкс

Содержимое ячейки памяти заносится в регистр РА.

Засылка в РБ

Мнемоника: LDB
Код операции: 1101
Время выполнения: 2 мкс

Содержимое ячейки памяти заносится в регистр РБ.

Безусловный переход

Мнемоника: JMP
Код операции: 0101
Время выполнения: 1,7 мкс

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

При работе процессора в привилегированном режиме команда JMP может изменить содержимое регистра базы привилегированного состояния РБ2, если новое значение базы было заранее подготовлено с помощью команды LBP.

Сравнение с РА

Мнемоника: CPA
Код операции: 1010
Время выполнения: 2,8 мкс

Если содержимое РА не совпадает с содержимым заданной ячейки памяти, следующая команда пропускается. Следует иметь в виду, что пропуск выполняется путем увеличения содержимого РНК не на 1, как при последовательном выполнении однословных команд, а на два. Таким образом, сразу после команды CPA не может следовать двухсловная команда.

Сравнение с РБ

Мнемоника: CPB
Код операции: 1011
Время выполнения: 2,8 мкс

Если содержимое РБ не совпадает с содержимым заданной ячейки памяти, следующая команда пропускается. Следует иметь ввиду, что пропуск выполняется путем увеличения содержимого РНК не на 1, как при последовательном выполнении однословных команд, а на два. Таким образом, сразу после команды CPB не может следовать двухсловная команда.

Сохранение РА

Мнемоника: STA
Код операции: 1110
Время выполнения: 2,8 мкс

Содержимое РА сохраняется в указанной ячейке памяти.

Сохранение РБ

Мнемоника: STB
Код операции: 1111
Время выполнения: 2,8 мкс

Содержимое РБ сохраняется в указанной ячейке памяти.

Переход к подпрограмме

Мнемоника: JSB
Код операции: 0011
Время выполнения: 3,8 мкс

Адрес ячейки, следующей за данной командой, сохраняется в регистре адреса возврата РАВ и в ячейке памяти, указанной в команде. Содержимое ячейки, следующей за указанной в команде, заносится в РНК, т. е. является адресом начала подпрограммы.

Команда JSB, как и JMP, не поддерживает индексную адресацию, а также может в привилегированном режиме изменить значение РБ2, если оно заранее подготовлено командой LBP.

Если команда JSB получает управление в результате прерывания, то в РАВ и в указанной командой ячейке памяти сохраняется адрес возврата из прерывания, а не адрес, следующий за вектором прерывания.

Счет и пропуск

Мнемоника: ISZ
Код операции: 0111
Время выполнения: 3,9 мкс

Содержимое указанной ячейки памяти увеличивается на единицу. Если оно становится равным нулю, то производится пропуск следующей команды. Следует иметь в виду, что пропуск выполняется путем увеличения содержимого РНК не на 1, как при последовательном выполнении однословных команд, а на два. Таким образом, сразу после команды ISZ не может следовать двухсловная команда.

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

3.3. Двухсловные адресные команды

СМ-2М выполняет 17 двухсловных команд, описанных ниже. Как и в случае однословных команд, в описании приводятся мнемоника, код операции (содержимое разрядов 4, 6-14 кода команды), действия и время выполнения каждой команды. В отличие от однословных команд, код операции приводится в восьмеричном, а не двоичном виде.

Загрузка двойного слова

Мнемоника: DLD
Код операции: 1100
Время выполнения: 8 мкс

Содержимое указанной ячейки памяти заносится в РА, а содержимое следующей за ней ячейки — в РБ.

Запись двойного слова

Мнемоника: DST
Код операции: 1200
Время выполнения: 7,1 мкс

Содержимое РА сохраняется в указанной ячейке памяти, а содержимое РБ — в следующей за ней ячейке.

Умножение целых чисел

Мнемоника: MPY
Код операции: 0100
Время выполнения: 9,2 мкс

Содержимое указанной ячейки памяти умножается на содержимое РА. Старшая часть произведения, включая знак, сохраняется в РБ, младшая часть — в РА.

Деление целых чисел

Мнемоника: DIV
Код операции: 0200
Время выполнения: 14,2 мкс

Двойное слово, находящееся в РБ (старшая часть) и РА (младшая часть), делится на содержимое указанной ячейки памяти. Частное помещается в РА, остаток от деления — в РБ.

Если частное не может быть корректно размещено в регистре РА, фиксируется переполнение, т. е. РП устанавливается в 1. В этом случае содержимое РА и РБ не определено. Если выполняется попытка деления на нуль, РП также устанавливается в 1, но деление не выполняется и содержимое регистров РА и РБ не изменяется. При успешном делении РП сбрасывается в нуль.

Загрузка РИ1

Мнемоника: LDX
Код операции: 1104
Время выполнения: 6 мкс

Содержимое указанной ячейки памяти заносится в РИ1.

Загрузка РИ2

Мнемоника: LDY
Код операции: 1105
Время выполнения: 6 мкс

Содержимое указанной ячейки памяти заносится в РИ2.

Запись РИ1

Мнемоника: STX
Код операции: 1204
Время выполнения: 5,2 мкс

Содержимое РИ1 сохраняется в указанной ячейке памяти.

Запись РИ2

Мнемоника: STY
Код операции: 1205
Время выполнения: 5,2 мкс

Содержимое РИ2 сохраняется в указанной ячейке памяти.

Запись слова состояния программы

Мнемоника: STW
Код операции: 1206
Время выполнения: 7,6 мкс

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

Загрузка слова состояния программы

Мнемоника: LDW
Код операции: 1106
Время выполнения: 10,6 мкс

Содержимое РР, РП, ТС, РБ1 и РНК загружается из двух ячеек памяти (заданной в команде и следующей за ней).

В непривилегированном режиме необходимо обеспечить сохранность первой ячейки памяти, записанной по команде STW, чтобы не допустить изменения РР, РП, ТС и РБ1. Если непривилегированная программа попытается изменить эти регистры путем выполнения команды LDW, результат будет непредсказуемым.

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

Загрузка РБ1

Мнемоника: LBN
Код операции: 1101
Время выполнения: 6,3 мкс

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

Загрузка РБ2

Мнемоника: LBP
Код операции: 1102
Время выполнения: 6,6 мкс

Данная команда подготавливает новое содержимое РБ2 на основе 8-го и 9-го разрядов указанной ячейки памяти, но не загружает подготовленным содержимым сам регистр базы. Загрузка РБ2 новым содержимым выполняется первой после команды LBP командой перехода JMP или JSB.

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

Сложение вещественных чисел

Мнемоника: FAD
Код операции: 1400
Время выполнения: 21,9 мкс

Выполняется сложение двух вещественных чисел, первое из которых содержится в регистрах РА (старшая часть) и РБ (младшая часть), а второе — в двух смежных ячейках памяти, первая из которых задана в команде. Результат сохраняется в РА и РБ.

При возникновении переполнения устанавливается РП, в противном случае он сбрасывается.

Вычитание вещественных чисел

Мнемоника: FSB
Код операции: 1410
Время выполнения: 22,6 мкс

Из вещественного числа, содержащегося в регистрах РА (старшая часть) и РБ (младшая часть), вычитается другое число, находящееся в двух смежных ячейках памяти, первая из которых задана в команде. Результат сохраняется в РА и РБ.

При возникновении переполнения устанавливается РП, в противном случае он сбрасывается.

Умножение вещественных чисел

Мнемоника: FMP
Код операции: 1420
Время выполнения: 19,8 мкс

Выполняется умножение двух вещественных чисел, первое из которых содержится в регистрах РА (старшая часть) и РБ (младшая часть), а второе — в двух смежных ячейках памяти, первая из которых задана в команде. Результат сохраняется в РА и РБ.

При возникновении переполнения устанавливается РП, в противном случае он сбрасывается.

Деление вещественных чисел

Мнемоника: FDV
Код операции: 1430
Время выполнения: 35,1 мкс

Вещественное число, содержащееся в регистрах РА (старшая часть) и РБ (младшая часть), делится на другое число, находящееся в двух смежных ячейках памяти, первая из которых задана в команде. Результат сохраняется в РА и РБ.

При возникновении переполнения устанавливается РП, в противном случае он сбрасывается. При попытке деления на нуль также устанавливается РП, а в РА и РБ записывается максимальное по модулю число, знак которого совпадает со знаком делимого.

Проверка и изменение

Мнемоника: TAS
Код операции: 1107
Время выполнения: 6,8 мкс

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

Следует иметь ввиду, что пропуск выполняется путем увеличения содержимого РНК не на 1, как при последовательном выполнении однословных команд, а на два. Таким образом, сразу после команды TAS не может следовать двухсловная команда.

3.4. Команды изменений и пропусков

Эти команды относятся к группе регистровых команд. Как уже отмечалось, в разрядах 0-3 кода этих команд содержатся нули, разряд 4 определяет используемый регистр (0 — РА, 1 — РБ), разряд 5 равен единице. В разрядах 6-15 содержится код операции.

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

Следует помнить, что все элементарные операции, работающие с аккумуляторами, в пределах одной команды должны использовать один и тот же регистр (РА или РБ).

Операции изменения аккумулятора

Эти операции кодируются разрядами 6-7 кода операции:

00 — нет операции;

01 — сброс аккумулятора (мнемоника CLA или CLB для РА и РБ соответственно);

10 — инверсия аккумулятора (CMA или CMB);

11 — сброс и инверсия аккумулятора, т. е. загрузка кода 1777778 (CCA или CCB).

Операции изменения регистра расширения

Эти операции кодируются разрядами 8-9 кода операции:

00 — нет операции;

01 — сброс регистра расширения (CLE);

10 — инверсия регистра расширения (CME);

11 — сброс и инверсия, т. е. установка регистра расширения (CCE).

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

Эта операция задается единицей в 13-м разряде кода операции и имеет мнемонику INA или INB.

Операции пропусков

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

Разряд 10 задает операцию пропуска, если регистр расширения содержит 0 (SEZ).

Разряд 11 задает операцию пропуска при неотрицательном значении аккумулятора (SSA или SSB), т. е. если старший разряд регистра равен нулю.

Разряд 12 задает операцию пропуска при четности содержимого регистра, т. е. при равенстве нулю его младшего разряда (SLA или SLB).

Разряд 14 задает операцию пропуска при нулевом содержимом регистра РА или РБ (SZA или SZB).

Операция реверса

Операция реверса RSS задается 15-м разрядом кода операции. Она изменяет условия пропуска команды, указанные разрядами 10-12 и 14, на противоположные.

3.5. Команды сдвигов

Эти команды относятся к группе регистровых команд. Как уже отмечалось, в разрядах 0-3 и 5 кода этих команд содержатся нули, а разряд 4 определяет используемый регистр (0 — РА, 1 — РБ). В разрядах 6-15 содержится код операции.

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

Следует помнить, что все элементарные операции, работающие с аккумуляторами, в пределах одной команды должны использовать один и тот же регистр (РА или РБ).

К этой же группе относится команда NOP — “Нет операции”. Она содержит нули во всех разрядах, кроме разряда 4, значение которого безразлично. Транслятор с языка ассемблера всегда генерирует нулевой код команды NOP.

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

Первая операция сдвига задается разрядами 6-9 кода операции, вторая — разрядами 11 и 13-15. Всего имеется восемь операций сдвига с кодами операций 1000-1111.

Коды 0000-0111 воспринимаются как указание “нет операции”.

Код 1000 задает арифметический сдвиг содержимого аккумулятора влево на один разряд. Мнемоника операции — ALS или BLS для регистра РА или РБ соответственно.

Код 1001 задает арифметический сдвиг содержимого аккумулятора вправо на один разряд (ARS или BRS).

Код 1010 задает циклический сдвиг аккумулятора влево на один разряд (RAL или RBL).

Код 1011 задает циклический сдвиг аккумулятора влево на один разряд (RAR или RBR).

Код 1100 задает логический сдвиг аккумулятора влево на один разряд (ALR или BLR).

Код 1101 задает циклический сдвиг аккумулятора через регистр расширения вправо на один разряд (ERA или ERB).

Код 1110 задает циклический сдвиг аккумулятора через регистр расширения влево на один разряд (ELA или ELB).

Код 1111 задает циклический сдвиг аккумулятора влево на четыре разряда (ALF или BLF).

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

Операция очистки регистра расширения

Эта операция задается единицей в 10-м разряде; ее мнемоническое обозначение — CLE.

Операция пропуска по четности аккумулятора

Эта операция вызывает пропуск следующей команды (путем увеличения РНК на 2, а не на 1), если младший разряд аккумулятора РА или РБ равен нулю. Она задается единицей в 12-м разряде кода команды; ее мнемоническое обозначение — SLA или SLB.

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

3.6. Команды сдвигов двойной длины

ЭВМ СМ-2М реализует шесть команд сдвига данных двойной длины, обеспечивающих сдвиг числа на 1-16 разрядов за одну операцию. Как было указано выше, код операции двойного сдвига размещается в разрядах 4, 6, 9-11 кода команды; разряд 0 содержит единицу; разряды 1-3, 5 и 7-8 содержат нули; разряды 12-15 задают величину сдвига (0000 — на 16 разрядов, 0001 — на один разряд и т. д.).

Сдвигаемый операнд находится в регистрах РБ (старшая часть) и РА (младшая часть).

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

Код 01001 задает операцию арифметического сдвига вправо (ASR).

Код 00001 задает операцию арифметического сдвига влево (ASL).

Код 01010 задает операцию логического сдвига вправо (LSR).

Код 00010 задает операцию логического сдвига влево (LSL).

Код 01100 задает операцию циклического сдвига вправо (RRR).

Код 00100 задает операцию циклического сдвига влево (RRL).

3.7. Команды дополнительного набора

СМ-2М имеет более 60 дополнительных команд различного назначения, которые можно разделить на команды преобразования форматов, дополнительные системные привилегированные и непривилегированные команды, команды операций с байтами и битами, операции пересылок и сравнения массивов, дополнительные операции с индексными регистрами. Длина этих команд может составлять от 1 до 3 слов.

Команды преобразования форматов

Команда FIX с кодом операции 105100 преобразует вещественное число, старшая часть которого содержится в РА, а младшая — в РБ, в 16-разрядное целое число со знаком, помещаемое в РА. Содержимое РБ непредсказуемо. Если диапазон вещественного числа превышает максимально допустимый для целого 16-разрядного числа со знаком, устанавливается регистр переполнения.

Команда FLT с кодом операции 105120 преобразует целое число со знаком в регистре РА в вещественное число со старшей частью в РА и младшей частью в РБ.

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

Команды операций с байтами

Для адресации байтов используются 16-разрядные адреса. Старшие 15 разрядов задают относительный адрес слова памяти, а младший разряд определяет, будет ли операция выполняться со старшим (равен нулю) или младшим (равен единице) байтом.

Команда LBT (код операции 105763) производит загрузку байта, адрес которого находится в РБ, в младший байт регистра РА. Старший байт РА обнуляется, а содержимое РБ увеличивается на единицу.

Команда SBT (код операции 105764) сохраняет младший байт РА по адресу, содержащемуся в РБ, и увеличивает РБ на единицу.

Команда SFB (код операции 105767) выполняет сканирование байтов. Для этого она последовательно считывает байты, адрес первого из которых задан в регистре РБ, и сравнивает их младшим и старшим байтами РА (старший байт называется байтом окончания, а младший — байтом проверки). Если считанный байт совпадет с байтом окончания или байтом проверки, операция закончится. Если при этом будет обнаружено совпадение с байтом окончания, произойдет пропуск следующей команды, а в РБ будет установлен адрес следующего байта, который был бы проверен, если бы операция не завершилась. Если же считанный байт совпал с адресом проверки, то в РБ будет находиться адрес этого байта, а пропуск следующей команды не выполняется. Считается, что по нулевому относительному адресу находится байт окончания.

Операции с массивами

В эту группу входят четыре команды трехсловного формата.

Первое слово содержит код операции:

105765 — операция пересылки массива байтов (MBT);

105777 — операция пересылки массива слов (MVW);

105766 — операция сравнения массивов байтов (CBT);

105776 — операция сравнения массивов слов (CMW).

Второе слово содержит адрес ячейки с длиной обрабатываемого массива.

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

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

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

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

По окончании команд пересылки РА и РБ будут увеличены на длину переданного массива информации.

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

При равенстве всех элементов обоих массивов просто выполняется следующая команда, т. е. РНК увеличивается на 3.

Если элемент первого массива меньше элемента второго массива, происходит пропуск одной команды, т. е. РНК увеличивается на 4.

Если элемент первого массива больше элемента второго массива, происходит пропуск двух команд, т. е. РНК увеличивается на 5.

По завершении операции сравнения в РА записывается адрес элемента первого массива, на котором завершилось сравнение, а в РБ — адрес последнего элемента второго массива.

Команды обработки битов

Эти команды имеют трехсловный формат.

Первое слово содержит код операции:

105774 — сброс разрядов (CBS);

105773 — установка разрядов (SBS);

105775 — проверка разрядов (TBS).

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

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

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

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

Команда SBS вызывает установку тех разрядов ячейки, заданной третьим словом кода команды, которым соответствуют единичные значения разрядов маски.

Команда TBS проверяет разряды ячейки, заданной третьим словом кода команды, которым соответствуют единичные значения разрядов маски. Если хотя бы один из этих разрядов содержит нуль, выполняется пропуск команды, т. е. РНК увеличивается на 4, а не на 3.

4. Организация ввода-вывода

4.1. Организация интерфейса 2К

Интерфейс 2К (“двойной канал”) реализован в виде двух групп шин. Первая группа содержит шины, источником сигналов на которых служит ядро вычислительного комплекса (так называемый концентратор), а приемниками — внешние устройства. Шины этой группы обозначаются суффиксом К.

Другая группа шин имеет источниками сигналов внешние устройства, а приемником — ядро вычислительного комплекса. Она обозначается суффиксом Т (терминал).

Группа шин концентратора включает 27 линий. 16 из них (ШИН0-К — ШИН-15К) служат для передачи информации внешнему устройству.

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

Признаком наличия информации на ШИН-К и КР-К является сигнал ВД-К (ВЫДАНО), генерируемый командами вывода.

Для передачи управляющей информации используются те же шины, что и для передачи данных (ШИН-К и КР-К), но выдача информации сопровождается сигналом ВП-К (ВЫПОЛНИТЬ). Имеется также управляющая шина ОСТ-К (ОСТАНОВИТЬ), обычно означающая приказ об остановке операции ввода-вывода.

Сигнал ПР-К вызывает выдачу информации из устройства в концентратор.

Сигнал сброса выдается во внешние устройства по шине ОСБ-К. Он адресуется либо всем устройствам (при нажатии на кнопку сброса на пульте управления процессора), либо конкретному устройству (когда он вызывается командой RIO).

Все вышеперечисленные сигналы одновременно поступают на все внешние устройства, подключенные к разъему согласователя ввода-вывода, соответствующему коду выборки, заданному в команде ввода-вывода. Четыре сигнала ВБР0-К — ВБР3-К, поступающие во внешние устройства последовательно, служат для выборки нужного устройства. Устройство воспринимает управляющие сигналы на линиях ВД-К, ПР-К, ВП-К, ОСТ-К и ОСБ-К только в том случае, когда на ВБР-К активна та линия, которая соответствует данному устройству.

Процессор генерирует один из сигналов ВБР-К в зависимости от двух младших разрядов кода выборки. Это позволяет в сложных устройствах использовать до четырех смежных кодов для выполнения различных функций устройства. Естественно, что разъемы в СВВ, соответствующие нескольким кодам выборки, используемым одним устройством, должны быть свободны. Например, если устройство задействует коды выборки 30-33, то физически оно подключается к разъему СВВ, соответствующему коду 30, а разъемы для кодов 31-33 остаются свободными.

Группа шин терминала включает 25 линий. Как и в линиях концентратора, терминал использует 16 линий ШИН0-Т — ШИН-15Т для передачи в концентратор информации. Такая передача сопровождается выдачей контрольных сигналов КР0-Т и КР1-Т. Если внешнее устройство не поддерживает выработку контрольных сигналов, оно должно выдавать сигнал ОК-Т, отменяющий в концентраторе контроль принятой информации по паритету.

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

По инициативе внешнего устройства выдаются сигналы ГТ-Т, ОШ-Т и КОП-Т.

Сигналы ГТ0-Т — ГТ3-Т означают готовность устройства по соответствующей линии ВБР-К. Сложные устройства, использующие несколько линий ВБР-К, используют и соответствующие линии ГТ-Т для оповещения концентратора о готовности к выполнению той или иной функции. Получив сигнал готовности, процессор, если это возможно, прерывает ввод-вывод.

Сигнал ОШ-Т сигнализирует о том, что устройство обнаружило какую-либо ошибку. Эта линия анализируется только при очередном обращении к этому устройству.

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

Сигналы ОШ-Т и КОП-Т вызывают прерывание от схем контроля.

4.2. Команды ввода-вывода

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

Команды ввода-вывода занимают одно слово памяти. Разряды 0-3 и 5 кода команды содержат код 100012; 4, 6-9 — код операции; 10-15 — код выборки, определяющий внешнее устройство, с которым будет выполняться операция.

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

При прямой адресации разряды 10-15 кода команды ввода-вывода содержат код выборки, соответствующий нужному устройству. Коды выборки 0-178 называются специальными кодами выборки; их использование оговаривается особо. Коды выборки 208-378 соответствуют первому согласователю ввода-вывода, 408-578 — второму, 608-778 — третьему. Таким образом, старшие два разряда кода выборки выбирают согласователь ввода-вывода: 0 соответствует специальным кодам выборки, реально не выполняющим операции ввода-вывода, 1-3 соответствуют СВВ1-3.

Два средних разряда кода выборки определяют, на какой группе разъемов СВВ расположено адресуемое внешнее устройство (всего СВВ содержит 4 группы по 4 разъема). Два младших разряда дешифруются и выбирают одну из четырех линий ВБР-К.

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

При прямой адресации к устройствам, выдающим сигналы ОШ-Т или КОП-Т, происходит прерывание от схем контроля.

При косвенной адресации код выборки находится в одном из индексных регистров. Если он находится РИ1, в команде ввода-вывода в разрядах 10-15 задается код выборки 2, а если в РИ2 — код выборки 3.

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

  • разряды 0, 2 и 3 должны содержать нули;
  • разряд 1 показывает, подключено ли внешнее устройство непосредственно к СВВ (в этом случае он равен нулю) или через РИМ (в этом случае он равен единице);
  • разряды 4-9 содержат код выборки РИМа. Если адресуется устройство, подключенное непосредственно к согласователю ввода-вывода, они должны содержать нули;
  • разряды 10-15 содержат код выборки устройства на СВВ или РИМе.

При косвенной адресации к устройствам, выдающим сигналы ОШ-Т или КОП-Т, происходит пропуск следующей команды, а не прерывание от схем контроля, как в случае команд с прямой адресацией. Следует помнить, что пропуск команды выполняется увеличением РНК на 2, а не на 1, поэтому после команд с косвенной адресацией можно использовать только однословные команды.

В описании команд приведена их мнемоника, код операции, описание функций и время выполнения. В коде операции некоторых команд шестой разряд может принимать либо нулевое, либо единичное значение. В последнем случае эти команды помимо своей основной функции вызывают выдачу сигнала ВП-К. Такое использование шестого разряда отмечено в коде команды звездочкой, а в мнемонике — операндом C в квадратных скобках. Код операции приведен в двоичной системе (разряды 4, 6-9). Время выполнения команд, использующих косвенную адресацию устройств, увеличивается на 0,8 мкс.

Выдача РА на ШИН-К

Мнемоника: OTA кв [,C]
Код операции: 0в110
Время выполнения: 4,3 мкс

Содержимое РА выдается на ШИН-К в сопровождении контрольных разрядов КР-К и управляющего сигнала ВД-К. Если в команде указан операнд C (единица в шестом разряде кода операции), выдается также сигнал ВП-К.

При использовании кода выборки 5 производится загрузка РНГ содержимым младшего байта РА, а в РВГ заносится 3778.

Выдача РБ на ШИН-К

Мнемоника: OTB кв [,C]
Код операции: 1в110
Время выполнения: 4,3 мкс

Содержимое РБ выдается на ШИН-К в сопровождении контрольных разрядов КР-К и управляющего сигнала ВД-К. Если в команде указан дополнительный операнд C (единица в шестом разряде кода операции), выдается также сигнал ВП-К.

При использовании кода выборки 5 производится загрузка РНГ содержимым младшего байта РБ, а в РВГ заносится 3778.

Ввод в РА с ШИН-Т

Мнемоника: LIA кв [,C]
Код операции: 0в101
Время выполнения: 4 мкс

Выдается сигнал ПР-К, после чего информация с ШИН-Т принимается в РА. Если указан дополнительный операнд C (в коде операции шестой разряд равен единице), дополнительно производится выдача сигнала ВП-К.

Использование кода выборки 1 вызывает загрузку в РА содержимого клавишного регистра пульта управления процессора; кода выборки 4 — загрузку кода выборки, связанного с последним прерыванием; кода выборки 5 — загрузку основного управляющего слова прерывания, конкретизирующего причину прерывания; кода выборки 6 — загрузку содержимого регистра адреса возврата. Использование операнда C с кодом выборки 5 вызывает сброс управляющего слова прерывания после его загрузки в РА.

Ввод в РБ с ШИН-Т

Мнемоника: LIB кв [,C]
Код операции: 1в101
Время выполнения: 4 мкс

Выдается сигнал ПР-К, после чего информация с ШИН-Т принимается в РБ. Если указан дополнительный операнд C (в коде операции шестой разряд равен единице), дополнительно производится выдача сигнала ВП-К.

Использование кода выборки 1 вызывает загрузку в РБ содержимого клавишного регистра пульта управления процессора; кода выборки 4 — загрузку кода выборки, связанного с последним прерыванием; кода выборки 5 — загрузку основного управляющего слова прерывания, конкретизирующего причину прерывания; кода выборки 6 — загрузку содержимого регистра адреса возврата. Использование операнда C с кодом выборки 5 вызывает сброс управляющего слова прерывания после его загрузки в РБ.

Дизъюнктивный ввод в РА с ШИН-Т

Мнемоника: MIA кв [,C]
Код операции: 0в100
Время выполнения: 4 мкс

Выдается сигнал ПР-К, после чего информация с ШИН-Т по операции “Логическое ИЛИ” принимается в РА. Если указан дополнительный операнд C (в коде операции шестой разряд равен единице), дополнительно производится выдача сигнала ВП-К.

Использование кода выборки 1 вызывает загрузку в РА содержимого клавишного регистра пульта управления процессора; кода выборки 4 — загрузку кода выборки, связанного с последним прерыванием; кода выборки 5 — загрузку основного управляющего слова прерывания, конкретизирующего причину прерывания; кода выборки 6 — загрузку содержимого регистра адреса возврата. Использование операнда C с кодом выборки 5 вызывает сброс управляющего слова прерывания после его загрузки в РА.

Таким образом, эта команда отличается от команды LIA тем, что информация в РА не замещается информацией с ШИН-Т, а объединяется с ней.

Дизъюнктивный ввод в РБ с ШИН-Т

Мнемоника: MIB кв [,C]
Код операции: 1в100
Время выполнения: 4 мкс

Выдается сигнал ПР-К, после чего информация с ШИН-Т по операции “Логическое ИЛИ” принимается в РБ. Если указан дополнительный операнд C (в коде операции шестой разряд равен единице), дополнительно производится выдача сигнала ВП-К.

Использование кода выборки 1 вызывает загрузку в РБ содержимого клавишного регистра пульта управления процессора; кода выборки 4 — загрузку кода выборки, связанного с последним прерыванием; кода выборки 5 — загрузку основного управляющего слова прерывания, конкретизирующего причину прерывания; кода выборки 6 — загрузку содержимого регистра адреса возврата. Использование операнда C с кодом выборки 5 вызывает сброс управляющего слова прерывания после его загрузки в РБ.

Таким образом, эта команда отличается от команды LIB тем, что информация в РБ не замещается информацией с ШИН-Т, а объединяется с ней.

Пропуск по сигналу готовности

Мнемоника: SFS кв
Код операции: 00011
Время выполнения: 3,5 мкс

Следующая команда пропускается, если адресуемое устройство выдает сигнал готовности на соответствующую линию ГТ-Т. Следует иметь в виду, что пропуск выполняется путем увеличения содержимого РНК не на 1, как при последовательном выполнении однословных команд, а на два. Таким образом, сразу после команды SFS не может следовать двухсловная команда.

Использование кода выборки 1 приводит к пропуску следующей команды, если регистр переполнения установлен. Эта разновидность команды имеет свою мнемонику SOS и является непривилегированной..

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

Пропуск по отсутствию сигнала готовности

Мнемоника: SFC кв
Код операции: 00010
Время выполнения: 3,5 мкс

Следующая команда пропускается, если адресуемое устройство не выдает сигнал готовности на соответствующую линию ГТ-Т. Следует иметь в виду, что пропуск выполняется путем увеличения содержимого РНК не на 1, как при последовательном выполнении однословных команд, а на два. Таким образом, сразу после команды SFC не может следовать двухсловная команда.

Использование кода выборки 1 приводит к пропуску следующей команды, если регистр переполнения сброшен. Эта разновидность команды имеет свою мнемонику SOC и является непривилегированной.

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

Выдача ВП-К

Мнемоника: CLF кв
Код операции: 01001
Время выполнения: 3,5 мкс

Эта команда выдает в устройство сигнал ВП-К. Другое ее название — “Продолжение ввода-вывода”.

Использование кода выборки 1 вызывает сброс регистра переполнения. Эта разновидность команды имеет свою мнемонику — CLO и является непривилегированной..

При использовании кода выборки 4 команда CLF вырабатывает сигнал готовности на всех интерфейсных разъемах первого уровня, т. е. разъемах согласователей ввода-вывода (так называемый имитатор готовности). Эта особенность может быть использована в тестовых программах.

Выдача ОСТ-К

Мнемоника: STF кв
Код операции: 00001
Время выполнения: 3,5 мкс

Эта команда выдает в устройство сигнал ОСТ-К. Другое ее название — “Останов ввода-вывода”.

Использование кода выборки 1 вызывает установку регистра переполнения. Эта команда имеет свою мнемонику — STO и является непривилегированной..

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

Выдача ОСБ-К

Мнемоника: RIO кв
Код операции: 10000
Время выполнения: 5,1 мкс

Эта команда, иначе называемая “Сбросом ввода-вывода”, вызывает выдачу адресуемому устройству сигнала ОСБ-К.

Если код выборки равен 0, выдается сброс во все устройства ввода-вывода.

Останов процессора

Мнемоника: HLT кв
Код операции: 00000

Процессор переводится в состояние останова. РНК содержит адрес следующей команды, а на пульте управления высвечивается код команды останова: 1020КВ.

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

Сброс маски прерывания

Мнемоника: STC кв [,C]
Код операции: 0в111
Время выполнения: 4,5 мкс

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

Операнд C (единичный шестой разряд кода команды) дополнительно вызывает выдачу сигнала ВП-К в соответствующее внешнее устройство.

Использование кода выборки 0 деблокирует все прерывания ввода-вывода, но не влияет на триггеры запрета прерываний от конкретных устройств.

Использование кода выборки 6 вызывает прерывание по вектору 6, чему соответствует непривилегированная команда SVC (“Вызов супервизора”).

Установка маски прерываний

Мнемоника: CLC кв [,C]
Код операции: 1в111
Время выполнения: 5,4 мкс

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

Операнд C (единичный шестой разряд кода команды) дополнительно вызывает выдачу сигнала ВП-К в соответствующее внешнее устройство.

Использование кода выборки 0 блокирует все прерывания ввода-вывода, но не влияет на триггеры запрета прерываний от конкретных устройств.

Сброс РП

Мнемоника: CLO
Код операции: 1031018
Время выполнения: 3,5 мкс

Непривилегированная разновидность команды CLF, вызывающая сброс регистра переполнения.

Установка РП

Мнемоника: STO
Код операции: 1021018
Время выполнения: 3,5 мкс

Непривилегированная разновидность команды STF, вызывающая установку регистра переполнения.

Пропуск по переполнению

Мнемоника: SOS

Код операции: 1023018

Время выполнения: 3,5 мкс

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

Пропуск по отсутствию переполнения

Мнемоника: SOC
Код операции: 1022018
Время выполнения: 3,5 мкс

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

Вызов супервизора

Мнемоника: SVC
Код операции: 1027068
Время выполнения: 3,5 мкс

Непривилегированная разновидность команды STC, вызывающая прерывание по вектору 6, используемое для обращения к супервизору со стороны программы пользователя.

4.3. Прямой доступ к памяти

Общие сведения

Каждый из двух входящих в состав СМ-2М каналов ПДП имеет четыре подканала и способен обслуживать четыре устройства ввода-вывода одновременно.

Внешние устройства, использующие КПДП, должны непосредственно подключаться к СВВ. Подключение их через РИМы не допускается.

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

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

В селекторном режиме связь между устройством и подканалом является жесткой и устанавливается при сборке вычислительного комплекса. Селекторный режим достигается подключением устройства к специальному разъему в согласователе ввода-вывода. СВВ1 и СВВ2 имеют по два таких разъема (для первого и второго каналов ПДП соответственно), СВВ3 таких разъемов не имеет.

Устройства, подключенные к КПДП в селекторном режиме, недоступны для обмена информацией программным путем, так как они не имеют кодов выборки. Кроме того, работая с устройством в селекторном режиме, канал не может параллельно обслуживать еще какие-нибудь устройства. Однако скорость обмена информацией в селекторном режиме в два раза превышает скорость обмена в мультиплексном. Фактическая скорость обмена информацией, однако, определяется самим внешним устройством, так как каждое очередное слово или байт передаются только после того, как устройство сигналом ГТ-Т подтвердит свою готовность продолжать операцию обмена.

Управление каналом прямого доступа в память

Программно канал управляется как обычное устройство ввода-вывода. Чтобы начать операцию обмена, процессор выдает на ШИН-К пять управляющих слов канала (УСК1-УСК5), причем первые четыре определяют номер подканала, код выборки устройства ввода-вывода, адрес буфера, объем передаваемых данных и другую управляющую информацию, а последнее непосредственно запускает операцию ввода-вывода. Для программирования первого канала ПДП используется код выборки 12, второго — 14.

Каждое УСК выдается в канал в сопровождении сигнала ВП-К и только после того, как канал с помощью сигнала ГТ-Т подтвердит свою готовность принять очередное слово.

Первое УСК имеет следующий формат:

  • разряд 0 обычно содержит нуль;
  • разряд 1 содержит нуль при работе подканала в мультиплексном режиме и единицу при работе в селекторном режиме;
  • разряды 2-3 задают номер подканала;
  • разряд 4 должен всегда содержать нуль;
  • разряд 5 должен всегда содержать единицу, что является признаком УСК1;
  • разряд 6, равный нулю, задает операцию ввода; равный единице — операцию вывода;
  • разряд 7 задает обмен словами, если равен нулю, и байтами, если равен единице;
  • разряд 8 устанавливается, если обмен с устройством должен выполняться в сопровождении сигнала ВП-К;
  • разряд 9 устанавливается, если требуется сигнал ОСТ-К;
  • разряды 10-15 содержат код выборки устройства.

Второе и третье УСК задают абсолютный адрес буфера. Девять старших разрядов размещаются в младшей части УСК3, восемь младших — в младшем байте УСК2. Остальные разряды УСК2 и УСК3 должны содержать нули.

Четвертое УСК содержит количество передаваемых байтов или слов информации в виде отрицательного числа в дополнительном коде.

Пятое УСК содержит номер подканала во втором и третьем разрядах и единицу в седьмом разряде. Остальные разряды должны содержать нули.

Операция ввода-вывода может быть приостановлена выдачей каналу (по коду выборки 12 или 14) управляющего слова, содержащего в разрядах 2-3 код подканала, а в остальных разрядах — нули. Возобновить операцию можно выдачей УСК5 в описанном выше формате.

Канал вырабатывает сигнал готовности и формирует запрос прерывания по кодам выборки 13 для первого канала и 15 для второго канала. Сигнал готовности вырабатывается при окончании операции ввода-вывода в любом из подканалов, в том числе по причине какого-либо сбоя.

При возникновении прерывания необходимо прочитать слово состояния канала (ССК) путем выполнения чтения в РА или РБ с ШИН-Т для кода выборки 13 или 15. Разряды ССК 0-3 кодируют подканалы, закончившие операцию ввода-вывода (операция может одновременно закончиться в нескольких подканалах), а остальные разряды содержат нули.

Для проверки состояния подканала, закончившего операцию, необходимо получить слово состояния подканала (СП). Для этого нужно выдать по коду выборки 12 или 14 слово, содержащее в пятом и шестом разрядах номер подканала, в девятом разряде — единицу, в остальных разрядах — нули. После этого необходимо дождаться готовности устройства 12 или 14, а затем загрузить СП с ШИН-Т в РА или РБ.

Назначение разрядов СП следующее:

  • разряд 0 содержит единицу при нормальном завершении операции ввода-вывода;
  • разряд 1 содержит единицу, если устройство выработало сигнал КОП-Т;
  • разряд 2 содержит единицу, если устройство выработало сигнал ОШ-Т;
  • разряд 3 содержит единицу, если была обнаружена ошибка в принимаемой информации;
  • разряды 4 и 5 не используются;
  • разряд 6 содержит единицу, если произошел таймаут, т. было превышено максимально допустимое время обмена с устройством одним словом или байтом;
  • разряд 7 содержит единицу, если ошибка была обнаружена в выдаваемой информации;
  • разряды 8-15 не используются.