АСПИД работает
Nov. 30th, 2020 10:07 pmМагическая процедура, вызываемая в первой строке файла
https://github.com/besm6/besm6.github.io/blob/master/wiki/mkb-assembler-guide.txt
*CALL ASPID*D:MACROS
нашлась на образе диска ОС "Дубна". Она, в сущности, эквивалентна по смыслу юниксному пайпу
... | cat macros - | aspid
т.е. подсовывает в начало входного потока текст стандартных макросов, причем они хранятся в теле процедуры ASPID*D. С вызовом процедуры непосредственно с образа диска возникли проблемы, поэтому я просто скопировал текст макросов из дампа.
Так что
Выдают примерно следующее:
и т.д. Необходимое примечание: в эмуляторе Диспака пустые строки игнорируются, поэтому нужно делать или %s/^$/ / в vi, или аналогичное в другом редакторе.
Символы перехода на новую страницу я заменил на <HR> вручную.
Теперь осталось только выяснить, как включить в АСПИДе режим вывода в формате команд для фотонаборного автомата (где-то я читал или слышал, что такой режим был) и написать конвертер в HTML.
Всё то, что я сделал за сегодняшний вечер, теоретически можно было сделать 4 года назад, как только нам стали доступен пример файла для АСПИДа. Всё остальное уже давно было.
https://github.com/besm6/besm6.github.io/blob/master/wiki/mkb-assembler-guide.txt
*CALL ASPID*D:MACROS
нашлась на образе диска ОС "Дубна". Она, в сущности, эквивалентна по смыслу юниксному пайпу
... | cat macros - | aspid
т.е. подсовывает в начало входного потока текст стандартных макросов, причем они хранятся в теле процедуры ASPID*D. С вызовом процедуры непосредственно с образа диска возникли проблемы, поэтому я просто скопировал текст макросов из дампа.
Так что
ШИФР 419999 ЗС5^ ЛЕН 67(2048)^ EEB1A3 *name *perso:671470 *main aspid *no load list *execute %CK # #CHП _ #CCБ & #CПБ @ #ДCK58 #ДCЦ60 #HCЦ1 #PП #MAKPO Г #A0 #HOBCЦ #БC3 #CГ0 #A0 #ПБ #Ц #KOHMAK #MAKPO ГГ #KПБ #БC3 #A3 #KOHMAK #MAKPO HA #A0 #KПБ #БC1 #BC2 #CГ0 #A3 #KOHMAK #MAKPO ПEPH #A0 #KПБ #CГ6 #BC2 #БC1 #ЛA3 #KOHMAK #MAKPO ПEP #A0 #KПБ #CГ6 #BC2 #БC1 #A0 #KOHMAK #MAKPO ПAP #A0 #БC5 #CГ0 #BC10 #A6 #KOHMAK #MAKPO ПOД #A12 #TAБ36 - #БC3 #KOHMAK #MAKPO Б #ПБ #KOHMAK #MAKPO M #KПБ #KOHMAK (содержимое https://github.com/besm6/besm6.github.io/blob/master/wiki/mkb-assembler-guide.txt без строки *CALL ASPID*D) *end file `````` ЕКОНЕЦ
Выдают примерно следующее:
А.Л. ДАВЫДОВ
ЖЖЖ ЖЖЖ ЖЖЖ ЖЖЖЖ Ж Ж ЖЖЖЖЖ ЖЖЖ ЖЖЖЖ ЖЖЖЖ
Ж Ж Ж Ж Ж Ж Ж ЖЖ ЖЖ Ж Ж Ж Ж Ж Ж
Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж
Ж Ж Ж Ж ЖЖЖ Ж Ж Ж ЖЖЖЖ Ж Ж ЖЖЖ ЖЖЖЖ
ЖЖЖЖЖ Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж
Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж
Ж Ж ЖЖЖ ЖЖЖ ЖЖЖЖЖ Ж Ж ЖЖЖЖ Ж Ж ЖЖЖЖЖ Ж
Ж Ж Ж Ж ЖЖЖЖЖ ЖЖЖ ЖЖЖ ЖЖЖ Ж
ЖЖ ЖЖ Ж Ж Ж Ж Ж Ж Ж Ж ЖЖ
Ж Ж Ж ЖЖЖ ЖЖЖЖ ЖЖЖ ЖЖЖ ЖЖЖЖ Ж Ж Ж
Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж
Ж Ж Ж Ж ЖЖЖЖ ЖЖЖ ЖЖЖ ЖЖЖ ЖЖЖ
МОСКВА 1988
3
СОДЕРЖАНИЕ.
1. ВВЕДЕНИЕ . . . . . . . . . . . . . . 5
2. ЭЛЕМЕНТАРНЫЕ КОНСТРУКЦИИ . . . . . . . . 7
3. СИНТАКСИС ЯЗЫКА. КОМАНДЫ. ВХОДНОЙ ЯЗЫК . . . . 10
3.1 КОММЕНТАРНЫЕ СТРОКИ . . . . . . . . . 10
3.2 ОПЕРАТОРЫ . . . . . . . . . . . . 10
3.3 ПОЛЯ ОПЕРАТОРА - КОМАНДЫ . . . . . . . 11
3.4 ЛИТЕРАЛЫ . . . . . . . . . . . . 13
3.5 ЛОКАЛЬНЫЕ МЕТКИ . . . . . . . . . . 15
3.6 ВХОДНОЙ ЯЗЫК . . . . . . . . . . . 15
4. ПСЕВДОИНСТРУКЦИИ . . . . . . . . . . . 17
4.1 ЗАГОЛОВОК, ВХОДЫ И ВНЕШНИЕ ПОДПРОГРАММЫ . . 17
4.2 ОПИСАНИЯ СОММОN-БЛОКОВ . . . . . . . . 18
4.3 ФОРМИРОВАНИЕ ПЕРЕМЕННЫХ И КОНСТАНТ . . . . 19
4.4 ЭКВИВАЛЕНТНОСТИ . . . . . . . . . . 24
4.5 РЕЗЕРВИРОВАНИЕ ПАМЯТИ . . . . . . . . 25
4.6 ИНСТРУКЦИЯ ВLОСК . . . . . . . . . . 26
4.7 ИНСТРУКЦИИ САLL И ЕJМР . . . . . . . 27
5. ФОРМИРОВАНИЕ НАЧАЛЬНОГО СОСТОЯНИЯ СОММОN-БЛОКОВ 29
5.1 НЕПОСРЕДСТВЕННАЯ РАССЫЛКА ДАННЫХ . . . . 29
5.2 ПОДПРОГРАММА - ВLОСК DАТА . . . . . . 30
6. СТРУКТУРА ПОДПРОГРАММЫ . . . . . . . . . 32
6.1 СТРУКТУРА ТЕКСТА ПОДПРОГРАММЫ . . . . . 32
6.2 СТРУКТУРА ЗАГРУЖЕННОЙ ПОДПРОГРАММЫ . . . 33
7. РАСПРЕДЕЛЕНИЕ ПАМЯТИ В ПРОГРАММЕ . . . . . . 35
7.1 ОБЛАСТИ ПАМЯТИ . . . . . . . . . . 35
7.2 ПОРЯДОК РАСПОЛОЖЕНИЯ ПОДПРОГРАММ
И СОММОN-БЛОКОВ . . . . . . . . . . 36
8. ОБЩЕСИСТЕМНЫЕ СОГЛАШЕНИЯ . . . . . . . . 38
8.1 МЕЖПРОГРАММНЫЙ ИНТЕРФЕЙС . . . . . . . 38
8.2 ИСПОЛЬЗОВАНИЕ ИНДЕКСНЫХ РЕГИСТРОВ . . . . 39
8.3 ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ . . . . . . . 40
8.4 ИСПОЛЬЗОВАНИЕ МАГАЗИНА . . . . . . . 41
9. ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ . . . . . . . . 42
10. РЕАЛИЗАЦИЯ ТРАНСЛЯТОРА . . . . . . . . . 43
11. СПИСОК ЛИТЕРАТУРЫ . . . . . . . . . . . 44
5 6
1. ВВЕДЕНИЕ - СДЕЛАТЬ ПЕРЕХОД НА НОВЫЙ ЯЗЫК ПРОГРАММИРОВАНИЯ ДЛЯ
ЧЕЛОВЕКА, ЗНАЮЩЕГО МАDLЕN, КАК МОЖНО БОЛЕЕ ПРОСТЫМ,
Т.Е. СОБЛЮСТИ ТРАДИЦИИ, СЛОЖИВШИЕСЯ В МАDLЕN’Е;
- УСТРАНИТЬ, НАСКОЛЬКО ВОЗМОЖНО, НЕДОСТАТКИ, ПРИСУЩИЕ
АССЕМБЛЕР ПРЕДНАЗНАЧЕН ДЛЯ ЭВМ МКБ-8601, СОЗДАВАЕМОЙ В МАDLЕN’У.
ОИЯИ В РАМКАХ ПРОЕКТА RЕТRО-86. ТРАНСЛЯТОР НАПИСАН НА
АВТОКОДЕ МАDLЕN-3 [1,2,3] ЭВМ БЭСМ-6, ЧТО И ОПРЕДЕЛЯЕТ В СВЯЗИ С ЭТИМ В АССЕМБЛЕРЕ ИСПОЛЬЗОВАНО МАДЛЕНОВСКОЕ
ОБЛАСТЬ ЕГО ПРИМЕНЕНИЯ: ОН МОЖЕТ РАБОТАТЬ КАК НА БЭСМ-6, В РАСПОЛОЖЕНИЕ ПОЛЕЙ КОМАНДЫ В ОПЕРАТОРЕ (МЕТКА, МОДИФИКА-
КАЧЕСТВЕ КРОСС-АССЕМБЛЕРА [4], ТАК И НЕПОСРЕДСТВЕННО НА ТОР, КОД ОПЕРАЦИИ (КОП), АДРЕСНАЯ ЧАСТЬ, КОММЕНТАРИЙ) И,
НОВОЙ МАШИНЕ В РЕЖИМЕ ЭМУЛЯЦИИ БЭСМ-6. ГДЕ ЭТО ВОЗМОЖНО, СОХРАНЕНА МНЕМОНИКА КОМАНД И ПСЕВДОИН-
СТРУКЦИЙ.
ПРЕЖДЕ ЧЕМ ПРИСТУПИТЬ К ИЗЛОЖЕНИЮ ЯЗЫКА АССЕМБЛЕРА,
НЕОБХОДИМО СКАЗАТЬ НЕСКОЛЬКО СЛОВ О СТРУКТУРЕ ПРОГРАММЫ ВМЕСТЕ С ТЕМ ДЛЯ БОЛЬШЕЙ НАГЛЯДНОСТИ ВВЕДЕНО ЖЕСТКОЕ
ПОЛЬЗОВАТЕЛЯ С ТОЧКИ ЗРЕНИЯ МОНИТОРНОЙ СИСТЕМЫ НОВОЙ МАШИ- РАЗДЕЛЕНИЕ ПОДПРОГРАММЫ НА ГРУППЫ: ВХОДЫ, ВНЕШНИЕ ИМЕНА,
НЫ И О ПУТИ ПРЕОБРАЗОВАНИЯ ПРОГРАММЫ ОТ ТЕКСТОВОГО ПРЕД- ПЕРЕМЕННЫЕ, КОНСТАНТЫ, РАССЫЛКИ ДАННЫХ, КОМАНДЫ. ОПИСАНИЯ
СТАВЛЕНИЯ ДО ЗАГРУЖАЕМОГО В ПАМЯТЬ ЭВМ КОДА. ПЕРЕМЕННЫХ И КОНСТАНТ СЛЕДУЮТ ПО ТЕКСТУ ПОДПРОГРАММЫ ДО
КОМАНД, ХОТЯ И РАСПОЛАГАЮТСЯ В ПАМЯТИ (ПОСЛЕ ЗАГРУЗКИ)
ПРОГРАММА СОСТОИТ, ВООБЩЕ ГОВОРЯ, ИЗ НЕСКОЛЬКИХ НЕЗАВИ- ЛИБО ПОСЛЕ КОМАНД (КОНСТАНТЫ), ЛИБО В СПЕЦИАЛЬНОЙ ОБЛАСТИ
СИМО ТРАНСЛИРУЕМЫХ ПОДПРОГРАММ. РЕЗУЛЬТАТОМ РАБОТЫ ТРАН- ПАМЯТИ (ПЕРЕМЕННЫЕ). ВВЕДЕН МЕХАНИЗМ СТАТИЧЕСКОГО КОНТРОЛЯ
СЛЯТОРА ЯВЛЯЕТСЯ ОБ’ЕКТНЫЙ МОДУЛЬ ПОДПРОГРАММЫ. ПОДРОБНО СВЯЗЕЙ МЕЖДУ ПОДПРОГРАММАМИ, ПОЯВИЛОСЬ ПОНЯТИЕ НЕИНИЦИАЛИ-
СТРУКТУРА ОБ’ЕКТНОГО МОДУЛЯ ОПИСЫВАЕТСЯ В ПРИЛОЖЕНИИ А, ЗИРОВАННОЙ ПЕРЕМЕННОЙ.
ЗДЕСЬ-ЖЕ ОТМЕТИМ ЛИШЬ, ЧТО ОН СОДЕРЖИТ:
В АССЕМБЛЕРЕ ИСПОЛЬЗОВАНЫ ТРИ СИСТЕМЫ СЧИСЛЕНИЯ: ШЕС-
- МАШИННЫЙ КОД ПОДПРОГРАММЫ, АДРЕСА В КОТОРОМ НЕ СФОР- ТНАДЦАТИРИЧНАЯ, ДЕСЯТИЧНАЯ И ВОСЬМЕРИЧНАЯ, ПРИЧЕМ ВОСЬМЕ-
МИРОВАНЫ ОКОНЧАТЕЛЬНО; РИЧНАЯ ОСТАВЛЕНА КАК ВСПОМОГАТЕЛЬНАЯ.
- ИМЕНА ВНЕШНИХ ОБ’ЕКТОВ: ПОДПРОГРАММ, К КОТОРЫМ МОГУТ КОРЕННЫЕ ИЗМЕНЕНИЯ ПРЕТЕРПЕЛ ОБ’ЕКТНЫЙ МОДУЛЬ ПОДПРОГ-
БЫТЬ ОБРАЩЕНИЯ И ОБЩИХ С ДРУГИМИ ПОДПРОГРАММАМИ РАММЫ. ЕГО СТРУКТУРА ТАКОВА, ЧТО ЗАГРУЗКА ОСУЩЕСТВЛЯЕТСЯ
СОММОN-БЛОКОВ ПАМЯТИ, К КОТОРЫМ ВОЗМОЖЕН ДОСТУП ИЗ ЗА ОДИН ПРОХОД ПО ОБ’ЕКТНОМУ МОДУЛЮ, ПРИ ЭТОМ СРАЗУ
ДАННОЙ ПОДПРОГРАММЫ; ОСУЩЕСТВЛЯЕТСЯ НАСТРОЙКА АДРЕСОВ ПРОГРАММЫ.
- ИНФОРМАЦИЮ ДЛЯ ОКОНЧАТЕЛЬНОЙ НАСТРОЙКИ АДРЕСОВ В
МАШИННОМ КОДЕ ПОДПРОГРАММЫ.
ИЗГОТОВЛЕНИЕМ ИЗ ЭТИХ ОТДЕЛЬНЫХ ОБ’ЕКТНЫХ МОДУЛЕЙ ЕДИ-
НОЙ ПРОГРАММЫ И ЗАГРУЗКОЙ ЕЕ НЕПОСРЕДСТВЕННО В ПАМЯТЬ ЭВМ
ЗАНИМАЕТСЯ ЗАГРУЗЧИК, А САМ ЭТОТ ПРОЦЕСС БУДЕТ В ДАЛЬНЕЙ-
ШЕМ НАЗЫВАТЬСЯ ЗАГРУЗКОЙ. ПО ОКОНЧАНИИ СВОЕЙ РАБОТЫ ЗАГ-
РУЗЧИК, КАК ПРАВИЛО, ПЕРЕДАЕТ УПРАВЛЕНИЕ НА НАЧАЛО ТОЛЬКО
ЧТО ЗАГРУЖЕННОЙ ПРОГРАММЫ - НА НАЧАЛО ЕЕ ГОЛОВНОЙ ПОДПРОГ-
РАММЫ.
ИЗ ТАКОЙ СХЕМЫ СЛЕДУЕТ, В ЧАСТНОСТИ, ЧТО ОТДЕЛЬНЫЕ
ПОДПРОГРАММЫ В ПРОГРАММЕ МОГУТ БЫТЬ НАПИСАНЫ НА РАЗНЫХ
ЯЗЫКАХ ПРОГРАММИРОВАНИЯ, ПРИ УСЛОВИИ СОБЛЮДЕНИЯ СОГЛАШЕНИЙ
О СВЯЗЯХ МЕЖДУ ПОДПРОГРАММАМИ. СОБЛЮДЕНИЕ ЭТИХ СОГЛАШЕНИЙ
ВОЗЛОЖЕНО НА ТРАНСЛЯТОР, ЕСЛИ РЕЧЬ ИДЕТ О ЯЗЫКЕ ВЫСОКОГО
УРОВНЯ, ИЛИ НА ПРОГРАММИСТА, ЕСЛИ РЕЧЬ ИДЕТ ОБ АССЕМБЛЕРЕ.
ПЕРЕЙДЕМ ТЕПЕРЬ К САМОМУ ЯЗЫКУ АССЕМБЛЕРА.
В НЕКОТОРОМ СМЫСЛЕ ЕГО МОЖНО СЧИТАТЬ ДАЛЬНЕЙШИМ РАЗВИ-
ТИЕМ АВТОКОДА МАDLЕN-3, ЗАРЕКОМЕНДОВАВШЕГО СЕБЯ КАК УДОБ-
НЫЙ, НАГЛЯДНЫЙ И ЭФФЕКТИВНЫЙ АВТОКОД. ПРИ РАЗРАБОТКЕ НОВО-
ГО ЯЗЫКА СТАВИЛИСЬ СЛЕДУЮЩИЕ ЗАДАЧИ:
- СОЗДАТЬ АССЕМБЛЕР, ГАРМОНИЧНО УЧИТЫВАЮЩИЙ СПЕЦИФИКУ
НОВОЙ МАШИНЫ;
7 8
2. ЭЛЕМЕНТАРНЫЕ КОНСТРУКЦИИ
ПРИМЕРЫ:
А-В+1
-5
В АССЕМБЛЕРЕ ИСПОЛЬЗУЮТСЯ СЛЕДУЮЩИЕ ЭЛЕМЕНТАРНЫЕ КОН- 320*N>>10
СТРУКЦИИ:
<СТРОКА> - ПОСЛЕДОВАТЕЛЬНОСТЬ СИМВОЛОВ.
- <ЧИСЛО>
<СПИСОК> - ПОСЛЕДОВАТЕЛЬНОСТЬ <ЭЛЕМЕНТОВ СПИСКА>, ОТДЕ-
- <ЧИСЛО СО ЗНАКОМ> ЛЕННЫХ ДРУГ ОТ ДРУГА ЗАПЯТЫМИ. СТРУКТУРА <ЭЛЕМЕНТА
СПИСКА> ОГОВАРИВАЕТСЯ ОСОБО ВО ВСЕХ СЛУЧАЯХ ИСПОЛЬ-
- <ИМЯ> ЗОВАНИЯ КОНСТРУКЦИИ <СПИСОК>.
- <ТЕРМ>
- <ЗНАК ОПЕРАЦИИ> КАЖДОМУ <ИМЕНИ> СТАВИТСЯ В СООТВЕТСТВИЕ НЕКОТОРОЕ
<ЗНАЧЕНИЕ ИМЕНИ>. ВСЕ ЭТИ ЗНАЧЕНИЯ МОЖНО РАЗБИТЬ НА ТРИ
- <ВЫРАЖЕНИЕ> ТИПА:
- <СТРОКА> - АБСОЛЮТНЫЙ АДРЕС. ЕГО ЗНАЧЕНИЕ НЕ ЗАВИСИТ ОТ РАСПО-
ЛОЖЕНИЯ ПОДПРОГРАММЫ В ПАМЯТИ МАШИНЫ. АБСОЛЮТНЫЙ
- <СПИСОК> АДРЕС ЯВНО ОПРЕДЕЛЯЕТСЯ ПРИ ТРАНСЛЯЦИИ ПРОГРАММЫ.
- ОТНОСИТЕЛЬНЫЙ АДРЕС. ЕГО ЗНАЧЕНИЕМ ЯВЛЯЕТСЯ СМЕЩЕНИЕ
ОТ НАЧАЛА ОБЛАСТИ КОМАНД ИЛИ ОБЛАСТИ ПЕРЕМЕННЫХ
КОНСТРУКЦИЯ ПОДПРОГРАММЫ. ПОДРОБНО ОБ ЭТИХ ОБЛАСТЯХ ГОВОРИТСЯ В
ГЛАВЕ 7. ПОКА ОТМЕТИМ ЛИШЬ, ЧТО ВЕЛИЧИНА СМЕЩЕНИЯ И
<ЧИСЛО> ДЕЛИТСЯ НА ТРИ ТИПА: САМА ОБЛАСТЬ (КОНСТАНТЫ ИЛИ ПЕРЕМЕННЫЕ) ОПРЕДЕЛЯЮТСЯ
ПРИ ТРАНСЛЯЦИИ, А АДРЕС Н А Ч А Л А ОБЛАСТИ СТА-
<ДЕСЯТИЧНОЕ ЧИСЛО> - ПОСЛЕДОВАТЕЛЬНОСТЬ ДЕСЯТИЧНЫХ НОВИТСЯ ИЗВЕСТЕН ТОЛЬКО ПРИ ЗАГРУЗКЕ ПРОГРАММЫ В
ЦИФР. ПАМЯТЬ. ИНЫМИ СЛОВАМИ, ОТНОСИТЕЛЬНЫЙ АДРЕС - ЭТО
СУММА ДВУХ КОМПОНЕНТ: АДРЕСА НАЧАЛА ОБЛАСТИ (ОН
ПРИМЕРЫ: 28, 455, 4096 СТАНОВИТСЯ ИЗВЕСТЕН ПРИ ЗАГРУЗКЕ) И СМЕЩЕНИЯ, ВЕ-
ЛИЧИНА КОТОРОГО ИЗВЕСТНА УЖЕ ПРИ ТРАНСЛЯЦИИ. ИЗ
<ШЕСТНАДЦАТИРИЧНОЕ ЧИСЛО> - ПОСЛЕДОВАТЕЛЬНОСТЬ ШЕСТНАД- ЭТОГО СЛЕДУЕТ, В ЧАСТНОСТИ, ЧТО РАЗНОСТЬ ДВУХ ОТНО-
ЦАТИРИЧНЫХ ЦИФР, КОТОРАЯ ПРЕДВАРЯЕТСЯ СИМВОЛОМ "↑". СИТЕЛЬНЫХ АДРЕСОВ ИЗ ОДНОЙ ОБЛАСТИ ЕСТЬ АБСОЛЮТНЫЙ
АДРЕС.
ПРИМЕРЫ: ↑7F08, ↑15
- ВНЕШНИЙ АДРЕС. ЕГО ЗНАЧЕНИЕ НЕИЗВЕСТНО НА ЭТАПЕ
<ВОСЬМЕРИЧНОЕ ЧИСЛО> - ПОСЛЕДОВАТЕЛЬНОСТЬ ВОСЬМЕРИЧНЫХ ТРАНСЛЯЦИИ И ОПРЕДЕЛЯЕТСЯ ЛИШЬ ПРИ ЗАГРУЗКЕ.
ЦИФР, КОТОРАЯ ПРЕДВАРЯЕТСЯ СИМВОЛОМ "≠".
ПРИМЕРЫ: ≠77, ≠5252
ЗНАЧЕНИЕМ СПЕЦИАЛЬНОГО ИМЕНИ "*" ЯВЛЯЕТСЯ ОТНОСИТЕЛЬНЫЙ
<ЧИСЛО СО ЗНАКОМ> - ЧИСЛО, КОТОРОМУ ПРЕДШЕСТВУЕТ ЗНАК АДРЕС КОМАНДЫ, В КОТОРОЙ ЭТО ИМЯ ИСПОЛЬЗОВАНО.
"+" ИЛИ "-". ЗНАК "+" МОЖЕТ БЫТЬ ОПУЩЕН.
ВЫРАЖЕНИЕ ВЫЧИСЛЯЕТСЯ СТРОГО СЛЕВА НАПРАВО, ПРИОРИТЕТ
<ИМЯ> - ПОСЛЕДОВАТЕЛЬНОСТЬ ИЗ БУКВ И ЦИФР ДЛИНОЙ ОТ ВСЕХ ОПЕРАЦИЙ ОДИНАКОВ (!).
ОДНОГО ДО ВОСЬМИ СИМВОЛОВ, НАЧИНАЮЩАЯСЯ С БУКВЫ.
СИМВОЛ _ (ПОДЧЕРК) СЧИТАЕТСЯ БУКВОЙ. ИМЯ, СОСТОЯЩЕЕ ДОПУСТИМЫЕ ОПЕРАЦИИ:
ИЗ ОДНОГО ТОЛЬКО СИМВОЛА "*", ЯВЛЯЕТСЯ СПЕЦИАЛЬНЫМ
ИМЕНЕМ. ЕГО СМЫСЛ ОГОВАРИВАЕТСЯ НИЖЕ. + СЛОЖЕНИЕ
<ТЕРМ> - ЧИСЛО, ИМЯ ИЛИ СПЕЦИАЛЬНОЕ ИМЯ "*". - ВЫЧИТАНИЕ
<ЗНАК ОПЕРАЦИИ> - СИМВОЛЫ + - * / >> << ∧ * УМНОЖЕНИЕ
<ВЫРАЖЕНИЕ> - ПОСЛЕДОВАТЕЛЬНОСТЬ ТЕРМОВ, ОТДЕЛЕННЫХ / ДЕЛЕНИЕ
ДРУГ ОТ ДРУГА ЗНАКАМИ ОПЕРАЦИЙ.
9 10
>> ЛОГИЧЕСКИЙ СДВИГ ВПРАВО. ЗНАЧЕНИЕ СЛЕДУЮЩЕГО ОПЕРАН- 3. СИНТАКСИС ЯЗЫКА. КОМАНДЫ. ВХОДНОЙ ЯЗЫК.
ДА ОПРЕДЕЛЯЕТ ВЕЛИЧИНУ СДВИГА
<< ЛОГИЧЕСКИЙ СДВИГ ВЛЕВО. ЗНАЧЕНИЕ СЛЕДУЮЩЕГО ОПЕРАНДА
ОПРЕДЕЛЯЕТ ЕЛИЧИНУ СДВИГА.
∧ ПОРАЗРЯДНОЕ ЛОГИЧЕСКОЕ УМНОЖЕНИЕ.
3.1 КОММЕНТАРНЫЕ СТРОКИ.
КОММЕНТАРНАЯ СТРОКА НАЧИНАЕТСЯ СИМВОЛОМ ";", КОТОРОМУ
МОГУТ ПРЕДШЕСТВОВАТЬ ОДИН ИЛИ НЕСКОЛЬКО ПРОБЕЛОВ. КОММЕН-
ТАРНАЯ СТРОКА ПЕРЕНОСИТСЯ В ЛИСТИНГ ПРОГРАММЫ БЕЗ КА-
КИХ-ЛИБО ПРЕОБРАЗОВАНИЙ. СИМВОЛ "*", СЛЕДУЮЩИЙ НЕПОСРЕД-
СТВЕННО ЗА ";", ЯВЛЯЕТСЯ ПРИЗНАКОМ ГЛОБАЛЬНОГО КОММЕНТАРИЯ
- ТАКИЕ СТРОКИ ЗАПИСЫВАЮТСЯ В ОБ’ЕКТНЫЙ МОДУЛЬ ПОДПРОГРАМ-
МЫ, В ГРУППУ ’КОММЕНТАРИЙ’, ЕСЛИ ОНИ РАСПОЛОЖЕНЫ В ЗАГО-
ЛОВКЕ ПОДПРОГРАММЫ (ДО ПЕВОГО ОТЛИЧНОГО ОТ ЕNТRУ ОПЕРАТО-
РА).
ПРИМЕРЫ:
;
; ПОИСК МАКСИМУМА
;
;* FUNСТIОN ISУМ(N)
3.2 ОПЕРАТОРЫ.
ОПЕРАТОРЫ НАЧИНАЮТСЯ С СИМВОЛА, ОТЛИЧНОГО ОТ ";". ПЕРЕ-
ЧИСЛИМ ПОЛЯ ОПЕРАТОРА В ПОРЯДКЕ ИХ СЛЕДОВАНИЯ (СЛЕВА
НАПРАВО):
- ПОЛЕ МЕТКИ
- ПОЛЕ МОДИФИКАТОРА (ИНДЕКС-РЕГИСТРА)
- ПОЛЕ КОП
- ПОЛЕ АДРЕСА (АДРЕСНАЯ ЧАСТЬ)
- ПОЛЕ КОММЕНТАРИЯ
ПОЛЕ КОММЕНТАРИЯ В ОПЕРАТОРЕ НАЧИНАЕТСЯ СИМВОЛОМ ";".
ЭТО ЕДИНСТВЕННОЕ ПОЛЕ, НАЗНАЧЕНИЕ КОТОРОГО НЕ МЕНЯЕТСЯ В
11 12
ЗАВИСИМОСТИ ОТ ТИПА ИНСТРУКЦИИ. ЛЮБОЙ ОПЕРАТОР МОЖЕТ СО- МЕТКА КОМАНДЫ МОЖЕТ БЫТЬ ИСПОЛЬЗОВАНА В АДРЕСНОЙ ЧАСТИ
ДЕРЖАТЬ КОММЕНТАРИЙ, ПОЭТОМУ В ДАЛЬНЕЙШЕМ В ДАННОМ ОПИСА- ДРУГИХ КОМАНД ПОДПРОГРАММЫ - КАК ПРАВИЛО, В КАЧЕСТВЕ
НИИ ЯЗЫКА ЭТО ПОЛЕ ОПЕРАТОРА НЕ УПОМИНАЕТСЯ. АДРЕСА ПЕРЕДАЧИ УПРАВЛЕНИЯ.
В АССЕМБЛЕРЕ ДОПУСКАЕТСЯ ОПЕРАТОР С ПУСТЫМИ ПОЛЯМИ КОП,
МОДИФИКАТОРА И АДРЕСА И НЕПУСТЫМ ПОЛЕМ МЕТКИ. ТАКОЙ ОПЕРА-
ОПРЕДЕЛЯЮЩИМ ЯВЛЯЕТСЯ ПОЛЕ КОДА ОПЕРАЦИИ (КОП). ОНО ТОР ПОМЕЧАЕТ СЛЕДУЮЩУЮ ЗА НИМ КОМАНДУ ЛИБО ПЕРЕМЕННУЮ ИЛИ
СОДЕРЖИТ МНЕМОКОД ОПЕРАЦИИ (В ДАЛЬНЕЙШЕМ - МНЕМОКОД). ВСЕ КОНСТАНТУ, ТО ЕСТЬ В ЗНАЧИТЕЛЬНОЙ СТЕПЕНИ ЯВЛЯЕТСЯ АНАЛО-
МНЕМОКОДЫ МОЖНО РАЗДЕЛИТЬ НА ДВЕ БОЛЬШИЕ ГРУППЫ - КОМАНДЫ ГОМ ФОРТРАННОГО СОNТINUЕ.
И ПСЕДОИНСТРУКЦИИ. МНЕМОКОДЫ КОМАНД ПРИВЕДЕНЫ В ОПИСАНИИ
СИСТЕМЫ КОМАНД. ПСЕВДОИНСТРУКЦИИ ОПИСАНЫ В ГЛАВЕ 4.
НАЗНАЧЕНИЕ ПОЛЕЙ МЕТКИ, МОДИФИКАТОРА И АДРЕСА В ОПЕРА-
ТОРЕ ЗАВИСИТ ОТ МНЕМОКОДА. КАЖДАЯ ПСЕВДОИНСТРУКЦИЯ ПО-СВО-
ЕМУ ИСПОЛЬЗУЕТ ЭТИ ПОЛЯ, ПОЭТОМУ ИХ НАЗНАЧЕНИЕ ОПИСАНО В 3.3.2 ПОЛЕ МОДИФИКАТОРА.
ГЛАВЕ 4 ОТДЕЛЬНО ДЛЯ КАЖДОЙ ПСЕВДОИНСТРУКЦИИ.
УЖЕ ИЗ НАЗВАНИЯ ВИДНО, ЧТО ПОЛЕ МОДИФИКАТОРА СОДЕРЖИТ
НОМЕР МОДИФИКАТОРА (ИНДЕКС-РЕГИСТРА), ИСПОЛЬЗУЕМОГО В ДАН-
3.3 ПОЛЯ ОПЕРАТОРА - КОМАНДЫ. НОЙ КОМАНДЕ. ЭТОТ НОМЕР МОЖЕТ БЫТЬ ЗАДАН ЛИБО ЧИСЛОМ, ЛИБО
ИМЕНЕМ. ПРИ ЭТОМ ИМЕЮТСЯ СЛЕДУЮЩИЕ ОГРАНИЧЕНИЯ:
- ПОЛЕ МОДИФИКАТОРА В ОПЕРАТОРЕ ИМЕЕТ ДЛИНУ НЕ БОЛЕЕ
ДВУХ СИМВОЛОВ.
ЛЮБАЯ КОМАНДА МКБ-8601 СОСТОИТ ИЗ ТРЕХ ЧАСТЕЙ: МОДИФИ-
КАТОРА, КОДА ОПЕРАЦИИ И АДРЕСА. ЗАДАЧА АССЕМБЛЕРА ПРИ - ЧИСЛО ЛИБО ЗНАЧЕНИЕ ИМЕНИ В ПОЛЕ МОДИФИКАТОРА ДОЛЖНО
ГЕНЕРАЦИИ КОМАНДЫ - ПОЛУЧЕНИЕ ЗНАЧЕНИЙ МОДИФИКАТОРА, КОП И ЛЕЖАТЬ В ПРЕДЕЛАХ ОТ 0 ДО 15.
АДРЕСА И ЗАПИСЬ ИХ В ОЧЕРЕДНУЮ ПОЛОВИНУ ОЧЕРЕДНОГО КОМАН-
ДНОГО СЛОВА ОБ’ЕКТНОГО МОДУЛЯ ТРАНСЛИРУЕМОЙ ПОДПРОГРАММЫ. ДРУГИМИ СЛОВАМИ, ЕСЛИ В ПОЛЕ МОДИФИКАТОРА УКАЗАНО ЧИС-
ЛО, ТО ОНО МОЖЕТ БЫТЬ ЛИБО ДЕСЯТИЧНЫМ ОТ 0 ДО 15, ЛИБО
ШЕСТНАДЦАТИРИЧНЫМ ОТ ↑0 ДО ↑F, ЛИБО ВОСЬМИРИЧНЫМ ОТ ≠0 ДО
≠7. ЕСЛИ-ЖЕ В ПОЛЕ МОДИФИКАТОРА УКАЗАНО ИМЯ, ТО САМО ОНО
ДОЛЖНО БЫТЬ ОДНО- ИЛИ ДВУХ-СИМВОЛЬНЫМ, А ЕГО ЗНАЧЕНИЕМ
ДОЛЖЕН БЫТЬ АБСОЛЮТНЫЙ АДРЕС В ДИАПАЗОНЕ ОТ 0 ДО 15.
3.3.1 ПОЛЕ МЕТКИ.
ПУСТОЕ ПОЛЕ МОДИФИКАТОРА ЭКВИВАЛЕНТНО ЗАДАНИЮ НУЛЕВОГО
ЛЮБАЯ КОМАНДА ПОДПРОГРАММЫ МОЖЕТ БЫТЬ ПОМЕЧЕНА. ЭТО ИНДЕКС-РЕГИСТРА.
ОЗНАЧАЕТ, ВО-ПЕРВЫХ, ЧТО ТРАНСЛЯТОР ПОМЕЩАЕТ ЕЕ В ЛЕВУЮ
ПОЛОВИНУ КОМАНДНОГО СЛОВА И СНАБЖАЕТ ЭТО СЛОВО ПРИЗНАКОМ
РАЗРЕШЕНИЯ ПЕРЕДАЧИ УПРАВЛЕНИЯ НА НЕГО (В ТЕГЕ), И ВО-ВТО-
РЫХ - ЧТО АДРЕСУ ДАННОЙ КОМАНДЫ СТАВИТСЯ В СООТВЕТСТВИЕ
НЕКОТОРОЕ ИМЯ ДЛЯ ССЫЛКИ НА НЕЕ.
3.3.3 ПОЛЕ АДРЕСА.
ПОЛЕ МЕТКИ МОЖЕТ БЫТЬ ПУСТЫМ - ЭТО ОЗНАЧАЕТ, ЧТО НА
ДАННУЮ КОМАНДУ УПРАВЛЕНИЕ МОЖЕТ БЫТЬ ПЕРЕДАНО ТОЛЬКО
"СВЕРХУ", ОТ ПРЕДЫДУЩЕЙ КОМАНДЫ. ЕСЛИ ПОЛЕ МЕТКИ НЕ ПУСТО,
ТО ОНО ОБЯЗАТЕЛЬНО СОДЕРЖИТ ПРИЗНАК ПОМЕЧЕННОСТИ КОМАНДЫ -
СИМВОЛ ":". ПОЛЕ АДРЕСА ИЛИ АДРЕСНАЯ ЧАСТЬ ОПЕРАТОРА СОДЕРЖИТ ОДНУ
ИЗ УКАЗАННЫХ НИЖЕ КОНСТРУКЦИЙ, ЗНАЧЕНИЕ КОТОРОЙ ЗАПИСЫВА-
ПЕРЕД ДВОЕТОЧИЕМ В ПОЛЕ МЕТКИ МОЖЕТ БЫТЬ УКАЗАНО ИМЯ, ЕТСЯ В ПОЛЕ АДРЕСА ГЕНЕРИРУЕМОЙ КОМАНДЫ. ЭТО ЗНАЧЕНИЕ МЫ
НАЗЫВАЕМОЕ В ДАЛЬНЕЙШЕМ <МЕТКОЙ КОМАНДЫ> ИЛИ ПРОСТО БУДЕМ НАЗЫВАЕТЬ ЗНАЧЕНИЕМ АДРЕСНОЙ ЧАСТИ. КОНСТРУКЦИИ,
<МЕТКОЙ>. ЗНАЧЕНИЕМ МЕТКИ ЯВЛЯЕТСЯ ОТНОСИТЕЛЬНЫЙ АДРЕС РАЗРЕШЕННЫЕ В ПОЛЕ АДРЕСА КОМАНДЫ, ТАКОВЫ:
ПОМЕЧЕННОЙ ЕЮ КОМАНДЫ. АССЕМБЛЕР ВСЕГДА ПОМЕЩАЕТ ПОМЕЧЕН-
НУЮ КОМАНДУ В ЛЕВУЮ ПОЛОВИНУ ОЧЕРЕДНОГО КОМАНДНОГО СЛОВА. - ПУСТО. У ГЕНЕРИРУЕМОЙ КОМАНДЫ ФОРМИРУЕТСЯ НУЛЕВОЙ
ЕСЛИ ПРИ ЭТОМ ОКАЗЫВАЕТСЯ, ЧТО ПРАВАЯ КОМАНДА ПРЕДЫДУЩЕГО АДРЕС;
СЛОВА НЕ СФОРМИРОВАНА - ТУДА ЗАПИСЫВАЕТСЯ КОМАНДА UТС С
НУЛЕВЫМИ ЗНАЧЕНИЯМИ АДРЕСА И МОДИФИКАТОРА. - ЧИСЛО СО ЗНАКОМ. ДОПУСТИМЫЙ ДИАПАЗОН - ОТ -2**19 ДО
+2**19-1 (ОТ -524288 ДО +524287);
и т.д. Необходимое примечание: в эмуляторе Диспака пустые строки игнорируются, поэтому нужно делать или %s/^$/ / в vi, или аналогичное в другом редакторе.
Символы перехода на новую страницу я заменил на <HR> вручную.
Теперь осталось только выяснить, как включить в АСПИДе режим вывода в формате команд для фотонаборного автомата (где-то я читал или слышал, что такой режим был) и написать конвертер в HTML.
Всё то, что я сделал за сегодняшний вечер, теоретически можно было сделать 4 года назад, как только нам стали доступен пример файла для АСПИДа. Всё остальное уже давно было.
no subject
Date: 2020-12-01 07:30 am (UTC)https://library.keldysh.ru/preprint.asp?id=1977-19
https://library.keldysh.ru/preprint.asp?id=1977-137
https://library.keldysh.ru/preprint.asp?id=1986-134
no subject
Date: 2020-12-01 09:19 am (UTC)no subject
Date: 2020-12-01 09:06 pm (UTC)no subject
Date: 2020-12-01 11:32 pm (UTC)PROGRAMMA dimension m(144) call bigtit(6h это , 6hочень , 6hпросто, m, 6h######) endпечатает
≠≠≠≠ ≠≠≠≠≠ ≠≠≠ ≠≠≠ ≠ ≠ ≠≠≠≠ ≠ ≠ ≠ ≠≠≠≠≠ ≠≠≠≠ ≠≠≠ ≠≠≠≠ ≠≠≠≠≠ ≠≠≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠≠≠≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠≠≠ ≠≠≠≠≠ ≠≠≠≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠≠≠≠≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠≠≠≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠≠≠≠ ≠ ≠≠≠ ≠≠≠ ≠ ≠≠≠≠≠ ≠ ≠ ≠≠≠≠ ≠ ≠ ≠ ≠≠≠ ≠≠≠≠ ≠ ≠≠≠Получив это в перехваченной выдаче на АЦПУ, можно вставить в другой файл. В задании АСПИДу заглавие вставлено явно.
no subject
Date: 2020-12-02 07:17 am (UTC)no subject
Date: 2020-12-02 08:18 am (UTC)Строковые константы можно писать в нормальном стиле, в кавычках:
02.12.20 M1 M O H И T O P-8 0 (3.6) 26.11.83M ( MC " Д Y Б H A " ИAЭ ) ШИФP 419999000000 ЖЖЖЖЖ ЖЖЖ ЖЖЖЖЖ Ж ЖЖЖЖ Ж Ж Ж Ж Ж Ж Ж Ж Ж ЖЖЖ Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж ЖЖЖ Ж ЖЖЖЖЖ ЖЖЖЖЖ *NAME TITLE *NO LOAD LIST 02.12.20 M1 Ф O P T P A H /16.07.73/ PROGRAMMA DIMENSION M(144) CALL BIGTIT(’ ЭTO ’, ’OЧEHЬ ’, ’ПPOCTO’, M, ’ЮЮЮЮЮЮ’) END BЫЗЫBAEMЫE ФYHKЦИИ И ПOДПPOГPAMMЫ BIGTIT TAБЛИЦA OTHOCИTEЛЬHЫX AДPECOB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 000 :00001 *EXECUTE ЮЮЮЮ ЮЮЮЮЮ ЮЮЮ ЮЮЮ Ю Ю ЮЮЮЮ Ю Ю Ю ЮЮЮЮЮ ЮЮЮЮ ЮЮЮ ЮЮЮЮ ЮЮЮЮЮ ЮЮЮ Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю ЮЮЮЮ Ю Ю Ю Ю Ю Ю Ю ЮЮЮ ЮЮЮЮЮ ЮЮЮЮ Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю ЮЮЮЮЮ Ю Ю Ю Ю Ю Ю Ю ЮЮЮЮ Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю Ю ЮЮЮЮ Ю ЮЮЮ ЮЮЮ Ю ЮЮЮЮЮ Ю Ю ЮЮЮЮ Ю Ю Ю ЮЮЮ ЮЮЮЮ Ю ЮЮЮ КОНЕЦ ЗАДАЧИno subject
Date: 2020-12-09 01:05 pm (UTC)Ввожу
ШИФР 419999 ЗС5^
ОЗУ 32^ТРА 100^АЦП 64^
EEВ1А3
*NAME Title
*NO LOAD LIST
*Fortran
*PROGRAMMA
*DIMENSION M(144)
*CALL BIGTIT(6h это , 6hочень , 6hпросто, m, 6h######)
*Execute
*END FILE
ЕКОНЕЦ
Получаю:
*NАМЕ ТIТLЕ
*NО LОАD LISТ
*FОRТRАN
*РRОGRАММА
ILLЕGАL SУSТЕМ САRD
*DIМЕNSIОN М(144)
ILLЕGАL SУSТЕМ САRD
*САLL ВIGТIТ(6Н ЭТО , 6НОЧЕНЬ , 6НПРОСТО, М, 6Н≠≠≠≠≠≠)
ОСТАНОВ ПО СЧИТ. +000000000000e+00 0000000000000000
no subject
Date: 2020-12-09 06:07 pm (UTC)PROGRAMMA dimension m(144) call bigtit(6h это , 6hочень , 6hпросто, m, 6h######) endбудут не звёздочки, а шесть пробелов, как и положено для программ на Фортране.
no subject
Date: 2020-12-14 10:17 am (UTC)Что делать, если текст заголовка не помещается в одну строку (80 символов)?
Так, например,
14.12.20 М3
Ф О Р Т Р А Н
/16.07.73/
РRОGRАММА
DIМЕNSIОN М(144)
САLL ВIGТIТ (6Н ФОТО , 6НОТЧЕТ , 6НПОЕЗДКИ, М, 6Н≠≠≠≠≠≠)
22203
НЕПРАВИЛЬНО РАССТАВЛЕНЫ ЛИБО ИСПОЛЬЗОВАНЫ ЗНАКИ ОПЕРАЦ.
ЕND
*ЕХЕСUТЕ
БЫЛИ ОШИБКИ ПРИ ТРАНСЛЯЦИИ ИЛИ В НАБИВКЕ
Не понимаю в чём ошибка?
no subject
Date: 2020-12-14 03:24 pm (UTC)САLL ВIGТIТ (6Н ФОТО , 6НОТЧЕТ , 6НПОЕЗДКИ, М, 6Н≠≠≠≠≠≠) 123456 123456 1234567В каждом из первых трех аргументов процедуры должно быть по 6 символов, а у вас это требование нарушено.
no subject
Date: 2020-12-14 03:50 pm (UTC)Например:
PROGRAMMA
dimension m(144)
call bigtit (10h фотоотчет , m, 10h##########)
end
Слово съезжает вправо и не выводится полностью.
no subject
Date: 2020-12-14 07:54 pm (UTC)Последний аргумент (6 символов) - маска, какими символами печатать буквы.
no subject
Date: 2020-12-14 07:57 pm (UTC)no subject
Date: 2020-12-14 08:51 pm (UTC)САLL ВIGТIТ (6НТРАНСН, 6НАЦИОНА, 6НЛЬНЫМИ, М, 6Н≠≠≠≠≠≠)
no subject
Date: 2020-12-09 02:23 pm (UTC)no subject
Date: 2020-12-09 06:10 pm (UTC)