Меню
Главная
Случайная статья
Настройки
|
Еггогология — изучение недокументированных возможностей микрокалькуляторов.
Содержание
Происхождение
Название впервые возникло в СССР и носит шуточный характер. Предположительно происходит от сообщения об ошибке «ЕГГОГ» (англ. Error — ошибка), которую выдавали программируемые микрокалькуляторы второго поколения советского производства (Электроника Б3-34, МК-54, МК-56, МК-61, МК-52, МС 1104) на семисегментных индикаторах. Термин впервые появился в журнале «Техника — молодёжи» после цикла статей М. Пухова, посвящённых программированию на микрокалькуляторах серии «Электроника Б3-34»[1], и серии из девяти рассказов о фантастическом путешествии с Луны на Землю под общим названием «„Кон-Тики“: путь к Земле»[2]. В этом цикле, кроме игровых программ, описывались различные недокументированные возможности микрокалькуляторов и видеосообщения, многие из которых получались путём манипуляций с клавишами после появления сообщения об ошибке «ЕГГОГ» ().
Читатели журнала с огромным энтузиазмом откликнулись на рассказ об обнаруженных недокументированных возможностях микрокалькуляторов, стали искать новые, и по окончании цикла «Кон-Тики…» появился небольшой раздел «Новости еггогологии». С помощью опубликованных в нём недокументированных приёмов было написано множество новых игровых программ, большинство из которых просто не могло быть создано стандартными средствами в силу ограниченности ресурсов калькуляторов семейства Б3-34.[источник не указан 827 дней]
Направления еггогологии
Изначально предметом интереса была возможность формирования на дисплее буквенно-цифровых комбинаций, содержащих не только цифры 0-9, но и шестнадцатеричные символы, отображаемые калькулятором как –, L, С, Г, Е и пробел. Их можно было получить путём манипуляций над несохраняемым сообщением ЕГГОГ, которое микрокалькулятор выдаёт при попытке выполнить некорректную операцию (деление на ноль и т. д.). Такие «числа» можно хранить в регистрах памяти и использовать в качестве сообщений в игровых программах. В журнале «Техника — молодёжи» описывалась методика получения самых различных «видеосообщений», от буквы «Г» для программы «Лунолёт-1»[1] до целого мультфильма о полёте космического корабля по мотивам рассказа «Путь к земле»[3].
В дальнейшем, одним из направлений еггогологии стало расширение диапазона обрабатываемых чисел (числа с порядками от 100 до 199 также отображаются на экране как ЕГГОГ, см. «Нестандартные» числа) и изучение реакции микрокалькулятора на попытки произвести операции с числами за пределами стандартного диапазона.
Другое направление еггогологии изучало недокументированные возможности режима программирования; энтузиасты находили способы ввода недокументированных команд, например, содержащих символ «пусто» (F), изучали возможности нестандартного использования адресного пространства программ (см. главная и побочные ветви), ПСЧ-режим.
После того как в 2011 году инженером Ф. Лазаревым была проанализирована аппаратная архитектура советских микрокалькуляторов и считано содержимое ПЗУ, многие необычные возможности ПМК получили логическое объяснение. Выяснилось, что «Тьма» (полное отсутствие реакции калькулятора на нажатие клавиш) является следствием введения микропрограммы калькулятора в бесконечный цикл, а сообщение «ЕГГОГ» генерируется головным процессором К745ИК1302 по таймауту в случае, когда ни один из ведомых процессоров не смог обработать отданную ему команду[4].
«Нестандартные» числа
Еггогология утверждает, что порядок (показатель степени) диапазона обрабатываемых микрокалькулятором чисел ограничен по модулю 1000 и делит этот диапазон на так называемые этажи или «ярусы»[5]. Каждый ярус — это сотня из диапазона от 0 до 999. «Нулевой ярус» — это числа с основанием степени от 0 до 99, «первый ярус» — числа с показателем степени от 100 до 199 и т. д. Всего «ярусов» десять, причём «минус первый ярус» эквивалентен девятому (то есть показатель степени 80 в представлении микрокалькулятора эквивалентен 920), минус второй — восьмому (например, показатель 180 эквивалентен 820) и т. д.
Документацией максимальное значение чисел, над которыми можно производить математические действия, ограничивалось значением ±9.9999999 10±99 (то есть нулевым и минус первым ярусами). В самом деле, если ввести в микрокалькулятор число 1 1050 (для чего достаточно последовательности нажатий клавиш 1 ВП 50) и возвести его в квадрат (нажать Fx), то на дисплее появится сообщение «ЕГГОГ». Такая индикация, согласно документации, является признаком сообщения об ошибке, так как число 1 10100 выходит за пределы «стандартного» диапазона. Однако на самом деле это сообщение об ошибке также представляет собой число «первого яруса», с которым можно производить обычные операции: складывать, умножать, делить, вычислять значения функций, запоминать его в регистре памяти, вызывать из регистра. Таким же образом можно работать с числами «второго яруса» (например, 1 10200, простейший способ получить такое число — возвести в квадрат число 1 10100). Чтобы выяснить реальные значения таких чисел, их нужно было разделить на 1 1099 или подобные числа для приведения к числу из «нулевого яруса» (по абсолютному модулю не превышающие 9,9999999 1099).
Другими словами, давался способ расширения диапазона чисел, обрабатываемых стандартными действиями, до ±9.9999999 10299. Также было возможно с некоторыми ухищрениями (с помощью специально написанных программ) получать числа до ±9.9999999 10799 и анализировать их значение (то есть выяснить мантиссу и порядок). С помощью таких «вычислений» доказывалось, что девятый ярус представляет собой числа с отрицательным значением основания степени (например, 1 10920 было эквивалентным представлением числа 1 1080). Числа восьмого яруса (числа от ±1 10800 до ±9.9999999 10899 а также от ±1 10900 до ±9.9999999 10900) невозможно сохранить после их получения, так как они немедленно преобразовывались в обычный нуль, независимо от того, с какой стороны к ним «подбираться» (с седьмого или девятого яруса).
Классификация числовых ярусов
Числовой ярус
|
Название чисел
|
Диапазон чисел
|
Краткая характеристика числа из этого диапазона
|
Нулевой
|
Обычные числа с неотрицательным порядком
|
От ±1 до ±9.9999999 1099
|
Можно производить обычные вычисления
|
Первый
|
«ЕГГОГи»
|
От ±1 10100 до ±9.9999999 10199
|
Можно производить обычные вычисления, но отображаются на дисплее как
|
Второй
|
«3ГГОГи»
|
От ±1 10200 до ±9.9999999 10299
|
Можно производить обычные вычисления, но отображаются на дисплее как . Выполняют безусловный переход на адрес, совпадающий с двумя первыми цифрами порядка (от 20 до 29)
|
Третий
|
«Неукротимые чудовища»
|
От ±1 10300 до ±9.9999999 10399
|
Способны произвольно перевести микрокалькулятор в режим исполнения программы или привести к его зависанию
|
Четвёртый
|
«ОС-оборотни»
|
От ±1 10400 до ±9.9999999 10499
|
Копируют в искажённом виде структуру ярусов, применяются для анализа других чисел. Искажают содержимое регистра С
|
Пятый
|
«Тьма»
|
От ±1 10500 до ±9.9999999 10599
|
При попытке вывода на дисплей приводят к зависанию микрокалькулятора. Индикатор гаснет, работоспособность восстанавливается после выключения и включения (в МС 1104 имелась специальная кнопка для подавления этого эффекта)
|
Шестой
|
«С-ЕГГОГ-оборотни»
|
От ±1 10600 до ±9.9999999 10699
|
Искажают содержимое регистра С
|
Седьмой
|
«Длинные монстры»
|
От ±1 10700 до ±9.9999999 10799
|
Копируют в искажённом виде структуру ярусов, применяются для анализа других чисел
|
Восьмой (минус второй)
|
«Нули»
|
От ±1 10800 до ±9.9999999 10900 или от ±1 10200 до ±9.9999999 10100 (зависит от способа получения)
|
Немедленно преобразовывается в обычный ноль
|
Девятый (минус первый)
|
Обычные числа с отрицательным порядком
|
От ±1 1099 до ±9.9999999 101
|
Можно производить обычные вычисления
|
Подробное описание
Под этим сообщением прячутся числа от ±1 10200 до ±9.9999999 10299. Над ними можно производить обычные арифметические операции. При появлении 3ГГОГа на экране десятичная точка сохраняет своё положение от предыдущего числа, а счётчик адресов программы устанавливается на адрес, равный двум первым цифрам порядка 3ГГОГа.
Любой 3ГГОГ может быть «расшифрован» командами: FАВТ, точка (справа на дисплее появляется его порядок), FАВТ (слева появляется мантисса бывшего 3ГГОГа, а справа возникает порядок --L или --3).
При вызове 3ГГОГа из регистра памяти 0-9 и последующем нажатии ВП или десятичной точки калькулятор ведёт себя несколько похожим образом, как если бы на дисплее появилось «сверхчисло» с порядком, начинающимся на номер регистра. Например, если 3ГГОГ вызван из регистра 1 — возникает сообщение ЕГГОГ; из регистра 2 — снова 3ГГОГ; из регистра 3 — в режиме программирования появляется «испорченная» команда « 3»; из регистра 4 — Тьма; из регистра 7 — «Длинный монстр».
От ±1 10400 до ±9.9999999 10499.
При вытаскивании «ОС-оборотня» из регистра он заносит свой «хвост» в регистр С. «Хвост» также является сверхчислом, чьи две первые цифры порядка являются последними двумя цифрами порядка «ОС-оборотня». Если «хвост» также является «ОС-оборотнем» (это происходит для чисел с порядками с 440 по 449), то он также заносит свой «хвост» в регистр С. Существуют оборотни 3-го порядка — числа с порядком 444.
Пример:
В/О FПРГ Fx2 Fx2 Fx2 ХПС Сх С/П FАВТ В/О 1 ВП 22 В 1 ВП 50 С/П
ПХС на экране 0
ПХС на экране 0
ПХС на экране 0
ПХС на экране последний «Хвост» с тремя буквами Е.
От ±1 10600 до ±9.9999999 10699.
Если «С-ЕГГОГ-оборотня» вытащить из регистра, то он прикроется содержимым регистра C, а сам переместится в регистр Y. При выполнении над ним арифметической операции — Г.ГГОГ.
На основе свойств «С-ЕГГОГ-оборотня» придуман т. н. «АСО-анализ»:
- В регистр 0 помещаем «С-ЕГГОГ-оборотень» (можно и в другой регистр)
- В регистр А (только!) помещаем ЕГГОГ.
- ПXA ПX0 PX — содержимое регистра C — мантисса и 3-значная степень
- // — содержимое P0
Меры предосторожности при работе с «С-ЕГГОГ-оборотнями»:
- «Тьма» наступает:
- если после «АСО-анализа» нажать ВП, FАВТ
- если сразу после формирования ЕГГОГА вытащить «С-ЕГГОГ-оборотня»
- если вытащить «С-ЕГГОГ-оборотня» при «ПСЧ-режиме»
- если «С-ЕГГОГ-оборотень» вытаскивает из регистра C сам себя
Другое название — «К-числа».
От ±1 10700 до ±9.9999999 10799.
На индикаторе при появлении «Длинного монстра» появляется следующее число:
1,234567810735 = [50.12345678 3] Где первая цифра 5 на индикаторе — это третья цифра порядка, а последняя цифра 3 на индикаторе — вторая цифра порядка. А сам «Длинный монстр» записывается на 73 адрес программы, что соответствует первым двум цифрам порядка числа.
Недокументированные команды
Команды «со стрелками» вБ3-34
На микрокалькуляторе Б3-34 (и совместимых с ним МК-54, МК-56) во всех регистровых командах вместо клавиши номера (буквы) регистра можно использовать клавишу , то есть доступны недокументированные команды ИП, П, КИП, КП, Kx0, Kx0, Кх<0, Kx=0, КБП, КПП. При вводе этих команд в режиме программирования формируются коды, заканчивающиеся на E. При выполнении таких команд фактически происходит обращение к регистру 0; команды прямого обращения к регистру полностью аналогичны ИП0 и П0, но остальные команды, которые обеспечивают косвенный доступ к регистру 0, имеют важное отличие от соответствующих команд КИП0, КП0 и других: они не уменьшают значения регистра 0 при обращении. Это даёт возможность косвенного обращения к регистру 0 двумя способами: с уменьшением и без уменьшения значения в регистре.
Использование «команд со стрелками» упрощает обход регистров в цикле, позволяя использовать значение в регистре 0 одновременно и как счётчик цикла, и как индекс регистра. Например, простейшая программа суммирования значений в регистрах 1-N (предполагается, что данные записаны в регистры, а N вводится в регистр X перед запуском программы) выглядит так:
- П0 0 КИП + FL0 02 С/П (данные в регистрах от 1 до N) — 7 команд.
Вариант без «команд со стрелками»:
- П0 0 ИП0 ПE F КИПE + FL0 02 С/П — 10 команд;
- П0 2 + П1 0 КИП1 + FL0 05 С/П (данные в регистрах от 2 до N+1) — 10 команд и два дополнительных регистра (несколько быстрее).
Команды косвенных переходов «со стрелками» позволяют хранить адрес перехода в регистре 0 и выполнять переходы на него без модификации содержимого. Так как команда косвенного перехода занимает один шаг программы, а обычная команда перехода — два, запись адреса в регистр позволяет выиграть по одному шагу программы для каждого перехода на этот адрес.
У калькуляторов МК-61 и МК-52 клавиша «» соответствует новому регистру памяти E, а коды операций с регистром E соответствуют кодам «команд со стрелками» Б3-34, так что на этих калькуляторах «команды со стрелками» недоступны[6] (см. табл.). Обозначениям клавиш П, ИП и в Б3-34 соответствуют ХП, ПХ и Е в МК-61 и МК-52.
Коды команд
|
Команды Б3-34
|
Команды МК-61, МК-52
|
7E
|
Kx0
|
Kx0E
|
8E
|
КБП
|
КБПЕ
|
9E
|
Kx0
|
Kx0E
|
-E
|
КПП
|
КППЕ
|
LE
|
КП
|
КXПЕ
|
CE
|
Кх<0
|
Kx<0E
|
ГE
|
КИП
|
КПХЕ
|
EE
|
Kx=0
|
Kx=0E
|
Недоступность «команд со стрелками» в моделях МК-61/МК-52 создаёт сложности при адаптации программ от Б3-34, использующих эти команды. Для команд косвенных переходов проблема решается просто: нужный адрес записывается в регистр E, который в программах для Б3-34 не используется, и команды «со стрелками» меняются на команды с указанием регистра E. Но для команд КИП/КП ситуация намного сложнее: удаление каждой из них увеличивает размер программы минимум на 3 шага, из-за чего программной памяти может не хватить. В новых моделях МК-152/МК-161 доступны новые двухшаговые регистровые команды косвенного обращения РКИП00/РКП00, работающие так же, как КИП/КП в Б3-34; каждая такая команда увеличивает программу только на один шаг, а гораздо большая программная память новых калькуляторов делает это увеличение практически несущественным.
Некорректные операции с клавишей К
На микрокалькуляторе Б3-34 большинство недокументированных операций с клавишей К вызывает сообщение ЕГГОГ. Это команды К3—К9, К+, К, К, К, , К, К//, КВП, КСх и К десятичная запятая. Команды К1 и К2 эквивалентны операции КНОП.
На МК-61 и МК-52 к сообщению ЕГГОГ приводят только команды К, К, К. Команды К1 и К2 также эквивалентны операции КНОП. Коды остальных команд документированы и используются для преобразования временных и угловых мер, определения модуля и знака числа, целой и дробной частей числа, большего из двух чисел, логических операций и генерации случайного числа.
Некорректной операцией на МК-61 и МК-52 является также перевод минут (секунд) в градусы и , если величина минут или секунд более или равна 60.
Сообщение ЕГГОГ, полученное с помощью некорректных операций с клавишей К, не является «сверхчислом» первого «яруса» и не может быть сохранено в регистре памяти, но может быть использовано для вывода на индикатор символов 16-ричных цифр, например:
1 К (высвечивается ЕГГОГ) ВП ВП (высвечивается буква Е).
Полученную букву Е можно сохранять в регистрах памяти и извлекать оттуда, а с помощью регистров 0—3 также и преобразовывать в символы других 16-ричных цифр:
П0 КИП0 ИП0 КНОП (Г) КИП0 ИП0 КНОП (С) КИП0 ИП0 КНОП (L) КИП0 ИП0 КНОП (-) КИП0 ИП0 КНОП (9) и т. д.
Подобные приёмы использовались для формирования видеосообщений, например, в игровых программах.
Получение видеосообщения, начинающегося с цифры F (изображается как пустое место) может нарушить нормальную работу микрокалькулятора (искажение программы и данных, самопроизвольный переход в режим счёта и т. п.). Избежать этого можно, сразу же «изгнав» его командой , подаваемой не менее четырёх раз[6] (по другим данным — семь раз[7]), не пытаясь проводить какие-либо другие операции.
Искусственный ввод кодов команд
В одном шаге программной памяти микрокалькулятора могут содержаться две шестнадцатеричные цифры, то есть теоретически может существовать 256 различных кодов команд. Из них в руководстве пользователя МК-61/52 документированы 214. Существует искусственный приём, позволяющий ввести 12 из 42 недокументированных кодов. Для этого вводится одна из команд переходов, например БП (код 51) и за ней две 16-ричные цифры, воспринимаемые калькулятором как адрес перехода. После этого команда перехода затирается командой-«пустышкой» КНОП, а последующий шаг при выполнении программы будет воспринят калькулятором уже не как адрес перехода, а как команда[8]. Некоторые из этих кодов можно ввести также путём недокументированных операций с клавишей К, описанных в предыдущем подразделе.
Коды команд
|
Действия команд
|
Ввод через клавишу К
|
27
|
Вызывает сообщение ЕГГОГ
|
K
|
28
|
Вызывает сообщение ЕГГОГ
|
К
|
29
|
Вызывает сообщение ЕГГОГ
|
K
|
2L
|
Вызывает сообщение ЕГГОГ
|
Нет
|
2С
|
Вызывает сообщение ЕГГОГ
|
Нет
|
2Г
|
Вызывает сообщение ЕГГОГ
|
Нет
|
2E
|
Вызывает сообщение ЕГГОГ
|
Нет
|
3С
|
Вызывает сообщение ЕГГОГ
|
Нет
|
3Г
|
Копирует содержимое регистра Х в Х1. Содержимое регистров X, Y, Z и Т сохраняется.
|
Нет
|
3Е
|
Перемещает содержимое регистра Х в Х1, копирует содержимое регистра Y в Х.
Содержимое регистров Y, Z и Т сохраняется.
|
Нет
|
55
|
Ничего не делает (равнозначна команде КНОП)
|
К1
|
56
|
Ничего не делает (равнозначна команде КНОП)
|
К2
|
Коды 55 и 56 использовались во входных языках малосерийных аналогов МК-52[9].
Данный приём неприменим для ввода остальных 30 недокументированных кодов команд, содержащих 16-ричную цифру F (изображаемую на индикаторе как пустое знакоместо), поскольку на клавиатуре микрокалькулятора нет клавиши для ввода цифры F (не путать с префиксной клавишей F). Некоторые способы ввода таких кодов будут рассмотрены в следующем подразделе.
Ввод кодов команд, содержащих цифру F
В микрокалькуляторе МК-52 существует возможность формирования любого из 256 кодов команд по любому из адресов программной памяти. Для этого используется следующая особенность записи программ в ППЗУ. При нормальном процессе записи программы необходимо сначала стереть соответствующий участок памяти ППЗУ. Если же этого не сделать, то происходит побитовое логическое сложение кодов команд из ОЗУ с кодами, имевшимися в ППЗУ ранее[10]. Так, если в ППЗУ по некоторому адресу записана команда БП (код 51), а по соответствующему адресу в ОЗУ находится команда В (код 0Е), то результатом логического сложения будет команда с кодом 5F (которая приводит к зависанию микрокалькулятора). Действия команд с кодами, содержащими цифру F, приведены в следующей таблице:
Коды команд
|
Действия команд
|
0F
|
Документированная команда FBx
|
1F, 2F, 3F
|
Ничего не делают (равнозначны команде КНОП)
|
4F
|
Равнозначна команде XП0 (код 40)
|
5F
|
Приводит к зависанию микрокалькулятора. Индикатор гаснет, работоспособность восстанавливается после отключения и включения питания.
|
6F
|
Равнозначна команде ПХ0 (код 60)
|
7F
|
Равнозначна команде Кх00 (код 70)
|
8F
|
Равнозначна команде КБП0 (код 80)
|
9F
|
Равнозначна команде Кх00 (код 90)
|
-F
|
Равнозначна команде КПП0 (код -0)
|
LF
|
Равнозначна команде КХП0 (код L0)
|
CF
|
Равнозначна команде Кх<00 (код С0)
|
ГF
|
Равнозначна команде КПХ0 (код Г0)
|
EF
|
Равнозначна команде Кх=00 (код Е0)
|
F0, F1, ... FF
|
Ничего не делают (равнозначны команде КНОП)
|
К сожалению, недокументированные команды 7F, 8F, … EF, осуществляющие косвенный доступ к регистру 0, уменьшают его содержимое, так же как и их документированные аналоги с кодами 70, 80, … Е0 и не могут служить заменой командам «со стрелками» в Б3-34.
В Б3-34 и МК-61, не имеющих ППЗУ, также существует возможность ввода некоторых команд с кодами, содержащими цифру F, но лишь по нескольким фиксированным адресам. Один способ состоит в использовании команд В/0 КППN в режиме ручных вычислений (F АВТ), N — любой из регистров (0—9, А—Е). При этом микрокалькулятор переходит в режим программирования и вставляет код FN по адресу 30+N (для буквенных регистров А—Е соответственно 40—44). Заметим, что при использовании регистров 0—6 результат зависит от их содержимого[11] Другой способ (проверенный его автором только на МК-61[8]) использует воздействие некорректной операции «ВП десятичная запятая» на «сверхчисла» первого «яруса» (ЕГГОГи). Для этого сначала создаётся «сверхчисло» двукратным применением команды ВП с суммой порядков более 99 (например, ВП 10 ВП 90), а затем, после появления сигнала ЕГГОГ, нажатием клавиш «ВП десятичная запятая 0». Это также переводит микрокалькулятор в режим программирования, и в данном примере по адресу 51 будет записана команда F1. Второй знак и адреса, и команды определяется первым знаком порядка в первой команде ВП (например, ВП 20 ВП 80 ВП .0 даёт команду F2 по адресу 52 и т. д.)
Недокументированное применение десятичной запятой в программе
Команда «десятичная запятая» (код 0-), использованная в программе (за исключением случаев документированного применения — для ввода числа по программе знак за знаком), заменяет значение в регистре Х на то, которое было в нём после последней из команд 0, 1, … 9, В, ПХ0, ПХ1, … ПХ9, ПХА, … ПХЕ[12].
Недокументированные способы диагностики ошибок
При возникновении сигнала ЕГГОГ при счёте по программе существует два недокументированных способа определить, в результате какой операции произошёл останов[6]:
- Нажатие клавиши в Б3-34 (В в МК-61/52). Если на индикаторе по-прежнему ЕГГОГ, то произошло переполнение, а если число — некорректная операция, «виновником» которой является это число.
- Нажатие клавиши ВП. Возможные показания индикатора и соответствующие им ошибки:
- «ЕГГОГ 00» — переполнение («сверхчисло» первого «яруса»)
- «Г.ГГОГ 00» — деление на нуль, вычисление логарифма от нуля, степенной функции 00, некорректная операция с клавишей К.
- «ЕГ.ГОГ 00» — вычисление tg 90°.
- «Е.ГГОГ 00» — вычисление арксинуса или арккосинуса от числа, большего 1.
- «ЕГГОГ 00» (с десятичной запятой на том же месте, что в аргументе) — положительный аргумент показательной функции больше допустимого
- «ЕГГОГ 00» (с десятичной запятой на том же месте, что в аргументе) — отрицательный аргумент показательной функции по модулю больше допустимого, или извлечение квадратного корня из отрицательного числа.
Второй способ не работает после первого, и наоборот. Чтобы применить обе диагностики, необходимо дважды запустить программу с одинаковыми исходными данными. В режиме ручных вычислений это также работает, но обычно не требуется, поскольку и так ясно, в результате какой операции возникла ошибка.
Команда В/0 вне подпрограммы
Команда В/0, предназначенная для завершения подпрограмм, при использовании в основной программе, как правило, осуществляет переход на адрес 01. Этим иногда пользуются для сокращения программы, заменяя две команды БП 01 одной В/0. Особенно часто эта особенность используется при нестандартном использовании адресного пространства программы (см. Главная и побочные ветви). Однако иногда использование этой особенности приводит к неправильному результату.
Причина этой особенности в том, что адреса, с которых вызываются подпрограммы, записываются в пятирегистровый стек возврата, а по команде В/0 извлекаются из него и происходит возврат на адрес, на единицу больший. Если в стек возврата ничего не было записано, в нём хранятся нули и по команде В/0 происходит переход на адрес 01. То же самое произойдёт, если в стек возврата заносилось не более четырёх адресов при вызовах подпрограмм и все они были извлечены при возвратах — следующий извлекаемый адрес будет нулём.
Однако если в стек возврата занесено пять адресов, при извлечении первого из них в последнем регистре формируется «адрес-диверсант», обе цифры которого совпадают с последней цифрой адреса, находившегося там ранее. По мере извлечения остальных адресов из стека возврата, «адрес-диверсант» заполняет все его регистры, и затем, в случае использования команды В/0 вне подпрограммы, переход будет осуществлён неправильно[6].
Очистить стек возврата можно с помощью ЗГГОГа с нулевой мантиссой: Сх В ВП Fх2 Сх Сх
Косвенное обращение к регистру, содержащему число вне допустимого диапазона
Если в каком-либо из регистров 7—Е находится число, по модулю меньшее единицы, то при косвенном обращении к нему формируется адрес перехода, определяемый мантиссой и последней цифрой порядка[6] (см. табл., МN — N-я цифра мантиссы)
Последняя цифра порядка
|
Адрес перехода при отрицательных порядках
|
Адрес перехода при положительных порядках
|
1
|
М7М8
|
М1М2
|
2
|
М7М8
|
М2М3
|
3
|
М7М8
|
М2М3
|
4
|
М6М7
|
М4М5
|
5
|
М5М6
|
М5М6
|
6
|
М4М5
|
М6М7
|
7
|
М2М3
|
М7М8
|
8
|
М2М3
|
М7М8
|
9
|
М1М2
|
М7М8
|
0
|
0М1
|
0М1
|
|
|