Table of Contents
Электронная вычислительная машина М-20
- Главный конструктор: академик С.А.Лебедев
- Год окончания разработки: 1958
- Годы выпуска: 1958-1964
- Число выпущенных машин: 20
- Элементная база: электронные лампы (1600 штук)
- Средняя производительность: 20 тыс. операций в секунду
- Потребляемая мощность: 50 кВт
Статья на сайте виртуаьного компьютерного музея.
Система команд машин М-220 и БЭСМ-4 расширена по сравнению с М-20. Дополнительные команды (20, 40, 60, 17, 37, 57) здесь не описываются.
М.Р.Шура-Бура, В.С.Штаркман "Вычислительная машина М-20", Москва ЦБТИ 1962.
Материалы из книги Ляшенко В.Ф. “Программирование для ЦВМ с системой команд типа М-20”:
- Вкладыш с кратким описанием системы команд М-20, М-220 и БЭСМ-4 (2.7 Мб).
- Описание и коды ИС-2 (2.9 Мб).
Представление чисел
45 | 44 | 43—37 | 36————————————–1 |
---|---|---|---|
признак | знак | порядок | мантисса |
- Знак равен 0 для положительных и 1 для отрицательных чисел.
- Порядок смещён на 64.
- Мантисса хранится в прямом коде как для положительных, так и для отрицательных чисел.
- Ноль представлен нулями во всех битах.
- Признак не имеет арифметического значения.
Формула такая: Значение = 0.Мантисса * (1 - Знак*2) * 2 (Порядок - 64)
Для нормализованных чисел бит 36 всегда равен 1.
Пример: 1.0
45 | 44 | 43—–37 | 36————————————–1 |
---|---|---|---|
x | 0 | 1 000 001 | 100 000 000 000 000 000 000 000 000 000 000 000 |
Пример: -1.0
45 | 44 | 43—–37 | 36————————————–1 |
---|---|---|---|
x | 1 | 1 000 001 | 100 000 000 000 000 000 000 000 000 000 000 000 |
Представление команд
45 | 44 | 43 | 42—37 | 36————25 | 24————13 | 12————1 |
---|---|---|---|---|---|---|
Признак А1 | Признак А2 | Признак А3 | Код операции | Адрес 1 | Адрес 2 | Адрес 3 |
Регистры
Сокращение | Название | Разрядность | Описание |
---|---|---|---|
РА | Регистр адреса | 12 бит | Прибавляется к адресу Аi, если в команде установлен соответствующий бит-признак. |
Ω | Управляющий сигнал | 1 бит | Устанавливается большинством команд. Используется в командах условного перехода. |
РМР | Регистр младших разрядов | 36 бит | Хранит младшую часть мантиссы результата умножения. Считывается командой 47. |
Коды операций
У команд М-20 не было мнемонических обозначений, программирование велось непосредственно в числовых обозначениях. Указанная в таблицах мнемоника придумана автором (по аналогии с БЭСМ-6).
Арифметические операции
КОП | Мнемоника | Описание |
---|---|---|
01 | сл | Сложение с округлением и нормализацией |
21 | слбо | Сложение без округления с нормализацией |
41 | слбн | Сложение с округлением без нормализации |
61 | слбно | Сложение без округления и без нормализации |
02 | вч | Вычитание с округлением и нормализацией |
22 | вчбо | Вычитание без округления с нормализацией |
42 | вчбн | Вычитание с округлением без нормализации |
62 | вчбно | Вычитание без округления и без нормализации |
03 | вчм | Вычитание модулей с округлением и нормализацией |
23 | вчмбо | Вычитание модулей без округления с нормализацией |
43 | вчмбн | Вычитание модулей с округлением без нормализации |
63 | вчмбно | Вычитание модулей без округления и без нормализации |
04 | дел | Деление с округлением |
24 | делбо | Деление без округления |
44 | кор | Извлечение корня с округлением |
64 | корбо | Извлечение корня без округления |
05 | умн | Умножение с округлением и нормализацией |
25 | умнбо | Умножение без округления с нормализацией |
45 | умнбн | Умножение с округлением без нормализации |
65 | умнбно | Умножение без округления и без нормализации |
06 | слпа | Сложение порядка с адресом |
26 | слп | Сложение порядков чисел |
46 | вчпа | Вычитание адреса из порядка |
66 | вчп | Вычитание порядков чисел |
47 | счмр | Выдача младших разрядов произведения |
Логические операции
КОП | Мнемоника | Описание |
---|---|---|
00 | зп | Пересылка |
20 | счп | Чтение пультовых тумблеров |
13 | слк | Сложение команд |
33 | вчк | Вычитание команд |
53 | слко | Сложение кодов операций |
73 | вчко | Вычитание кодов операций |
14 | сдма | Сдвиг мантиссы по адресу |
34 | сдм | Сдвиг мантиссы по порядку числа |
54 | сда | Сдвиг по адресу |
74 | сд | Сдвиг по порядку числа |
15 | нтж | Поразрядное сравнение (исключаищее или) |
35 | нтжс | Поразрядное сравнение и останов машины по несовпадению |
55 | и | Логическое умножение (и) |
75 | или | Логическое сложение (или) |
07 | слц | Циклическое сложение (отдельно порядок и мантисса) |
27 | вчц | Циклическое вычитание (отдельно порядок и мантисса) |
67 | сдц | Циклический сдвиг (на 24 по 48-разрядной сетке) |
Операции управления
КОП | Мнемоника | Описание |
---|---|---|
10 | вп | Ввод с перфокарт |
30 | впбк | Ввод с перфокарт без проверки контрольной суммы |
50 | ма | Подготовка обращения к внешнему устройству |
70 | мб | Выполнение обращения к внешнему устройству |
11 | цме | Сравнение и установка регистра адреса, переход по < и Ω=1 |
31 | цбре | Сравнение и установка регистра адреса, переход по >= и Ω=1 |
51 | цмо | Сравнение и установка регистра адреса, переход по < и Ω=0 |
71 | цбро | Сравнение и установка регистра адреса, переход по >= и Ω=0 |
12 | цм | Сравнение и установка регистра адреса, переход по < |
32 | цбр | Сравнение и установка регистра адреса, переход по >= |
52 | раа | Установка регистра адреса адресом |
72 | ра | Установка регистра адреса |
16 | пв | Передача управления с возвратом |
36 | пе | Передача управления по условию Ω=1 |
56 | пб | Передача управления |
76 | по | Передача управления по условию Ω=0 |
77 | стоп | Останов машины |
Примеры программ
Примеры взяты из книги Ляшенко.
Пример 1
Пусть требуется решить уравнение
-
1/32 x5 - 3/4 x2 - x + 4.005 = 0
если известно приближенное значение искомого корня
-
x0 = 2.0
Преобразуем уравнение к виду
-
x = 1/32 x5 - 3/4 x2 + 4.005
Так как производная функции
-
у = 1/32 x5 - 3/4 x2 + 4.005
в окрестности корня по абсолютной величине меньше единицы, то итерационный процесс будет сходящимся.
Решать уравнение будем по формуле:
-
xi+1 = 1/32 xi5 - 3/4 xi2 + 4.005
пока не получим неравенства
-
| xi+1 - xi | < ε
Исходные данные расположены так:
Номер ячейки | 0020 | 0021 | 0022 | 0023 | 0024 |
---|---|---|---|---|---|
Содержимое | x0 = 2 | 4.005 | 1/32 | ε = 0.0001 | 3/4 |
Рабочие ячейки начинаются с ячейки номер 4000.
Номер ячейки | Команда | Вычисляемая величина |
---|---|---|
0100 | 0 00 0020 0000 4000 | Засылка x0 |
0101 | 0 05 4000 4000 4001 | xi2 |
0102 | 0 05 4001 4000 4002 | xi3 |
0103 | 0 05 4002 4001 4002 | xi5 |
0104 | 0 05 0022 4002 4002 | 1/32 xi5 |
0105 | 0 05 4001 0024 4001 | 3/4 xi2 |
0106 | 0 02 4002 4001 4001 | 1/32 xi5 - 3/4 xi2 |
0107 | 0 01 0021 4001 4001 | xi+1 = 1/32 xi5 - 3/4 xi2 + 4.005 |
0110 | 0 02 4001 4000 4002 | xi+1 - xi |
0111 | 0 03 4002 0023 0000 | | xi+1 - xi | - | ε | |
0112 | 0 76 4001 0101 4000 | Пересылка xi+1 в 4000 |
0113 | 0 77 0000 0000 0000 | Остановка |
Команда 0112 осуществляет передачу управления на следующую итерацию, если
-
| xi+1 - xi | - | ε | >= 0
и засылает в 4000 новое значение xi. После окончания итераций в ячейке 4000 находится корень уравнения
-
1/32 x5 - 3/4 x2 - x + 4.005 = 0
Пример 2
Требуется вычислить значение sin x с точностью до 10-4 по ряду:
-
sin x = x - x3/3! + x5/5! - ...
Если после использования 20 членов ряда такая точность не достигается, дальнейшие вычисления прекратить и остановить машину.
В ячейке a+1 записана единица, а в a+2 - одна десятитысячная; x находится в ячейке a+3; вычисленное значение sin x должно быть послано в ячейку a+4.
Заметим, что каждый член, начиная со второго, может быть получен из предыдущего умножением его на
-
- x2 / (n+1) / (n+2)
Программа для вычисления sin x может быть такой:
Адрес | Команда | Вычисляемая величина |
---|---|---|
k+1 | 0 00 a+3 0000 a+4 | Засылка x |
k+2 | 0 00 a+3 0000 c+1 | Засылка x |
k+3 | 0 00 a+1 0000 c+2 | Засылка единицы |
k+4 | 0 05 a+3 a+3 c+3 | x2 |
k+5 | 0 02 0000 c+3 c+3 | - x2 |
k+6 | 0 52 0000 0000 0000 | Очистка РА |
k+7 | 0 01 c+2 a+1 c+2 | n + 1 |
k+10 | 0 04 c+1 c+2 c+1 | 1/(n+1) xn/n! (-1)n-1 |
k+11 | 0 01 c+2 a+1 c+2 | n + 2 |
k+12 | 0 04 c+1 c+2 c+1 | 1/(n+1)/(n+2) xn/n! (-1)n-1 |
k+13 | 0 05 c+3 c+1 c+1 | Вычисление члена ряда |
k+14 | 0 01 a+4 c+1 a+4 | Вычисление суммы ряда |
k+15 | 0 03 c+1 a+2 0000 | Проверка точности |
k+16 | 1 51 0022 k+7 0001 | |
k+17 | 0 36 0000 k+21 0000 | Обход остановки, если получена нужная точность |
k+20 | 0 77 0000 0000 0000 | Остановка |
k+21 | . .. …. …. …. |