Ко всем страницам про Аскоту
К главной странице про механику (alple.net/arif-ru)
К главной странице моего сайта (alple.net)

Аскота 170: ассемблирование

Основные принципы кодирования программы описаны в книге Т.А.Поляковой и В.И.Тихомирова "Эксплуатация бухгалтерских машин Аскота класса 170" 1974 года издания на страницах 51-60. Ниже я приведу некоторые примечания, рассказывая о кодировании операций и расшифровке используемых в книге терминов.


Обозначения номеров стопсов.

Колонные стопсы:

Программа 1 - стопс 1, устанавливается торчащей частью наружу, в сторону "от программных стопсов" (обозначается как стопс 1 ).
Программа 2 - стопс 1, устанавливается торчащей частью внутрь (обозначается как стопс (1) ).
Программа 1 и 2 - стопс 2.
Между колонными стопсами должно быть не меньше 2 пустых колонок, перед колонным стопсом с операцией if (<>) может потребоваться 4 пустых колонки (см. ниже, в описании операции). Перед колонным стопсом первого шага программы по инструкции должно быть не меньше 2 пустых колонок - но, например, мой экземпляр машины стабильно работает, только если их 4-5. Послений колонный стопс не рекомендуется ставить дальше 157-158 колонки, то есть, после него должно остаться 1-2 пустых колонки. Ширина одной колонки соответствует ширине одной печатаемой цифры, то есть, например, для печати полного 12-разрядного числа надо предуспотреть слева (в сторону начала программы) от текущего шага 12 колонок, в которых не печатается ничего другого.

Программные стопсы.

Везде, где не указано обратное, программные стопсы ставятся отверстием в том ряду, что и соответствующий им колонный стопс.

Математика: таблица на странице 60.


Математические команды.

Накапливающие счётчики
Для операции с накапливающими счётчиками нужно указать команду операции над нужным барабаном, и отдельно номер используемого счётчика в барабане.
R+=; R-=;
Коды для разных счётчиков приведены на странице 60.
read R;
Коды для разных счётчиков приведены на странице 60, называется "промежуточный итог".
clr;
Всегда, кроме регистров K и kbd, кодируется стопсом 10/4. Для K имеется отдельная команда "read K; clr;", кодируемая 3/10. Клавиатура при чтении сбрасывается по умолчанию, в случае, если сбрасывать клавиатуру не нужно, следует установить стопс 10/3 (стр. 58). В таблице на странице 60 команда "read R; clr;" обозначена как "окончательный итог".
Отдельно нужно сказать про стопсы по умолчанию. Дело в том, что, без дополнительной настройки, машина после каждого шага печатает прочитанное число и останавливается. Иначе говоря, команды stop и prn(), на самом деле, являются отсутствием команд запрета остановки и печати. Поэтому, если в программе не сказано обратное, в каждый шаг нужно добавлять стопс автоматической работы 15/6 (скос шестёрки вправо, в конец программы), а в каждый шаг, в котором есть команда чтения регистра, добавлять стопс запрета печати 5/3. При чтении клавиатуры гашение (clr) происходит автоматически, при необходимости отменить сброс клавиатурного регистра следует установить 10/3.
Также по умолчанию надо поставить стопс 0/0 на два столбца правее первого шага программы (для корректной работы возврата каретки). [1] Всё остальное: Таблицы на страницах 58-59.



Кодирование команд.

Учтите, что вместо стопсов 3, указанных в таблице, иногда нужно обязательно использовать стопс 6, иначе при плотной установке программы угол стопса 3 срабатывает в соседнем шаге. В частности, для автоматического хода программы нужно использовать стопс 6 со срезанным углом в сторону конца программы, а для goto backward - со срезанным углом в сторону начала программы.

if (I,II<>0)
Здесь устанавливается сразу несколько стопсов: "Сортировка сальдо" 1/5 для I и 2/5 для II, "торможение" 1/4. Установка тоже необычна: стопсы 1/5 и 2/5 ставятся на 2 колонки левее колонного стопса (ближе к началу программы). Выбор знака (if >0 или if <0) осуществляется рычагом, торчащим под кареткой вертикально справа от щупов стопсов. При положении рычага "на оператора" работает if >0, при положении рычага "от оператора" - if <0.
Стопс 1/4 ставится в одну из предыдущих колонок, чтобы задержать каретку - это необходимо в случае, если между шагом, где происходит последнее изменение регистра, который тестируется в if, и командой if, проходит меньше 10 колонок, и механизм не успевает "осознать", что знак регистра изменился (например, если подряд идут шаги I+=K; if (I>0)). Обратите внимание, что стопс 1/4 и 1/5 ставятся в один и тот же первый ряд. Для того, чтобы они влезли при анализе if(I<>0) сразу после шага, изменяющего значение I, между этими шагами должно быть 4 колонки, а не 2, как между обычными шагами.
Пример: if(I>=0) по программе 1: стопс 1, стопс 1/5 на две колонки левее. Возможно понадобится установить также стопс 1/4 напротив предыдущего колонного стопса, но не меньше чем на 4 колонки левее (иначе 1/5 не влезет). Возможно, кстати, те же ограничения на ширину колонки после 1/4 относятся и к стопсу 2/5, это нужно проверять на вашей машине дополнительно.[1]

prn();
Не требует отдельного кода, печать происходит по умолчанию; а вот если печать не нужна, следует добавить стопс 5/3. Для того, чтобы при печати по prn() не добавлялась запятая и специальные знаки, следует установить 5/4 и 8/3.

stop;
Не требует отдельного кода, остановка происходит по умолчанию; а вот если остановка не нужна, следует добавить стопс 15/6, 6 скошена вправо (в сторону конца программы).

 if (!=0)  7/4 
 goto forward  16/3 
 goto backward1  33/4 
 goto backward2  33/6L 
 goto prog1  19/3 
 goto prog2  19/4 
 forward1  20/5  Ставится на один шаг левее, чем текущий шаг! [1]
 forward2  21/5  Ставится на один шаг левее, чем текущий шаг! [1]
 backward1  43/7 + 0/0  стопс 0/0 ставится на 2 столбца правее текущего шага. Стопс 7 ставится на пару столбцов левее текущего шага. [1]
 backward2  44/7 + 0/0  стопс 0/0 ставится на 2 столбца правее текущего шага. Стопс 7 ставится на пару столбцов левее текущего шага. [1]
 newline  17/3 

[1] Примечание по поводу останавливающих стопсов (в рядах 0, 1, 2, 20, 21, 43, 44)
Положение этих стопсов, описанное выше - не догма, а оптимальный с точки зрения плотности программы на доске вариант. На самом деле, стопсы можно ставить с бОльшими интервалами. И иногда это надо делать, потому что недостаточно хорошо смазанные машины не всегда справляются с максимально плотным вариантом.При этом, очевидно, надо следить за тем, чтобы машина не остановилась на предыдущем шагу.
Конкретнее:
Стопс 0/0 (начало программы или метка backward:) можно поставить на 2 столбца правее текущего шага, или куда угодно левее. Главное, чтобы он не оказался на 2 столбца правее предыдущего шага (или ещё левее).
Стопс 7 (метка backward) ставится левее соответствующего стопса 0/0. "Плотнейшая упаковка" предполагает, что на 4 столбца левее, но можно и больше - главное, опять же, не оказаться левее предыдущего стопса 0/0.
Стопсы 20/5 и 21/5 (метка forward) ставтится на два или более столбцов левее, чем текущий шаг. Главное, чтобы она не оказалась на два или более столбцов левее предыдущего шага.
Стопсы 1/5 и 2/5 (if): точно так же: два или более столбцов левее, чем текущий шаг. Главное, чтобы она не оказалась на два или более столбцов левее предыдущего шага.


Ко всем страницам про Аскоту
К главной странице про механику (alple.net/arif-ru)
К главной странице моего сайта (alple.net)


:

5

.