====== Электронная вычислительная машина М-20 ====== * Главный конструктор: академик С.А.Лебедев * Год окончания разработки: 1958 * Годы выпуска: 1958-1964 * Число выпущенных машин: 20 * Элементная база: электронные лампы (1600 штук) * Средняя производительность: 20 тыс. операций в секунду * Потребляемая мощность: 50 кВт {{m20.jpg}} [[http://www.computer-museum.ru/histussr/26-1.htm | Статья на сайте виртуаьного компьютерного музея]]. Система команд машин М-220 и БЭСМ-4 расширена по сравнению с М-20. Дополнительные команды (20, 40, 60, 17, 37, 57) здесь не описываются. {{m20-ime.pdf | М.Р.Шура-Бура, В.С.Штаркман "Вычислительная машина М-20"}}, Москва ЦБТИ 1962. Материалы из книги Ляшенко В.Ф. "Программирование для ЦВМ с системой команд типа М-20": * {{m20-poster.pdf | Вкладыш}} с кратким описанием системы команд М-20, М-220 и БЭСМ-4 (2.7 Мб). * {{m20-chapter5.pdf | Глава 5: Некоторые приёмы программирования}} (2.0 Мб). * {{m20-is2.pdf | Описание и коды ИС-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 === Пусть требуется решить уравнение если известно приближенное значение искомого корня Преобразуем уравнение к виду Так как производная функции в окрестности корня по абсолютной величине меньше единицы, то итерационный процесс будет сходящимся. Решать уравнение будем по формуле: пока не получим неравенства Исходные данные расположены так: ^ Номер ячейки ^ 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 осуществляет передачу управления на следующую итерацию, если и засылает в 4000 новое значение xi. После окончания итераций в ячейке 4000 находится корень уравнения === Пример 2 === Требуется вычислить значение sin x с точностью до 10-4 по ряду: Если после использования 20 членов ряда такая точность не достигается, дальнейшие вычисления прекратить и остановить машину. В ячейке a+1 записана единица, а в a+2 - одна десятитысячная; x находится в ячейке a+3; вычисленное значение sin x должно быть послано в ячейку a+4. Заметим, что каждый член, начиная со второго, может быть получен из предыдущего умножением его на где n - показатель степени при x в предыдущем члене. Так как ряд для вычисления sin x знакопеременный, то остаточный член ряда, определяющий точность, меньше по модулю последнего учтённого члена. Программа для вычисления 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 | . .. .... .... .... | |