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

Архитектура и система команд ЭВМ “Стрела”

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

Вычислительная машина “Стрела” создана в 1953 г. под руководством Ю. Я. Базилевского, это была первая серийная ЭВМ в Советском Союзе.

“Стрела” относится к классу больших вычислительных машин с трехадресной системой команд. Ее быстродействие составляет 2-3 тыс. операций в секунду, объем памяти — 2048 ячеек по 43 разряда. Машина оперирует числами с плавающей запятой в двоичной системе счисления. Точность представления чисел составляет 10-11 десятичных знаков, диапазон от 10-19 до 1019.

Внешняя память представлена двумя магнитными лентами. Суммарный объем информации на одной ленте не может превышать 100 тыс. 43-битовых чисел.

Информация вводится в “Стрелу” с перфокарт, выводится на перфокарты или на печатающее устройство. На одной перфокарте размещается 12 43-разрядных чисел.

В конструкции машины использовано около 6 тыс. электронных ламп и несколько десятков тысяч полупроводниковых диодов. Память выполнена на электронно-лучевых трубках (43 трубки — по одной на каждый разряд). Потребляемая самой ЭВМ мощность составляет 75 кВт. Кроме того, 25 кВт идет на вентиляцию и еще 50 кВт расходует холодильная установка. Среднее время полезной работы машины составляет 15-18 ч в сутки.

1. Память и структура информации

Память ЭВМ “Стрела” имеет объем 2048 ячеек по 43 разряда, нумеруемых слева направо от 0 до 42. Таким образом, старший разряд имеет номер 0, младший — 43.

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

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

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

1.1. Представление чисел

“Стрела” обрабатывает числа с плавающей запятой в двоичной и десятичной системах счисления.

Двоичное число с плавающей запятой при записи в машинном формате состоит из знака мантиссы (разряд 0), абсолютной величины мантиссы (разряды 1-35), знака порядка (разряд 36) и абсолютной величины порядка (разряды 37-42).

Десятичное число с плавающей запятой также состоит из знака мантиссы (разряд 0), абсолютной величины мантиссы (разряды 1-36), знака порядка (разряд 37) и абсолютной величины порядка (разряды 38-42). Каждая десятичная цифра мантиссы записывается в двоично-десятичном коде, по 4 бита на одну цифру. Порядок, однако, хранится в двоичном виде и не должен по абсолютной величине превышать 19.

Мантисса всегда имеет величину меньше 1. В памяти хранится только ее дробная часть, а целая считается равной нулю.

1.2. Постоянная память

ЭВМ “Стрела” имеет постоянную память, ячейки которой имеют адреса от 74008 до 77778. В ней хранятся часто используемые константы, поэтому сама память часто называется устройством выдачи констант (УВК). Некоторые константы, хранящиеся в УВК, приведены в табл. 1.

Адрес Константа, представленная в коде команд Пояснение
7400 2000 0000 0000 0 01 1 (единица)
7423 0001 0000 0000 0 00 1 (I)
7424 0000 0001 0000 0 00 1 (II)
7425 0000 0000 0001 0 00 1 (III)
7426 0001 0001 0000 0 00 1 (I), 1 (II)
7427 0000 0001 0001 0 00 1 (II), 1 (III)
7430 0001 0000 0001 0 00 1 (I), 1 (III)
7431 0001 0001 0001 0 00 1 (I), 1 (II), 1 (III)
7434 7777 7777 7777 0 00 Вспомогательное число для выделения адресной части команды
7435 3777 7777 7777 1 77 Вспомогательное число для выделения абсолютной величины нормализованного числа
7436 0000 0000 0000 1 77 Вспомогательное число для выделения контрольного знака и кода операции
7437 0000 0000 0000 0 77 Вспомогательное число для выделения кода операции
7440 0000 0000 0000 1 00 Вспомогательное число для выделения контрольного знака
7446 7777 0000 0000 0 00 Вспомогательное число для выделения первого адреса
7447 0000 7777 0000 0 00 Вспомогательное число для выделения второго адреса
7450 0000 0000 7777 0 00 Вспомогательное число для выделения третьего адреса
7451 7777 7777 0000 0 00 Вспомогательное число для выделения первого и второго адресов
7452 0000 7777 7777 0 00 Вспомогательное число для выделения второго и третьего адресов
7453 7777 0000 7777 0 00 Вспомогательное число для выделения первого и третьего адресов
7455 2000 0000 0000 0 02 2
7461 2000 0000 0000 0 00 1/2
7523 2650 1171 4640 0 01 Ц2
7560 3110 3755 2420 0 01 p/2
7575 4000 0000 0000 0 43 Вспомогательное число для выделения целой части

1.3. Внешняя память на магнитных лентах

Внешняя память состоит из двух бобин магнитной ленты. Каждая лента разбивается на зоны (на одной ленте может быть до 511 зон). В каждой зоне может быть записано от 1 до 2048 чисел. Зоны первой магнитной ленты имеют восьмеричные номера от 4001 до 4777, зоны второй ленты — от 5001 до 5777. Чтение и запись информации производится с помощью специальных команд.

1.4. Представление информации на перфокартах

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

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

При пробивке десятичных чисел знак пробивается в виде одной двоичной цифры (0 соответствует знаку “+”, 1 — “-”). Каждая десятичная цифра мантиссы пробивается тетрадой двоичных цифр. Порядок сразу пробивается в виде пятиразрядного двоичного числа.

2. Система команд

2.1. Структура кода команды

“Стрела” является трехадресной вычислительной машиной, т. е. в каждом коде команды указываются три адреса операндов. Структура кода команды такова:

  • разряды 0-11 — первый адрес;
  • разряды 12-23 — второй адрес;
  • разряды 24-35 — третий адрес;
  • разряд 36 — контрольный знак;
  • разряды 37-42 — код операции.

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

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

0065 0231 1101 0 01

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

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

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

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

2.3. Набор команд

В табл. 2 приведены команды ЭВМ “Стрела” с необходимыми пояснениями. В этой таблице a обозначает ячейку, определяемую адресом в разрядах 0-11 кода команды, b — ячейку, определяемую адресом в разрядах 12-23 кода команды, c — ячейку, определяемую адресом в разрядах 24-35 кода команды. Запись вида P(a) означает порядок числа, находящегося в соответствующей ячейке памяти.

Код операции Наименование команды Условие установки признака w Действия, выполняемые машиной по этой команде
01 Сложение с < 0 Числа a и b алгебраически складываются, сумма нормализуется и помещается в ячейку c
03 Вычитание c < 0 От числа a отнимается число b, разность нормализуется и записывается в ячейку c
05 Умножение |c| >= 1 Числа a и b перемножаются, произведение записывается в ячейку c. Если хотя бы один из сомножителей не нормализован, получается нулевой результат
04 Вычитание модулей c < 0 От абсолютной величины числа a отнимается абсолютная величина числа b. Результат записывается в ячейку c
06 Сложение порядков P(c) >= 1 В ячейку c записывается число, имеющее мантиссу числа a и порядок, равный сумме порядков чисел a и b. Нормализация результата не производится. Если число a не нормализовано, то и результат будет не нормализован
07 Вычитание порядков P(c) >= 1 В ячейку c записывается число, имеющее мантиссу числа a и порядок, равный разности порядков чисел a и b. Нормализация результата не производится. Если число a не нормализовано, то и результат будет не нормализован
10 Перенос числа с присвоением знака другого числа P(c) >= 1 В ячейку c записывается число, имеющее абсолютную величину числа a и знак числа b. Нормализация результата не производится. Если число a не нормализовано, то и результат будет не нормализован
12 Сложение чисел без округления c = 0 Числа a и b алгебраически складываются. Округление 35-го разряда мантиссы не производится. Результат нормализуется и записывается в ячейку c
11 Выделение части с = 0 Производится операция "Логическое И" между ячейками a и b. Результат помещается в ячейку c
13 Формирование c = 0 Производится операция "Логическое ИЛИ" между ячейками a и b. Результат помещается в ячейку c
16 Сравнение c != 0 Производится операция "Исключающее ИЛИ" между ячейками a и b. Результат помещается в ячейку c
14 Сдвиг по порядку c = 0 Содержимое всех разрядов ячейки a сдвигается на P(b) разрядов. Результат записывается в ячейку c. Если P(b) > 0, сдвиг производится влево, в противном случае - вправо Если число сдвигаемых разрядов превышает 3710, получается нулевой результат
Сдвиг по порядку Содержимое всех разрядов ячейки a сдвигается влево или вправо на число разрядов, определяемое битами второго адреса. Результат записывается в ячейку c. Если число сдвигаемых разрядов превышает 3710, получается нулевой результат. Для сдвига влево в поле второго адреса должна находиться величина 4000+k или 5000+k, где k - количество разрядов, на которое производится сдвиг. Для сдвига вправо используется величина 4100+k или 5100+k
17 Контрольное суммирование Числа a и b складываются по всем разрядам с циклическим переносом из старшего разряда в младший. Результат записывается в ячейку c
02 Специальное сложение Производится сложение адресных полей (битов 0-11, 12-23 и 24-35) ячеек a и b. Результат сложения, дополненный контрольным знаком и кодом команды из ячейки a, заносится в ячейку c
15 Специальное вычитание Производится вычитание адресных полей (битов 0-11, 12-23 и 24-35) ячейки b из ячейки a. Результат вычитания, дополненный контрольным знаком и кодом команды из ячейки a, заносится в ячейку c
62 Вычитание обратной величины Вычисляется n+1 величин, обратных числам в ячейке a и следующих за ней. Результаты записываются в ячейку c и последующей за ней. N равно содержимому битов 12-23 кода команды, т. е. второму адресу. Если содержимое любой из исходных ячеек равно нулю, происходит останов машины.
63 Извлечение квадратного корня Вычисляется n+1 квадратных корней из содержимого ячейки a и следующих за ней. Результаты записываются в ячейку c и последующей за ней. N равно содержимому битов 12-23 кода команды, т. е. второму адресу. Если содержимое любой из исходных ячеек меньше, происходит останов машины. Если содержимое последней исходной ячейки (a+n) превышает 0, в ячейку 0002 производится запись числа 1/Ц(a+n)
64 Вычисление показательной функции Вычисляется n+1 показательных функций для ячеек a и следующих за ней. Результаты записываются в ячейки c и следующие за ней. N равно содержимому битов 12-23 кода команды, т. е. второму адресу. При переполнении происходит останов машины.
66 Вычисление логарифма Вычисляются n+1 натуральных логарифмов чисел, содержащихся в ячейках a и следующих. Результаты записываются в ячейки c и следующие. N равно содержимому битов 12-23 кода команды, т. е. второму адресу. Если встречается исходное число, меньшее или равное нулю, происходит останов машины.
67 Вычисление синуса Вычисляются n+1 синусов чисел, содержащихся в ячейках a и следующих. Результаты записываются в ячейки c и следующие. N равно содержимому битов 12-23 кода команды, т.е. второму адресу
73 Вычисление арктангенса Вычисляются n+1 арктангенсов чисел, содержащихся в ячейках a и следующих. Результаты записываются в ячейки c и следующие
74 Вычисление арксинуса Вычисляются n+1 арксинусов чисел, содержащихся в ячейках a и следующих. Результаты записываются в ячейки c и следующие. N равно содержимому битов 12-23 кода команды, т. е. второму адресу. Если хотя бы одно исходное число по модулю превышает единицу, происходит останов машины. В ячейку 0002 записывается арккосинус последнего из обрабатываемых чисел (ячейки a+n).
72 Перевод чисел в двоичную систему N+1 чисел из ячеек a и следующих переводятся из двоично-десятичной системы в двоичную и записываются в ячейки c и следующие. N равно содержимому битов 12-23 кода команды, т. е. второму адресу
70 Перевод чисел в десятичную систему N+1 чисел из ячеек a и следующих переводятся из двоичной системы в двоично-десятичную и записываются в ячейки c и следующие. N равно содержимому битов 12-23 кода команды, т. е. второму адресу
43 Перенос чисел с ленты в память Перенос n+1 чисел из зоны a магнитной ленты в память, начиная с адреса c. N равно содержимому битов 12-23 кода команды, т. е. второму адресу
46 Перенос чисел из памяти на ленту Перенос n+1 чисел из памяти, начиная с ячейки c, в зону a магнитной ленты. N равно содержимому битов 12-23 кода команды, т. е. второму адресу
41 Перенос чисел с перфокарт в память Перенос n+1 чисел с перфокарт в память, начиная с адреса c. N равно содержимому битов 12-23 кода команды, т. е. второму адресу. Поле a равно нулю
44 Перенос чисел из памяти на перфокарты Перенос n+1 чисел из памяти, начиная с адреса c, на перфокарты. N равно содержимому битов 12-23 кода команды, т. е. второму адресу. Поле a равно нулю
45 Перенос чисел из памяти в память Перенос n+1 чисел из памяти, начиная с адреса a, в память, начиная с адреса c. N равно содержимому битов 12-23 кода команды, т. е. второму адресу
60 Групповая передача с контролем Производится передача n чисел, контролирующаяся сравнением их сумм до передачи и после нее. Суммы вычисляются с помощью операции 17. При несовпадении сумм машина останавливается, выдавая их на пульт управления. При переносе чисел с перфокарт начальную сумму пробивают перед числами, подлежащими вводу; в остальных случаях обе суммы вычисляются автоматически. Для переноса чисел с перфокарт в память a=0000, 0001<=c<=3777; из памяти на перфокарты - 0001<=a<=3777, c=0; с магнитной ленты в память - m+1<=<a=m+777, 0001<=c<=3777; из памяти на магнитную ленту - 0001<=a<=3777, m+1<=c<=m+777 (в обоих случаях m=4000 или 5000); из одних ячеек памяти в другие - 0001<=a<=3777, 0001<=c<=3777. Во всех случаях количество передаваемых чисел n задается полем b кода команды (разрядами 12-23). При переносе чисел в память ячейка с адресом c будет содержать сумму, а сами числа будут записываться в следующей за ней ячейки. Однако в некоторых экземплярах ЭВМ сумма располагалась не перед, а после массива чисел.
20 Условный переход первого типа Если после выполнения предыдущей операции w=0, то управление передается команде с адресом a. Если же w=1, управление получит команда с адресом b. Одновременно в ячейку c происходит запись нуля. Если адрес ячейки c совпадает с адресом этой команды, то сначала определяется адрес перехода, а затем ячейка с кодом команды очищается
27 Условный переход второго типа Если после выполнения предыдущей команды w=0, то управление передается на адрес a. Если же w=1, управление получит команда с адресом b. Одновременно в ячейку c автоматически записывается команда возврата с кодом (n+1; n+1; c; 20), где n - адрес ячейки, содержащий данную команду условного перехода
25 Подвод ленты Подводится под считывающую головку зона a магнитной ленты. Поля b и c кода команды равны нулю. Эта команда выполняется одновременно со следующими за ней командами, не относящимися к магнитной ленте. Выполнение команды прерывается, если среди выполняемых команд встретится новая команда, относящаяся к магнитной ленте.
40 Останов Машина останавливается и выдает на пульт управления числа a и b. Поле c кода команды равно нулю
26 Сравнение и останов при несовпадении Команда отличается от команды с кодом операции 16 тем, что при w=1 происходит останов с выдачей на пульт управления чисел a и b
30 Предварительная команда Групповая операция вида (a; b; c; 0)
31 Предварительная команда Групповая операция вида (a; b; [c]; 0)
32 Предварительная команда Групповая операция вида (a; [b]; c; 0).
33 Предварительная команда Групповая операция вида (a; [b]; [c]; 0).
34 Предварительная команда Групповая операция вида ([a]; b; c; 0).
35 Предварительная команда Групповая операция вида ([a]; b; [c]; 0).
36 Предварительная команда Групповая операция вида ([a]; [b]; c; 0).
37 Предварительная команда Групповая операция вида ([a]; [b]; [c]; 0).

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

Команды с кодами операций 60, 62-64, 66, 67, 70, 72-74 выполняются посредством подпрограмм, постоянно хранящихся в специальном запоминающем устройстве. После выполнения любой из этих команд управление получит следующая за ней команда, которая не должна быть командой условного перехода. Во всех этих командах поле второго адреса используется для определения количества чисел, над которыми будет выполняться данная операция (значение 0 соответствует одному числу).

Команды с кодами операций 30-37 предназначены для группового выполнения арифметико-логических команд и размещаются в памяти непосредственно перед командой, которую необходимо выполнить многократно. В коде предварительной команды поле a должно быть равно нулю, а поле b задает количество повторений основной команды (нуль соответствует однократному выполнению). Если в поле c задан ненулевой адрес, указанная ячейка перед первым выполнением основной команды обнуляется.

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