Приложение. Все команды

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

Код Вид Название Комментарий
00…09 09 Ввод числа Ввод цифр идёт даже через границу С/П. Т. е. если в начале программы идёт цифра(ы), а перед её запуском тоже ввод, то он продолжится. То же касается и разделителя ., он может как заканчивать ввод в режиме вычислений, так и начинать в программе – будет воспринят как разделитель целой и дробной части.
Второе нажатие . для разделения разрядов игнорируется. Например, последовательность 1 . 2 . 3 выведет 1.23, даже в программном режиме.
Если предыдущая команда была не ввод цифры или разделителя, а так же не команда В↑, то предварительно осуществляется сдвиг стека под новое число.
0A . Разделитель целой и дробной части Кроме того, что указано выше восстановление X2→X в программном режиме. См. Таинственный регистр X2.
0B /-/ Смена знака Предыдущее значение НЕ копируется в X1. Cм. также Таинственный регистр X2. Если смена знака идёт после ввода цифры, и далее снова идёт ввод цифры, то стек не сдвигается, а новое вводимое значение заменяет в регистре X то, что было после смены знака.
0C ВП Ввод порядка Для многих чисел ввод порядка означает умножение на 10 в соответствующей степени.
После ввода порядка можно ещё раз нажать ВП и ввести число – в этом случае порядки складываются.
Знак порядка можно ввести как сразу после ВП, так и после ввода цифр.
Если мантисса регистра X нулевая, то первая цифра заменяется на 1, причём, если была нажата смена знака /-/ до команды ВП, то будет уже −1, даже в программном режиме. Причём у минус нуля до этого знак не отображается. На самом деле в программном режиме это будет восстановление −0 с увеличением первой цифры на 1, как указано в разделе Восстановление X2 с сохранением первой цифры числа в X. Например, выполнение программы
 # |  00 01 02 03 04 05 06 07 08 09
 00 |  Cx /-/ Fπ Fx2 КНОП ВП С/П
приведёт к −А (--. ).
Пример для нестандартной нулевой мантиссы. Возьмём число 200000000. , где двойка на месте знака (!), которое получается после косвенного обращения через R4…R6, если до того там содержалось 99999999. Тут после нажатия ВП число превратится в 210000000. .
0D Cx Сброс X в ноль Важное свойство – стек не двигается. Предыдущее значение НЕ копируется в X1. Обычно следующий ввод в RX сдвигает стек, но после Cx это иногда нет. Если после команды идёт ввод цифр, то стек не сдвигается, если перед выполнением Cx были:
  • Команды ввода чисел, но не отдельно команды /-/ и .
  • Команда В↑
  • Команда ВП, возможно дополненная ввод цифр и/или знака порядка
Если после Cx идёт ВП, то стек тоже не сдвигается. В остальных случаях стек сдвигается, даже при вводе цифр. Например последовательность команд 1 КНОП СХ 2, приведёт к тому, что в RY сдвинется ноль. Если убрать КНОП, то RY не измениться. Ещё пример. После 1 П→x2 /-/ СХ 3 стек будет таким: X=3, Y=0, Z=1. А если /-/ заменить на ВП, то стек останется таким: X=3, Y=1.
0E В↑ Сдвиг стека Если последующая команда – ввод числа, то будет ввод в X, если извлечение из памяти или Fπ – то стек ещё раз сдвинется.
0F FВx Полный сдвиг, включая X1 Единственная документированная и вводимая команда с цифрой F в коде.
10 + Сложение Результат проверяется только при X→X2, т. е. можно использовать для получения сверхчисел.
11 Вычитание Результат проверяется только при X→X2, т. е. можно использовать для получения сверхчисел.
12 × Умножение Результат проверяется при X→X2, т. е. можно использовать для получения сверхчисел.
13 ÷ Деление Ошибка деления на ноль возникает безусловно, остальное при X→X2.
14 ←→ Обмен X и Y
15 F10x Возведение в степень числа 10 Аргументы на переполнение порядка, сверхчисло, проверяется безусловно, а не при X→X2.
16 Fex Возведение в степень числа e – экспонента Аргументы на переполнение порядка, сверхчисло, проверяется безусловно, а не при X→X2.
17 Flg Десятичный логарифм Аргументы на больше нуля проверяется безусловно, а не при X→X2.
18 Fln Натуральный логарифм Аргументы на больше нуля проверяется безусловно, а не при X→X2.
19 Fsin-1 Арксинус Аргументы на |X|⩽1 проверяется безусловно, а не при X→X2. Для ГРД/Г и X = 0 выводит X = 00.
1A Fcos-1 Арккосинус Аргументы на |X|⩽1 проверяется безусловно, а не при X→X2. arccos(1) для ГРД/Г даёт ненормализованное 00.
1B Ftg-1 Арктангенс Для чисел x ⩾ 1.|+8 результат выдаёт близкий к максимуму – для радиан это почти π/2, для градов 99.999999. Может быть вычислен и для 1.|+100 в радианах из-за того, что порядок снижается, но не градусах.
1C Fsin Синус Аргументы на |X|<1.|+10 проверяется безусловно, а не при X→X2.
1D Fcos Косинус Аргументы на |X|<1.|+10 проверяется безусловно, а не при X→X2.
1E Ftg Тангенс Аргументы на |X|<1.|+10 проверяется безусловно, а не при X→X2. При X = π/2 + n × π тоже будет ошибка.
1F Пустой оператор Обычным образом такую команду не ввести.
20 Fπ Число πпи Кроме того, что сдвигает стек, также копирует предыдущее X в X1, как арифметическая операция. Ещё одной особенностью является то, что это единственная не X2-влияющая команда, которая расширяет стек: сдвигает данные в глубь.
21 F Квадратный корень Аргументы проверяется безусловно на X⩾0, а не при X→X2.
22 Fx2 Возведение в квадрат Результат проверяется при X→X2, т. е. можно использовать для получения сверхчисел.
23 F1/x Обратная величина Ошибка деления на ноль возникает безусловно, остальное при X→X2.
24 Fxy Возведение в степень Ошибка, если X ⩽ 0. Не принимает отрицательный X, даже когда это математически допустимо.
Ошибка переполнения возникает безусловно, а не при X→X2.
Стек не сокращается, в отличие от обычных арифметических операций. Т. е. число в Y остаётся на месте, позволяя ещё раз возвести в ту же степень. Это не документировано.
25 F Прокрутка стека в обратном порядке
26 К°→′ Перевод угловых или временных величин из обычной формы в часть целой Если дробное значение ⩾0.6, то будет ошибка. Целая часть не меняется, даже если шестнадцатеричное число.
27 К Ошибка ЕГГ0Г .
28 К× Ошибка ЕГГ0Г .
29 К÷ Ошибка ЕГГ0Г .
2A К°→′" Перевод угловых или временных величин из обычной формы в часть целой, включая секунды Если дробное значение ⩾0.6, то будет ошибка. Целая часть не меняется, даже если шестнадцатеричное число.
2B…2E Ошибка ЕГГ0Г .
2F Пустой оператор Обычным образом такую команду не ввести.
30 К°←′" Перевод угловых или временных величин из части целого в обычную форму, включая секунды Если дробная часть ⩽ 2.|−07, то обратное преобразование уже не срабатывает. Если = 1.|−07 то уже и прямое преобразование не меняет значение. Если целая часть шестнадцатеричное число и нет дробной части или оно = 1.|−07 – оно нормализуется, как в операциях с шестнадцатеричными цифрами. Иначе остаётся без изменений.
31 К∣x∣ Модуль Удаляет знак. Делает знакоцифру = 1, что выглядит как пустое место и соответствует положительным числам.
32 КЗН Знак числа У отрицательного нуля знак положительный, т.е. для нуля знакоцифра игнорируется.
33 К°←′ Перевод угловых или временных величин из части целого в обычную форму Если дробная часть ⩽ 2.|−07, то обратное преобразование уже не срабатывает. Если = 1.|−07 то уже и прямое преобразование не меняет значение. Если целая часть шестнадцатеричное число и нет дробной части или оно = 1.|−07 – оно нормализуется, как в операциях с шестнадцатеричными цифрами. Иначе остаётся без изменений.
34 К[x] Целая часть Простое отбрасывание дробной части, а не математическое нахождение целой части, т. е. [−1.2] = −1, а не −2.
Если число целое и шестнадцатеричное – оно преобразуется, как в операциях с шестнадцатеричными цифрами. Если есть дробная часть, то целая шестнадцатеричная часть остаётся без изменений.
35 К{x} Дробная часть Простое отбрасывание целой части, а не математическое нахождение дробной части, т. е. {−1.2} = −0.2, а не 0.8.
Для целых чисел по модулю < 10.|+7, точнее числа, которым нужно меньше восьми знакомест, получается отрицательный ноль. В сравнениях идёт как отрицательное число и как ноль. Т. е. {−1234567} = −0, но {−12345678} = 0.
Шестнадцатеричные цифры в дробной части сохраняются.
36 Кmax Максимум Стек не сокращается, в отличие от обычных арифметических операций. Ноль исключение – самое большое число.
Обмена X и Y не происходит, т. е. либо X и Y после операции совпадают, когда в Y был максимум, либо остаются как есть, кроме копирования X в X1.
37 К Логическое умножение битов (AND). См. Конъюнкция, Побитовое «И» В логических операциях первая цифра заменяется на 8, а над остальными цифрами мантиссы проводится побитовая операция, как с шестнадцатеричными числами. Порядок и знак исходных чисел значения не имеют, они могут быть даже пустышкой. Результат всегда в форме 8.HHHHHHH
Стек для двухоперандных операций не сокращается, что позволяет выполнить операцию ещё раз. Вообще для всех синих двухоперандых операций стек остаётся на месте, что не документировано.
Перед выполнением операнды нормализуются!
38 К Логическое сложение битов (OR). См. Дизъюнкция, Побитовое ИЛИ
39 К Логическое XOR. См. Исключающее «или», Побитовое исключающее ИЛИ
3A КИНВ Логическая инверсия (NOT). См. Отрицание, Побитовое отрицание
3B КСЧ Случайное число Единица не бывает. Ноль бывает в редких случаях: когда в регистре Y шестнадцатеричное число, то последовательность может выдавать и ноль. Генератор не очень хороший, часто циклится от применения команд с К.
Сбросить на начало, как при включении, можно с помощью операции Кmax, когда регистр Y нулевой.
3C Ошибка ЕГГ0Г .
3D То же, что и команда К°→′" (код 2A)
3E Копирование Y в X, а X→X1 Те же действия, что и пара команд FВ↑, только не X2-влияющая.
3F Пустой оператор Обычным образом такую команду не ввести.
40…4E x→ПR Сохранение X в регистр R0…Re
4F Сохранение X в регистр R0 Обычным образом такую команду не ввести.
50 С/П Стоп/пуск Если во время выполнения программы нажать на С/П, то счётчик команд будет указывать на следующую команду, даже если логика выполнения это не преполагает. Например, при выполнении программы:
 # |  00 01 02 03 04 05 06 07 08 09
 00 |  КБП7 2
и нажатии С/П ПМК остановится на команде по адресу 01 и при следующем запуске уйдет из вечного цикла. Здесь подразумевается, что R7 = 0.
51 БП Безусловный переход
52 В/О Возврат обратно Стек обратных адресов подпрограмм из 5 ячеек, вначале нулевых. При возврате из подпрограммы берётся значение верхней ячейки стека + 1, для определения точки возврата, и стек сдвигается, поэтому сразу после включения ПМК команда В/О эквивалентна БП01. Но если стек адресов возврата заполнился до конца, то последний адрес стека начинает копироваться и В/О будет на этот адрес + 1. Для зануления стека, в этом случае, можно воспользоваться знаниями Еггогологии и вызвать нулевого 3Г0ГГа: CxВ↑÷ВПFx2Cx←→Cx. Или запустить ненадолго бесконечную программу из одного оператора, например KПП9, при условии, что R9 = 0.
53 ПП Вызов подпрограммы Переход на адрес подпрограммы, указанный следующей командой. Этот адрес запоминается в стеке обратных адресов. См. В/О.
54 КНОП Пустой оператор
55 К1 Пустой оператор
56 К2 Пустой оператор
57 Fx≠0 Если не ноль Пропуск адреса перехода, и выполнение следующей после него команды, если X не равен нулю.
58 FL2 Цикл по регистру R2
59 Fx≥0 Если больше или равен нулю Пропуск адреса перехода, и выполнение следующей после него команды, если X больше или равен нулю.
5A FL3 Цикл по регистру R3
5B FL1 Цикл по регистру R1
5C Fx<0 Если меньше нуля Пропуск адреса перехода, и выполнение следующей после него команды, если X меньше нуля.
5D FL0 Цикл по регистру R0
5E Fx=0 Если равен нулю Пропуск адреса перехода, и выполнение следующей после него команды, если X равен нулю.
5F Зависание Визуально воспринимается как зависание. ПМК не реагирует на ввод команд и ничего не отображает.
Обычным образом такую команду не ввести.
60…6E П→xR Извлечение из регистра R0…Re в X
6F Извлечение из регистра R0 в X Обычным образом такую команду не ввести.
70…7E Кx≠0R Косвенный условный переход при неравенстве нулю, адрес перехода в регистре R0…Re Пропуск адреса перехода, и выполнение следующей после него команды, если X не равен нулю. Регистр R модифицируется только при переходе на указанный в нём адрес.
7F Косвенный условный переход при неравенстве нулю, адрес перехода в регистре R0 Пропуск адреса перехода, и выполнение следующей после него команды, если X не равен нулю. Регистр R0 модифицируется только при переходе на указанный в нём адрес.
Обычным образом такую команду не ввести.
80…8E КБПR Косвенный безусловный переход на адрес перехода в регистре R0…Re
8F Косвенный безусловный переход на адрес перехода в регистре R0 Обычным образом такую команду не ввести.
90…9E Кx≥0R Косвенный условный переход, если больше или равен нулю, адрес перехода в регистре R0…Re Пропуск адреса перехода, и выполнение следующей после него команды, если X больше или равен нулю. Регистр R модифицируется только при переходе на указанный в нём адрес.
9F Косвенный условный переход, если больше или равен нулю, адрес перехода в регистре R0 Пропуск адреса перехода, и выполнение следующей после него команды, если X больше или равен нулю. Регистр R0 модифицируется только при переходе на указанный в нём адрес.
Обычным образом такую команду не ввести.
A0…AE КППR Косвенный вызов подпрограммы по адресу в регистре R0…Re
AF Косвенный вызов подпрограммы по адресу в регистре R0 Обычным образом такую команду не ввести.
B0…BE Кx→ПR Косвенное сохранение X в регистр, по номеру в регистре R0…Re
BF Косвенное сохранение X в регистр, по номеру в регистре R0 Обычным образом такую команду не ввести.
C0…CE Кx<0R Косвенный условный переход, если меньше нуля, адрес перехода в регистре R0…Re Пропуск адреса перехода, и выполнение следующей после него команды, если X меньше нуля. Регистр R модифицируется только при переходе на указанный в нём адрес.
CF Косвенный условный переход, если меньше нуля, адрес перехода в регистре R0 Пропуск адреса перехода, и выполнение следующей после него команды, если X меньше нуля. Регистр R0 модифицируется только при переходе на указанный в нём адрес.
Обычным образом такую команду не ввести.
D0…DE КП→xR Косвенное извлечение X из регистра, по номеру в регистре R0…Re
DF Косвенное извлечение X из регистра, по номеру в регистре R0 Обычным образом такую команду не ввести.
E0…EE Кx=0R Косвенный условный переход, если равен нулю, адрес перехода в регистре R0…Re Пропуск адреса перехода, и выполнение следующей после него команды, если X равен нулю. Регистр R модифицируется только при переходе на указанный в нём адрес.
EF Косвенный условный переход, если равен нулю, адрес перехода в регистре R0. Регистр R0 модифицируется только при переходе на указанный в нём адрес. Пропуск адреса перехода, и выполнение следующей после него команды, если X равен нулю. Регистр R0 модифицируется только при переходе на указанный в нём адрес.
Обычным образом такую команду не ввести.
F0…FF Пустой оператор Обычным образом такую команду не ввести.

Все команды, которые приводят к ошибке при проверке границ, неверном аргументе или просто помеченные, как приводящие к ошибке, успевают скопировать X → X1 перед исполнением и выдачей ошибки. Но если возникает переполнение, например слишком большое число, то копирование X → X1 будет в операции, вызвавшей переполнения, а не когда ошибка проявится из-за перевода X → X2. Понятно, это только в программном режиме. Пример, в программе

 # |  00 01 02 03 04 05 06 07 08 09
 00 |  Cx Fπ ÷ С/П

ошибка возникнет на шаге 02 из-за деления на ноль, и π попадёт в X1. А если так:

 # |  00 01 02 03 04 05 06 07 08 09
 00 |  КНОП 8 Fx2 F10x Fx2 КНОП /-/ ВП

то переполнение будет на шаге 04, именно там 10.|+64 попадёт в X1, а команда /-/ только проявит ошибку на экране.


Среднее время выполнения некоторых команд

Среднее время выполнения некоторых команд на реальном ПМК для ориентировки. Фактически может отличаться до 10% в зависимости от партии контроллеров, которые использовались при монтаже калькулятора.

Время в секундах Команды
0.20 +, , ×, ÷, Fx2, Fπ, F1/x, F10x при целом X, K[x], K{x}, K|x|, Kmax, K, K, KИНВ, K, команды со стеком.
0.22 F.
0.26 Ввод чисел в RX явно, или через извлечение из регистра, а также операции FBx и В↑.
0.31 Fxy если X и Y целые > 0.
0.40 KСч, FL0FL3.
1.20 F10x, Fex, FLg, FLn.
1.50 Тригонометрические функции.
2.00 Fxy.

Нужно ещё учитывать, что при выполнении время чтения команд с дальних адресов немного, на 1…4% медленнее, чем с начальных.


Команды с кодом F

Некоторые команды с цифрой F в коде можно получить тоже недокументированным образом.

Команды F0…FE получаются по адресам 30…44 после выполнения в режиме вычислений пары команд В/ОКППR, R = 0…e, которые переведут ПМК в режим ввода программы и вставят код с цифрой F. При этом в регистрах R0…R3 должно быть число заканчивающееся на 1 или 2. Точнее такое, чтобы после косвенной адресации заканчивалось на 1 или 2. Если там будет другое, например, ноль, как после включения ПМК, то для R1…R3 вставится F0…F2 по адресу 30…32, а для R0 это будет самый быстрый способ получить 3Г0ГГа, причём перехода в режим ввода программы не произойдёт, но, увы, этот 3Г0ГГ очистку стека возврата не делает.

Так же по адресам 50…59 можно вставить команды, начинающиеся с цифры F. При этом можно даже управлять, на какую цифру заканчивается и по какому адресу именно вставиться в пределах указанного диапазона. Для этого сначала сделаем ЕГГ0Г, как число, а не ошибку. Например, как 50F10xFx2. Можно его и сохранить, чтобы повторить шаги. После появления ЕГГ0Га, так или извлечения из регистра, набираем ВП{D1}{D2}.0, где {D1} и {D2} цифры. Так вот, в этот момент ПМК перейдёт в режим ввода программы и по адресу 5{D1}, и будет вставлена команда F{D2}. Т. е. при вводе ВП37.0, по адресу 53 будет вставлена команда F7.

Последовательность 5 команд FF через одну можно получить по любому адресу, если стек возврата забить числом, начинающимся с пустышки, и перед переходом в режим ПРГ нажимается БП Адрес. Тогда начиная с адреса Адрес−11 через одну будут проставлены команды FF.
Для начала получим адрес с начальной пустышкой, например число F8, и сохраним в регистр, например в R7. Не забыть при этом в конце убрать такое число с начальной пустышкой из RX!
888В↑77KK{x}ВП2x→П7Cx
Теперь по этому темному адресу вставим команду вызова подпрограммы по R7:
KБП7FПРГKПП7FАВТKБП7
Потом 5 раз, чтобы забить стек возврата, нажмём ПП
После этого уже выбираем, где нам нужны команды FF. Пусть мы хотим их с адреса 80. Тогда делаем переход на 80 + 11 = 91 БП91 и FПРГFАВТ
Теперь по адресам 80, 82, 84, 86, 88 добавилась команда FF. Если нужно побольше, например ещё и по адресам 81, 83, 85, 87, 89, то просто снова заполним стек возврата KБП7, 5 раз ПП, и после БП92 и FПРГFАВТ получим то, что хотели.
Не забудьте в конце почистить стек возврата как указано в примечание для команды В/О!