spamsink: (Default)
[personal profile] spamsink posting in [community profile] besm6
Магическая процедура, вызываемая в первой строке файла
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 года назад, как только нам стали доступен пример файла для АСПИДа. Всё остальное уже давно было.

Date: 2020-12-01 07:30 am (UTC)
vak: (Default)
From: [personal profile] vak
Эх, добыть бы ИПМ-овскую методичку по АСПИДу. Там хорошее было описание, помнится.

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
Edited Date: 2020-12-01 07:36 am (UTC)

Date: 2020-12-01 09:06 pm (UTC)
From: [personal profile] azizz8618
А почему в оригинале название в тексте?. Разве его нужно не через *ٔNAME ? Они, что его вручную набирали что ли?

Date: 2020-12-02 07:17 am (UTC)
From: [personal profile] azizz8618
Вызывается паспортом Дубны?

Date: 2020-12-09 01:05 pm (UTC)
From: [personal profile] azizz8618
Что-то не выходит.
Ввожу
ШИФР 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
Edited Date: 2020-12-09 01:06 pm (UTC)

Date: 2020-12-14 10:17 am (UTC)
From: [personal profile] azizz8618
Программа работает, но логика её работы не совсем понятна. Она может печатать в две строки?
Что делать, если текст заголовка не помещается в одну строку (80 символов)?
Так, например,

14.12.20 М3
Ф О Р Т Р А Н
/16.07.73/
РRОGRАММА
DIМЕNSIОN М(144)
САLL ВIGТIТ (6Н ФОТО , 6НОТЧЕТ , 6НПОЕЗДКИ, М, 6Н≠≠≠≠≠≠)
22203
НЕПРАВИЛЬНО РАССТАВЛЕНЫ ЛИБО ИСПОЛЬЗОВАНЫ ЗНАКИ ОПЕРАЦ.
ЕND
*ЕХЕСUТЕ
БЫЛИ ОШИБКИ ПРИ ТРАНСЛЯЦИИ ИЛИ В НАБИВКЕ

Не понимаю в чём ошибка?

Date: 2020-12-14 03:50 pm (UTC)
From: [personal profile] azizz8618
Значит надо увеличивать везде? Печатает только в одну строчку я так понимаю. И почему-то возникают проблемы с длинными словами.
Например:
PROGRAMMA
dimension m(144)
call bigtit (10h фотоотчет , m, 10h##########)
end
Слово съезжает вправо и не выводится полностью.
Edited Date: 2020-12-14 07:18 pm (UTC)

Date: 2020-12-14 07:57 pm (UTC)
From: [personal profile] azizz8618
Как тогда напечатать одно длинное слово?

Date: 2020-12-09 02:23 pm (UTC)
From: [personal profile] azizz8618
M O H И T O P-8 0 (3.6) 26.11.83M ( MC " Д Y Б H A " ИAЭ ) ШИФP 419999000000 - и версия Монитора у меня другая - 3.7

Profile

Сообщество любителей БЭСМ-6

December 2025

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
282930 31   

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 13th, 2026 03:23 am
Powered by Dreamwidth Studios