БЭСМ6 соглашение вызова процедур (calling convention)

211 views
Skip to first unread message

Alex Loktionoff

unread,
Feb 13, 2023, 2:57:25 PM2/13/23
to БЭСМ-6
Была ли совместимость между языками на уровне процедур?
 - FORTRAN, Pascal, Algol

Можно здесь добавить ссылку на документацию?
Или описать какие регистры должен был сохранять ведущая, какие ведомая.
В каком порядке передавались параметры на стеке и т.п.

Василий Долматов

unread,
Feb 13, 2023, 3:45:07 PM2/13/23
to be...@googlegroups.com


13 февр. 2023 г., в 22:57, Alex Loktionoff <oxy...@gmail.com> написал(а):

Была ли совместимость между языками на уровне процедур?
те, которые были, например, внутри «МОниторной системы «ДУБНА» - были совместимы по вызовам 

там было общее соглашение по вызовам. 

 - FORTRAN, Pascal, Algol

эти все три были… 

с другими системами - там вообще не было таких задач, потому как они все были моноязыковыми… 
что БЕМШ, что Алгол-БЭСМ… 


Можно здесь добавить ссылку на документацию?
Найдите книжку «Г.Л.Мазный «ПРограммирование на БЭСМ-6 в Мониторной системе «Дубна»
там все очень подробно и хорошо расписано. 

Или описать какие регистры должен был сохранять ведущая, какие ведомая.
это сильно зависело от языка… 

как правило, считалось, про подпрограмма _не_имеет_ права трогать никакие регистры не сохранив их предварительно.
а 15-й  (17(8)) - так вообще табу, потому как это указатель стека. 


В каком порядке передавались параметры на стеке и т.п.

не помню точно, но, вроде в прямом порядке… 
см. книжку выше, там точно указано. 

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---

ds[jd ghjlt

Sergey Ryzhkov

unread,
Feb 13, 2023, 4:11:45 PM2/13/23
to be...@googlegroups.com


пн, 13 февр. 2023 г., 20:45 Василий Долматов <vdol...@gmail.com>:


13 февр. 2023 г., в 22:57, Alex Loktionoff <oxy...@gmail.com> написал(а):

Была ли совместимость между языками на уровне процедур?
те, которые были, например, внутри «МОниторной системы «ДУБНА» - были совместимы по вызовам 

там было общее соглашение по вызовам. 

 - FORTRAN, Pascal, Algol

эти все три были… 

Это не совсем так, скорее вообще не так. Как то были совместимы Фортраны в МС Дубна между собой и они же как тот, наверное, с Паскаль-Монитором, но библиотеки они все равно тащили разные, а Паскаль-Монитор лично я получил уже тогда когда это было не очень актуально уже и как там надо было передавать параметры не знаю. Алгол (точнее все его варианты) и Паскаль автокод, на котором написано все осмысленное паскалевское, включая Джина были все вещью в себе. В МС Дубна Алгола вроде не было совсем.

А так да, некие соглашения о связях в Дубне были, типа сохранения первых 7 регистров, параметры (точнее их алреса>) в стеке и там же адрес возврата.

с другими системами - там вообще не было таких задач, потому как они все были моноязыковыми… 
что БЕМШ, что Алгол-БЭСМ… 


Можно здесь добавить ссылку на документацию?
Найдите книжку «Г.Л.Мазный «ПРограммирование на БЭСМ-6 в Мониторной системе «Дубна»
там все очень подробно и хорошо расписано. 

Или описать какие регистры должен был сохранять ведущая, какие ведомая.
это сильно зависело от языка… 

как правило, считалось, про подпрограмма _не_имеет_ права трогать никакие регистры не сохранив их предварительно.
а 15-й  (17(8)) - так вообще табу, потому как это указатель стека. 


В каком порядке передавались параметры на стеке и т.п.

не помню точно, но, вроде в прямом порядке… 
см. книжку выше, там точно указано. 

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---

ds[jd ghjlt

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/81EDF1A7-8ABF-422A-A217-963B135AE2C5%40gmail.com.

Sergey Ryzhkov

unread,
Feb 13, 2023, 4:19:05 PM2/13/23
to be...@googlegroups.com
Ну строго говоря, я не помню точно про регистры, может строго наоборот. Но точно что то сохранялось, что то нет, и первые 7 и остальные, к ним было разное отношение.

пн, 13 февр. 2023 г., 21:11 Sergey Ryzhkov <sir...@gmail.com>:

Sergey Ryzhkov

unread,
Feb 13, 2023, 4:22:18 PM2/13/23
to be...@googlegroups.com
Это все про МС Дубна, естественно, там была куча библиотек, больше математических, гарантировался их правильный вызов из любого Фотртрана. Но базовым был Фортран Дубна,  хоть он и был самым примитивным. Вроде в какой то момент была попытка сделать оптисюмищирующий компилятор именно Дубенского Фортрана, но чем оно кончилось - не помню.

пн, 13 февр. 2023 г., 21:18 Sergey Ryzhkov <sir...@gmail.com>:

Василий Долматов

unread,
Feb 13, 2023, 4:22:49 PM2/13/23
to 'Кирилл Кобелев' via БЭСМ-6


14 февр. 2023 г., в 00:11, Sergey Ryzhkov <sir...@gmail.com> написал(а):



пн, 13 февр. 2023 г., 20:45 Василий Долматов <vdol...@gmail.com>:


13 февр. 2023 г., в 22:57, Alex Loktionoff <oxy...@gmail.com> написал(а):

Была ли совместимость между языками на уровне процедур?
те, которые были, например, внутри «МОниторной системы «ДУБНА» - были совместимы по вызовам 

там было общее соглашение по вызовам. 

 - FORTRAN, Pascal, Algol

эти все три были… 

Это не совсем так, скорее вообще не так. Как то были совместимы Фортраны в МС Дубна между собой и они же как тот, наверное, с Паскаль-Монитором, но библиотеки они все равно тащили разные, а Паскаль-Монитор лично я получил уже тогда когда это было не очень актуально уже и как там надо было передавать параметры не знаю. Алгол (точнее все его варианты) и Паскаль автокод, на котором написано все осмысленное паскалевское, включая Джина были все вещью в себе. В МС Дубна Алгола вроде не было совсем.
А на чем же я там тогда 10 лет программировал-то? :) 
Намекаю - «Алгол-ГДР» :) 

А вот «Курочкинский» «АЛГОЛ-БЭСМ-6» - действительно был вещью в себе…

но и к нему можно было подключать процедуры на АвЧае, соблюдая алгольные соглашения о вызовах. 
вот этих точно не помню, я  в них только краем глаза заглядывал, неиинтересен нам был этот вариант Алгола. 


Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/CALUV2czbWh01_gfegdUV5t8j3o-6nNiL5htiwwT7RpKag2gjkQ%40mail.gmail.com.

Василий Долматов

unread,
Feb 13, 2023, 4:26:42 PM2/13/23
to 'Кирилл Кобелев' via БЭСМ-6


14 февр. 2023 г., в 00:22, Sergey Ryzhkov <sir...@gmail.com> написал(а):

Это все про МС Дубна, естественно, там была куча библиотек, больше математических, гарантировался их правильный вызов из любого Фотртрана. Но базовым был Фортран Дубна,  хоть он и был самым примитивным. Вроде в какой то момент была попытка сделать оптисюмищирующий компилятор именно Дубенского Фортрана, но чем оно кончилось - не помню.
Ну, к закату Б-6 в МС-Дубна было _три_ Фортрана… 

«Фортран-Дубна», «Фортран-ГДР» и «Форекс». 

и дело не в «примитивности» его с языковой точки зрения, хотя новые фортраны были уже F77 (а форекс даже F80 пытался прикидываться).  
у них разница в скорости выполнения скомпилированных программ была в _разы_.


Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/CALUV2cwAsMx46kPqrfjgHDfP2vzescbbmTM%2BCzBCrdEfOJGH-A%40mail.gmail.com.

Sergey Ryzhkov

unread,
Feb 13, 2023, 4:27:33 PM2/13/23
to be...@googlegroups.com
Иш какая шустрая эта немчура. Но все равно, как то оно все было еще более нищево даже по сравнению с Паскаль Монитором. До меня Алгол ГДР не дошел вообще, но мы и не искали, время прошло. :(

пн, 13 февр. 2023 г., 21:22 Василий Долматов <vdol...@gmail.com>:
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/B8AD0F9E-CF9D-4536-BCE1-72548AE8F8D0%40gmail.com.

Василий Долматов

unread,
Feb 13, 2023, 4:31:21 PM2/13/23
to be...@googlegroups.com


14 февр. 2023 г., в 00:27, Sergey Ryzhkov <sir...@gmail.com> написал(а):

Иш какая шустрая эта немчура. Но все равно, как то оно все было еще более нищево даже по сравнению с Паскаль Монитором. До меня Алгол ГДР не дошел вообще, но мы и не искали, время прошло. :(
а у нас был основной рабочий язык… 
и как только он появился, мы на него сбежали с Алгола-БЭСМ-6, потому как разница в скорости - от 3 до 10(!) раз на разных программах. 
я еще застал процесс «перебивки» наших программ на другой синтаксис… :)

а если уж начинаешь обзываться, так «Паскаль-Автокод» - на порядок более нишевый язык… :) нигде ни для чего полезного не использовался. :) 

Джин не в счет, конечно… Но это не достоинство языка ни разу, а свойство ВВ… Он на любом языке написал бы прекрасную вещь… :)

dol@


Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/CALUV2cwH15keEH%2BK%3DHT_7nvEvNAb6fiHE3Vo8i%3DhyLj9vDX1yg%40mail.gmail.com.

Sergey Ryzhkov

unread,
Feb 13, 2023, 5:25:33 PM2/13/23
to be...@googlegroups.com
Мы про какие годы говорим.

Я как то попав в МФТИ в 1979м и крепко оккупировав местную. БЭСМ уже в 1980и-81м стал фортоанистом и начал с написания препроцессора для, Фортрана (PREFOR) который изначально делал из него подобие F77 даже с некими расширениями, но без изменения концепции (то есть это был не Ratfor, скажем так). Он стал популярным в некое команде, в какой то момент тексты забрал у меня Миша Краснов и дохрена там еще чего доделал по делу. Лично мною на Prefor был написан редактор Рыжкова (существовал даже в многотерминальном варианте, но в нем использовалась специфика управления памяти ос Диапак из Челябинска и их тексты)  почти все в Монитор 86 (некая версия Монитор 80 со своей встроенной файловой системой, точнее архивом). А на другие языки на БЭСМ мы просто перестали смотреть в какой то момент, поскольку и так все хорошо. В момент начала зарождения этой культуры ничего толком не было. :(

Фортраны (их различия) нас интересовали только с точки зрения базовых возможностей и качества оптимизации.

пн, 13 февр. 2023 г., 21:31 Василий Долматов <vdol...@gmail.com>:
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/04A0148B-24D9-4A74-80A9-ECC5116E9E69%40gmail.com.

Leo B.

unread,
Feb 13, 2023, 6:03:02 PM2/13/23
to БЭСМ-6
«Паскаль-Автокод» - на порядок более нишевый язык… :) нигде ни для чего полезного не использовался. :) 

Авторы системы "Пульс" были бы недовольны. :)

Резюмируя всё прочее: 

1) В БЭСМ-6 уже было понятие о стеке ("магазине", его указатель - регистр 15(10) ), но на рудиментарном уровне; например, команда перехода с возвратом прятала адрес возврата не в стек, а в произвольный указанный регистр. 

2) В МС "Дубна" базовым соглашением о связях было то, которое было первоначально придумано для "Фортрана-Дубна" (транслятор которого, в свою очередь, был вручную переписан с транслятора от CDC 1604, так что какие-то идеи соглашения о связях, возможно, позаимствованы оттуда). 
По соглашению, возврат из процедур делался по регистру 13(10), аргументы клались в стек (который рос в сторону увеличения адресов, поэтому клались на стек в порядке упоминания). Cумматор считался вершиной стека, поэтому последний параметр при вызове находился на сумматоре. 

Регистр 14(10) считался совершенно временным (например, из-за того, что портился при выполнении экстракодов), его можно было использовать произвольно. Дальнейшие детали, какие регистры нужно было сохранять, какие нет, нужно смотреть у Мазного. 

3) Все фортраны были совместимы между собой по интерфейсу. Из Алгола-ГДР можно было вызывать фортрановские процедуры, алгольные из фортрана - через специальный механизм передачи параметров.

4) На момент написания книги Мазного Паскаль-компилятора еще не было, поэтому он там совершенно не освещён. У Паскаля было слегка изменённое соглашение о связях; с помощью ключевых слов и псевдокомментариев можно было вызывать фортрановские процедуры, и алгольные с помощью упомянутого механизма,  а также объявлять точки входа, которые можно было бы вызывать из фортрана.

5) Были и другие языки, процедуры на которых можно было вызывать из Фортрана/Алгола/Паскаля, например, РЕФАЛ (увы, транслятор не сохранился).

6) Прочие системы программирования делали что хотели в рамках того, что 15-й регистр был магазинный, но необязательный к использованию, а 14-й портился от экстракодов.

7) При программировании на ассемблере, когда не требовалась совместимость с конкретной системой программирования, был полный бардак. Стек мог вообще не использоваться, для передачи параметров использовались произвольные регистры или статические ячейки памяти, свои для каждой процедуры; регистры возврата могли быть разные у разных процедур для минимизации необходимости сохранять регистр возврата (обычно в статической ячейке, потому что о рекурсии, особенно на ассемблере, тогда речи практически не шло), и т. п.


Leo

Василий Долматов

unread,
Feb 14, 2023, 1:52:08 AM2/14/23
to 'Кирилл Кобелев' via БЭСМ-6


14 февр. 2023 г., в 01:25, Sergey Ryzhkov <sir...@gmail.com> написал(а):

Мы про какие годы говорим.

примерно про одни и те же…

я работать на Б-6 начал в 1977-м году, как прикладной программист на Алголе (именно Алголе-ГДР)…
нам было критично быстродействие, поэтому мы сразу пытались применить все разработки из ГДР - они генерировали в разы более быстрый код. 
что Алгол, что Фортран.


примерно через год сбойнул КОП, поменяв мою программу на что-то экзотическое и непонятное - это оказались исходники одной из программ около КОПа на БЕМШе… ну, я заинтересовался… :) и, методично удовлетворяя этот интерес, добрел до Коли Макарова… :) 


Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/CALUV2czoF5cYus%2B72h%2B6rfuaH1GBTUT8O4DY03gwUQ2-8GGs-w%40mail.gmail.com.

Mikhail Popov

unread,
Feb 14, 2023, 2:03:57 AM2/14/23
to be...@googlegroups.com
как правило, считалось, про подпрограмма _не_имеет_ права трогать никакие регистры не сохранив их предварительно.
а 15-й  (17(8)) - так вообще табу, потому как это указатель стека. 

В МС Дубна пегистры 1-7 (а.к.а. глобальные регистры) обязаны быть сохранены на вызовах, так как использовались  для организации циклов и базирование фортранных программ, ну а 13 и 15 само собой, в стандартных случаях, это было продиктовано Фортраном Дубна, все последующие  компиляторы следовали этому принципу если они поддерживали интероперабилити 

Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/CALUV2czbWh01_gfegdUV5t8j3o-6nNiL5htiwwT7RpKag2gjkQ%40mail.gmail.com.

Alex Loktionoff

unread,
Feb 14, 2023, 2:59:24 PM2/14/23
to БЭСМ-6
Не согласен с термином 'рудиментарным', сохранение PC регистра в регистр при вызове подпрограмм /* Branch-Link */ используют современные RISC процессоры MIPS, ARM, RISC-V. Это позволяет экономить такты, не записывая в память адрес возврата в самых глубоких процедурах. Обычно такие процедуры вызываются в самых глубоких циклах и сэкономленные такты весьма существенны. /*в "родительских"  процедурах выше по стеку вложенности и так полно кода и накладных расходов, так что там можно и вручную этот адрес сохранять в стек*/ Тем более это дает возможность реализовать отдельный! стек возвратов и тем самым бороться со срыванием стека /*buffer overrun*/ 
Мне лично очень нравиться такой подход :)  

вторник, 14 февраля 2023 г. в 00:03:02 UTC+1, Leo B.:

Alex Loktionoff

unread,
Feb 14, 2023, 3:01:25 PM2/14/23
to БЭСМ-6
Buffer overrun -> Stack Overflow  :D

вторник, 14 февраля 2023 г. в 20:59:24 UTC+1, Alex Loktionoff:

Alex Loktionoff

unread,
Feb 14, 2023, 3:22:14 PM2/14/23
to БЭСМ-6
Т.о. пока имеем:
----------------------------
М0   - начальное смещение программы  //gp
М13 - адрес возврата                                    //ra
М14 - временная                                             //t0
M15 - стек                                                          //sp

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

На сколько я понял есть два мощных подмножества на которые следует ориентироваться при написании нового кода:
1 -  Дубна "by the book" - классика, ей следовали все ФОРТРАНы 
2 - распространенные библиотеки

с 1-ым, Я еще поищу книгу Мазного и отпишусь тут/* если есть ссылки на PDF киньте пожалуйста*/
а со 2-м тут прошу помощь знатоков, какие библиотеки были распространены? /*я полагаю ФОРТРАН?*/

вторник, 14 февраля 2023 г. в 00:03:02 UTC+1, Leo B.:
«Паскаль-Автокод» - на порядок более нишевый язык… :) нигде ни для чего полезного не использовался. :) 

Alex Loktionoff

unread,
Feb 14, 2023, 3:31:22 PM2/14/23
to БЭСМ-6
увидел комментарий Михаила, добавляю:
----------------------------
С      - вершина стека/аккумулятор            //a0

М0   - начальное смещение программы  //gp
М1   - база или индекс цикла                      //s0
М2   - база или индекс цикла                      //s1
М3   - база или индекс цикла                      //s2
М4   - база или индекс цикла                      //s3
М5   - база или индекс цикла                      //s4
М6   - база или индекс цикла                      //s5
М7   - база или индекс цикла                      //s6
М8   - ???                                                            //s7 ??? если не используется как аргумент, и обязан сохраняться вызываемой подпрограммой
М9   - ???                                                            //s8 ??? если не используется как аргумент, и обязан сохраняться вызываемой подпрограммой
М10 - ???                                                            //s9 ??? если не используется как аргумент, и обязан сохраняться вызываемой подпрограммой
М11 - ???                                                            //s10??? если не используется как аргумент, и обязан сохраняться вызываемой подпрограммой
М12 - ???                                                            //s11??? если не используется как аргумент, и обязан сохраняться вызываемой подпрограммой
М13 - адрес возврата                                    //ra
М14 - временная                                             //t0
M15 - стек                                                          //sp

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

вторник, 14 февраля 2023 г. в 21:22:14 UTC+1, Alex Loktionoff:

Alex Loktionoff

unread,
Feb 14, 2023, 3:36:22 PM2/14/23
to БЭСМ-6
Странно, аж 7! Какая в процедуре может быть вложенность циклов? Полагаю что 3х в 90% случаев достаточно, если больше, то можно сохранять в стеке, там накладные расходы уже ничтожны...

вторник, 14 февраля 2023 г. в 08:03:57 UTC+1, mikhailp:

Sergey Ryzhkov

unread,
Feb 14, 2023, 4:40:40 PM2/14/23
to be...@googlegroups.com
Вроде наоборот, сохранять регистры 1-7 должна была сама подпрограмма, если она их портила.

вт, 14 февр. 2023 г., 20:36 Alex Loktionoff <oxy...@gmail.com>:
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/e974b389-b9bc-426f-bfb9-acfb6a7ce4f9n%40googlegroups.com.

Mikhail Popov

unread,
Feb 14, 2023, 5:16:24 PM2/14/23
to be...@googlegroups.com
Под базированием понимается не только локальные переменные, о и обращение к внешним COMMON массивам по индексу типа ABC[i+20],  т.е. транслироваться это могло в 
  ,wtc,i
 ,utc,abc
 ,xta,20
или
  ,xta,i
 ,ati,2
 ,utc,abc

Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/e974b389-b9bc-426f-bfb9-acfb6a7ce4f9n%40googlegroups.com.

Leo B.

unread,
Feb 14, 2023, 6:11:07 PM2/14/23
to БЭСМ-6
On Tuesday, February 14, 2023 at 12:22:14 PM UTC-8 oxy...@gmail.com wrote:
Т.о. пока имеем:
----------------------------
М0   - начальное смещение программы  //gp

М0 всегда 0.
 
> М1   - база или индекс цикла                      //s0
> М2   - база или индекс цикла                      //s1
...
В разных языках и для разных компиляторов это могло быть по-разному, и даже набор регистров, которые полагалось сохранять при входе
в процедуры, разнился от языка к языку. Так, например, в Паскале, с его вложенными процедурами, М1 был базой глобальных переменных, 
М2 - указатель на текущий фрейм процедуры 1-го уровня, М3 - второго, и т. п. вплоть до 6 уровней вложенности.

Поэтому смысла составлять такую табличку немного.


с 1-ым, Я еще поищу книгу Мазного и отпишусь тут/* если есть ссылки на PDF киньте пожалуйста*/

https://disk.yandex.ru/i/-ssyeIaAMIPJ5Q (в числе документов на уже упоминавшейся http://it.museum-ic.ru/documents)

а со 2-м тут прошу помощь знатоков, какие библиотеки были распространены? /*я полагаю ФОРТРАН?*/

ЦЕРНовскую физико-математическую библиотеку, в её состоянии на начало-середину 70-х годов, портировали в МС. "Дубна".

Краткая сводка приводится в книге Мазного; более детальная информация в принципе гуглится по именам процедур и буквенно-цифровому коду процедуры,
и обычно находится или на сайте ЦЕРН или в archive.org.

По техническим причинам разделена на две части; они доступна в МС Дубна по командам *LIBRA:1 и *LIBRA:2
(что примерно аналогично ключам -l1 и -l2 при в юниксных компиляторах, если в /usr/lib/ есть файлы lib1.a и lib2.a)

Из-за специфики ЦЕРН библиотека совершенно не касалась теории чисел, и похоже, что этим ни в одной организации-владельце БЭСМ-6 не интересовались - библиотеку
для операций с целыми произвольной длины так никогда и не нажили, похоже.

Leo

Leo B.

unread,
Feb 14, 2023, 6:15:05 PM2/14/23
to БЭСМ-6
On Tuesday, February 14, 2023 at 3:11:07 PM UTC-8 Leo B. wrote:
с 1-ым, Я еще поищу книгу Мазного и отпишусь тут/* если есть ссылки на PDF киньте пожалуйста*/

https://disk.yandex.ru/i/-ssyeIaAMIPJ5Q (в числе документов на уже упоминавшейся http://it.museum-ic.ru/documents)


Необходимое примечание: в книге Мазного примеры запускаемых пакетов приведены для ОС "Дубна"
 (хотелось бы когда-нибудь иметь возможность запускать их именно в приведённом виде, *ahem*)

Для Диспака заказ ресурсов нужно делать в паспорте задачи, а из примеров Мазного удалять строки *PASS и *TAPE.

Leo

Mikhail Popov

unread,
Feb 14, 2023, 6:59:11 PM2/14/23
to be...@googlegroups.com
Из-за специфики ЦЕРН библиотека совершенно не касалась теории чисел, и похоже, что этим ни в одной организации-владельце БЭСМ-6 не интересовались - библиотеку
для операций с целыми произвольной длины так никогда и не нажили, похоже.

Ны, да, в Дубне теорией чисел если и занимались, то мало, не та тематика, а вот библиотеки такие были, между Мазным и Салтыковым, было соревнование кто сделает более быструю библиотеку, для  целыми произвольной длины, инициировано оно было буржуйской программой типа 1000 знаков числа Пи. По воспоминаниям, формально победил Салтыков, Мазный писал тогда книгу, а Салтыков свою уже закончил. , Были публикации, скорее всего депонированные, т.к. не по темати, но точно библиотеки не сохранились

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/a324544a-919c-4d1b-b2d0-35971ca5d465n%40googlegroups.com.

Alex Loktionoff

unread,
Feb 15, 2023, 1:32:02 AM2/15/23
to БЭСМ-6
s* - соглашение о том что этот регистр сохраняемый вызываемой процедурой если она его изменяет.
s* - registers must be saved by callee in case callee modifies s* register  
т.е. не вижу противоречий

вторник, 14 февраля 2023 г. в 22:40:40 UTC+1, Сергей Рыжков:

Alex Loktionoff

unread,
Feb 15, 2023, 2:10:49 PM2/15/23
to БЭСМ-6

Согласно 5.1.0 Г.Л. Мазный 1978  М1-7 сохраняемые, М8-М14 временные, М13 возврата как они используются в подпрограммах это уже неважно /*индекс цикла или база фрейма*/

Для С с переменным количеством параметров это не очень годиться, так как  на вершине последний параметр и не ясно сколько их. Но можно поступить как в первом компиляторе Applе - последним запихивать количество аргументов :)

Еще печаль, что нельзя сразу индексный М регистр записать/прочитать в память или стек.

Есть ясность что и когда сохранять. Есть заморочка с процедурой/функцией, что-то я не понял почему есть разница +/-1 указателя стека при возврате. Согласно 5.2 при вызове процедура первым записывается Сумматор, т.е. последний параметр всегда в Сумматоре? 

FUNCTION S(A, B, C)   ->

 ,STX, C

 ,STX, B

 ,STA, A

В 5.4.0 похоже при вызове процедуры сначала записывается мусор потом параметры? 

CALL S(A, B, C) ->

 14 ,VTM, A

 ,ITS, 14                #вот тут мусор сумматора в стек!?! это чтоб процедура потом 15 XTA восстановила сумматор?а если он ненужен? почему нет этого кода после CALL в примере автокода?

14,VTM, B

 ,ITS,14

14,VTM, C

 ,ITS,14

 ,CALL, S

В 5.4.0 в функции

X = S(A, B, C) ->

 14 ,VTM, A

 ,ITA, 14  


С - вершина стека/сумматор        //a0 %a %fa
Рмр-регистр млдших разрядов       //a1 %b %fb

М0 - 0 аппарантый ноль            //x0 %zero
М1 - начальное смещение программы //s0 %gp
М2 - база фрейма 1го уровня       //s1 %bp1
М3 - база фрейма 2го уровня       //s2 %bp2
М4 - база фрейма 3го уровня       //s3 %bp3
М5 - база фрейма 4го уровня       //s4 %bp4
М6 - база фрейма 5го уровня       //s5 %bp6
М7 - база фрейма 6го уровня       //s6 %bp7
М8 - временный                    //t1
М9 - временный                    //t2
М10 - временный                   //t3
М11 - временный                   //t4
М12 - временный                   //t5

М13 - адрес возврата              //ra
М14 - очень временный             //t6
M15 - стек                        //sp

С   - регистр модификации адресов //t7 %c


Стек растет в сторону увеличения адресов.
Первый параметр запихивается первым.
среда, 15 февраля 2023 г. в 07:32:02 UTC+1, Alex Loktionoff:

Michael Yaroslavtsev

unread,
Feb 15, 2023, 3:24:53 PM2/15/23
to be...@googlegroups.com
On Wed, Feb 15, 2023 at 11:10 AM Alex Loktionoff <oxy...@gmail.com> wrote:

Согласно 5.1.0 Г.Л. Мазный 1978  М1-7 сохраняемые, М8-М14 временные, М13 возврата как они используются в подпрограммах это уже неважно /*индекс цикла или база фрейма*/

Для С с переменным количеством параметров это не очень годиться, так как  на вершине последний параметр и не ясно сколько их. Но можно поступить как в первом компиляторе Applе - последним запихивать количество аргументов :)

Еще печаль, что нельзя сразу индексный М регистр записать/прочитать в память или стек.

Есть ясность что и когда сохранять. Есть заморочка с процедурой/функцией, что-то я не понял почему есть разница +/-1 указателя стека при возврате. Согласно 5.2 при вызове процедура первым записывается Сумматор, т.е. последний параметр всегда в Сумматоре? 

FUNCTION S(A, B, C)   ->

 ,STX, C

 ,STX, B

 ,STA, A

В 5.4.0 похоже при вызове процедуры сначала записывается мусор потом параметры? 

CALL S(A, B, C) ->

 14 ,VTM, A

 ,ITS, 14                #вот тут мусор сумматора в стек!?! это чтоб процедура потом 15 XTA восстановила сумматор?а если он ненужен? почему нет этого кода после CALL в примере автокода?

ЕМНИП, где-то не то у Салтыкова, не то у Мазного было явно написано, что вызов фортрановской процедуры сохраняет сумматор. Миша Попов, наверное, точнее помнит. 
--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/ab0329ce-0da1-4290-9a25-a5fa1fc8a87cn%40googlegroups.com.


--
Thanks,
-- Michael

Leo B.

unread,
Feb 15, 2023, 3:55:17 PM2/15/23
to БЭСМ-6
On Wednesday, February 15, 2023 at 12:24:53 PM UTC-8 BOPOHOK wrote:
ЕМНИП, где-то не то у Салтыкова, не то у Мазного было явно написано, что вызов фортрановской процедуры сохраняет сумматор. Миша Попов, наверное, точнее помнит. 

Более конкретно там написано примерно то, что процедура без параметров, которую предполагается вызывать из фортрана, должна сама сохранять сумматор при входе и восстанавливать его при выходе.
Вопрос в том, зачем это было бы нужно. Наследие CDC, я полагаю, а уж там какая причина - покрыто мраком.

Leo

Leo B.

unread,
Feb 15, 2023, 4:03:12 PM2/15/23
to БЭСМ-6
On Wednesday, February 15, 2023 at 11:10:49 AM UTC-8 oxy...@gmail.com wrote:

Согласно 5.1.0 Г.Л. Мазный 1978  М1-7 сохраняемые, М8-М14 временные, М13 возврата как они используются в подпрограммах это уже неважно /*индекс цикла или база фрейма*/

Для С с переменным количеством параметров это не очень годиться, так как  на вершине последний параметр и не ясно сколько их. Но можно поступить как в первом компиляторе Applе - последним запихивать количество аргументов :)

Например, так. Или экономнее, благодаря особенности команды перехода с возвратом, количество переданных параметров можно передавать литерально в коде, в правом полуслове.

Еще печаль, что нельзя сразу индексный М регистр записать/прочитать в память или стек.

 

Есть ясность что и когда сохранять. Есть заморочка с процедурой/функцией, что-то я не понял почему есть разница +/-1 указателя стека при возврате. Согласно 5.2 при вызове процедура первым записывается Сумматор, т.е. последний параметр всегда в Сумматоре? 

Зачем это нужно, сейчас вряд ли кто знает; ноги растут из фортран-компилятора CDC. Как говорится в анекдоте, это нужно запомнить, потому что понять это невозможно.

Разумеется, при написании программ, не нуждающихся в совместимости с фортраном, соглашением о сохранности сумматора при вызове процедур можно пренебречь.

Leo

Mikhail Popov

unread,
Feb 16, 2023, 12:11:29 AM2/16/23
to be...@googlegroups.com
Признаться что помню на 100 не могу, что-то в памяти щелкнуло по поводу сумматора при вызове подпрограмм (это только фортран конечно же), нашел у Мазного  на стр. 189 и прогнал тест, прилагается, яйцами  и помидорами в авторов компилятора просьба не кодать, оно без оптимизации.  
М.П.


--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/f3df960b-8ebf-42e1-a45e-c858347c8faan%40googlegroups.com.
accum.txt

Mikhail Popov

unread,
Feb 16, 2023, 1:26:39 AM2/16/23
to be...@googlegroups.com
Вопрос в том, зачем это было бы нужно. Наследие CDC, я полагаю, а уж там какая причина - покрыто мраком.

В CDC-ичной документации, которую я нашел по FORTRAN CALLING SEQUENCE сумматор не спасался, но это не на все +==, т.к. 1604 фортранной документации в интернете нет.

On Wed, Feb 15, 2023 at 12:55 PM Leo B. <leo...@gmail.com> wrote:
--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/f3df960b-8ebf-42e1-a45e-c858347c8faan%40googlegroups.com.

Michael Yaroslavtsev

unread,
Feb 16, 2023, 1:32:41 AM2/16/23
to be...@googlegroups.com
On Wed, Feb 15, 2023 at 9:11 PM Mikhail Popov <mikha...@gmail.com> wrote:
Признаться что помню на 100 не могу, что-то в памяти щелкнуло по поводу сумматора при вызове подпрограмм (это только фортран конечно же), нашел у Мазного  на стр. 189 и прогнал тест, прилагается, яйцами  и помидорами в авторов компилятора просьба не кодать, оно без оптимизации.  
Спасибо, но без оптимизации не очень интересно. 
М.П.


On Wed, Feb 15, 2023 at 12:55 PM Leo B. <leo...@gmail.com> wrote:
On Wednesday, February 15, 2023 at 12:24:53 PM UTC-8 BOPOHOK wrote:
ЕМНИП, где-то не то у Салтыкова, не то у Мазного было явно написано, что вызов фортрановской процедуры сохраняет сумматор. Миша Попов, наверное, точнее помнит. 

Более конкретно там написано примерно то, что процедура без параметров, которую предполагается вызывать из фортрана, должна сама сохранять сумматор при входе и восстанавливать его при выходе.
Вопрос в том, зачем это было бы нужно. Наследие CDC, я полагаю, а уж там какая причина - покрыто мраком.

Leo

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/f3df960b-8ebf-42e1-a45e-c858347c8faan%40googlegroups.com.

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/CAHBB7Y5_Rv2keHL_QD%3Dk40ik43SA-XgxA3_%3D4Xv1Os7W_DijWQ%40mail.gmail.com.


--
Thanks,
-- Michael

Mikhail Popov

unread,
Feb 16, 2023, 2:00:18 AM2/16/23
to be...@googlegroups.com
but,.., CDC fortran спасал Q регистр (AUX ARITHMETIC REG), так что возможно это чучхейский рудимент.  

GETP   NOP  0              GET ADDRESS OF PARAMETER
       LDA* (DXP9)
       STQ* QSTEMP         SAVE Q-REGISTER                    **FTN 3.0**
       LDQ- $F6            UPPER BANK--NO RELATIVE ALLOWED    **FTN 3.0**
       SQM  KLG65K-*-1                                        **FTN 3.0**
       SAP  KLG65K-*-1                                        **FTN 3.0**
       ADD* DXP9                                              **FTN 3.0**
       AND- LPMSK+15      $7FFF                               **FTN 3.0**
KLG65K LDQ* QSTEMP         RESTORE Q REG.                     **FTN 3.0**
       RAO* DXP9           SET ADDRESS OF NEXT PARAMETER OR RETURN ADDR.
       JMP* (GETP)         RETURN TO CALLING PROGRAM


Mikhail Popov

unread,
Feb 16, 2023, 2:22:16 AM2/16/23
to be...@googlegroups.com
С оптимизацией результат такой же, а бот немцы с оптимизацией. 


Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/CADLwzufd9pYQNaXxrRALPHMfP0ogiU0LbGHZd_6cGhAMj6JCvA%40mail.gmail.com.
ftngdr.txt

Michael Yaroslavtsev

unread,
Feb 16, 2023, 11:57:38 AM2/16/23
to be...@googlegroups.com
On Wed, Feb 15, 2023 at 11:22 PM Mikhail Popov <mikha...@gmail.com> wrote:
С оптимизацией результат такой же, а бот немцы с оптимизацией. 
Спасибо, понятно.
Тоже не используют сохранность сумматора. 
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/CAHBB7Y7BPBCyk12RnpTSkmu2ZNNXqLC2HF6BxTUBgHN0WeezEg%40mail.gmail.com.


--
Thanks,
-- Michael

Alex Loktionoff

unread,
Feb 18, 2023, 2:01:30 PM2/18/23
to БЭСМ-6
Благодаря помощи в ветке про эмулятор https://groups.google.com/g/besm6/c/WfIQqvmNAUY
Теперь у меня есть возможность запускать на трансляцию программы и смотреть листинг ассемблера.
Мне больше всего понравился ГДРовский ФОРТРАН, он как-то понятней ассемблер генерирует.
Пока как рабочий вариант принимаю соглашение вызовов внешних процедур/функций - ФОРТРАН-овский.
А для внутренних еще посмотрим что получше, в АСТР-е неплохой формат вызовов...
Захотелось написать свой ФОРТРАН для БЭСМ, даже название придумал forwhat :D

четверг, 16 февраля 2023 г. в 17:57:38 UTC+1, BOPOHOK:

Michael Yaroslavtsev

unread,
Feb 18, 2023, 4:21:11 PM2/18/23
to be...@googlegroups.com
On Sat, Feb 18, 2023 at 11:01 AM Alex Loktionoff <oxy...@gmail.com> wrote:
Благодаря помощи в ветке про эмулятор https://groups.google.com/g/besm6/c/WfIQqvmNAUY
Теперь у меня есть возможность запускать на трансляцию программы и смотреть листинг ассемблера.
Мне больше всего понравился ГДРовский ФОРТРАН, он как-то понятней ассемблер генерирует.
Пока как рабочий вариант принимаю соглашение вызовов внешних процедур/функций - ФОРТРАН-овский.
А для внутренних еще посмотрим что получше, в АСТР-е неплохой формат вызовов...
Захотелось написать свой ФОРТРАН для БЭСМ, даже название придумал forwhat :D
Похвально, но Си был бы полезней. 
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/1cda06a1-fbcc-499e-b094-ac37514f8d3en%40googlegroups.com.


--
Thanks,
-- Michael

dvv

unread,
Feb 18, 2023, 4:31:30 PM2/18/23
to БЭСМ-6
On Saturday, February 18, 2023 at 4:21:11 PM UTC-5 BOPOHOK wrote:
On Sat, Feb 18, 2023 at 11:01 AM Alex Loktionoff <oxy...@gmail.com> wrote:
Благодаря помощи в ветке про эмулятор https://groups.google.com/g/besm6/c/WfIQqvmNAUY
Теперь у меня есть возможность запускать на трансляцию программы и смотреть листинг ассемблера.
Мне больше всего понравился ГДРовский ФОРТРАН, он как-то понятней ассемблер генерирует.
Пока как рабочий вариант принимаю соглашение вызовов внешних процедур/функций - ФОРТРАН-овский.
А для внутренних еще посмотрим что получше, в АСТР-е неплохой формат вызовов...
Захотелось написать свой ФОРТРАН для БЭСМ, даже название придумал forwhat :D
Похвально, но Си был бы полезней. 

 Для оригинальной шестибайтовой? Это да…

Michael Yaroslavtsev

unread,
Feb 18, 2023, 4:36:09 PM2/18/23
to be...@googlegroups.com
У ребят получалось. 

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/64604959-7ca9-4277-ac2e-01f2b2ba6a02n%40googlegroups.com.


--
Thanks,
-- Michael

dvv

unread,
Feb 18, 2023, 4:48:40 PM2/18/23
to БЭСМ-6
On Saturday, February 18, 2023 at 4:36:09 PM UTC-5 BOPOHOK wrote:
On Sat, Feb 18, 2023 at 1:31 PM dvv <dvv...@gmail.com> wrote:


On Saturday, February 18, 2023 at 4:21:11 PM UTC-5 BOPOHOK wrote:
On Sat, Feb 18, 2023 at 11:01 AM Alex Loktionoff <oxy...@gmail.com> wrote:
Захотелось написать свой ФОРТРАН для БЭСМ, даже название придумал forwhat :D
Похвально, но Си был бы полезней. 

 Для оригинальной шестибайтовой? Это да…
У ребят получалось. 
 
Ну а чего ж нет? Чай, не бином Ньютона 😁 Только если это будет не gcc или Clang/LLVM, то это будет YABCC (Yet Another BESM C Compiler). Без оптимизации, без всего.

Michael Yaroslavtsev

unread,
Feb 18, 2023, 5:11:39 PM2/18/23
to be...@googlegroups.com
Это правда. Но надеюсь, что с ANSI хотя бы. 

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/e5a445c2-1a1b-4ded-96cb-3070e524f0e1n%40googlegroups.com.


--
Thanks,
-- Michael

Sergey Ryzhkov

unread,
Feb 18, 2023, 5:54:01 PM2/18/23
to be...@googlegroups.com
Так написан же был Вакуленко порт Джонсоновского PCC для БЭСМ. Тексты сохранились? Можно тупо его немножко поправить и заставить генерить не AS а Madlen. Хотя можно и без мониторки, какой тот вариант ассемблера делал я в свое время, вроде на каком то этапе его даже использовали в проекте Юникс. Но потом вроде переписали. У меня это была адаптация ассемблера Вадима Антонова. Но нужно ли все это?
 

сб, 18 февр. 2023 г., 21:48 dvv <dvv...@gmail.com>:
--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/e5a445c2-1a1b-4ded-96cb-3070e524f0e1n%40googlegroups.com.

Leo B.

unread,
Feb 18, 2023, 6:15:41 PM2/18/23
to БЭСМ-6
On Saturday, February 18, 2023 at 2:54:01 PM UTC-8 Сергей Рыжков wrote:
Так написан же был Вакуленко порт Джонсоновского PCC для БЭСМ. Тексты сохранились?

Сохранился только вариант для Э1-КБ. Перехачить обратно, в принципе, можно, но утомительно. И всё равно получится не ANSI С. 
 
Можно тупо его немножко поправить и заставить генерить не AS а Madlen. Хотя можно и без мониторки, какой тот вариант ассемблера делал я в свое время, вроде на каком то этапе его даже использовали в проекте Юникс. Но потом вроде переписали. У меня это была адаптация ассемблера Вадима Антонова. Но нужно ли все это?

Так и делать Бэббиджевский Difference Engine  в железе было "не нужно". Но сделали, чисто по приколу, чтобы посмотреть, как он мог бы работать. Так и здесь - нормального оптимизирующего Си-компилятора для БЭСМ-6 так никогда и не было, но по приколу, чтобы посмотреть, как он мог бы работать,
будь тогда доступны известные нам технологии производства компиляторов, вполне можно. 

Leo
 

Michael Yaroslavtsev

unread,
Feb 18, 2023, 6:17:39 PM2/18/23
to be...@googlegroups.com
Навѣяло изъ ранняго Макарявичуса:
Не взрослея, там играют дети,
И один из них, наверно, я. 

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/e5a445c2-1a1b-4ded-96cb-3070e524f0e1n%40googlegroups.com.


--
Thanks,
-- Michael

Sergey Ryzhkov

unread,
Feb 18, 2023, 6:22:19 PM2/18/23
to be...@googlegroups.com
А если по сусекам помести? А что не ANSI так чай машинка то тоже не новая.

сб, 18 февр. 2023 г., 23:15 Leo B. <leo...@gmail.com>:
--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/2625518f-9f89-446f-aaf2-25c1d531b87an%40googlegroups.com.

Sergey Ryzhkov

unread,
Feb 18, 2023, 6:23:40 PM2/18/23
to be...@googlegroups.com
Изменения в ANSI C в сравнении с те, что в Джонсоновском компиляторе вполне себе косметические.

сб, 18 февр. 2023 г., 23:22 Sergey Ryzhkov <sir...@gmail.com>:

Leo B.

unread,
Feb 18, 2023, 6:28:43 PM2/18/23
to БЭСМ-6
On Saturday, February 18, 2023 at 11:01:30 AM UTC-8 oxy...@gmail.com wrote:
Благодаря помощи в ветке про эмулятор https://groups.google.com/g/besm6/c/WfIQqvmNAUY
Теперь у меня есть возможность запускать на трансляцию программы и смотреть листинг ассемблера.
Мне больше всего понравился ГДРовский ФОРТРАН, он как-то понятней ассемблер генерирует.

Справедливости ради, наиболее оптимизирующим Фортран-компилятором для БЭСМ-6 был ФОРЕКС ИПМ АН СССР.
Самая свежая имеющаяся у нас версия вызывается в МС Дубна командой

*trans:forex3*,,411550

Пока как рабочий вариант принимаю соглашение вызовов внешних процедур/функций - ФОРТРАН-овский.

Передача всего подряд, включая константы, по ссылке - это по нынешним меркам, безумие. А со смесью ссылок и значений
получается практически в точности, как в Паскале.

Leo

dvv

unread,
Feb 18, 2023, 6:39:15 PM2/18/23
to БЭСМ-6
On Saturday, February 18, 2023 at 6:23:40 PM UTC-5 Сергей Рыжков wrote:
Изменения в ANSI C в сравнении с те, что в Джонсоновском компиляторе вполне себе косметические.

Возможно, это и так, но ради хохмы: возьми Джонсона для чего-нибудь 32-разрядного и попробуй через него протащить хоть сколько-нибудь увесистую программу из нынешнего Линукса. Скажем, Питон…

Sergey Ryzhkov

unread,
Feb 18, 2023, 6:39:43 PM2/18/23
to be...@googlegroups.com


сб, 18 февр. 2023 г., 23:28 Leo B. <leo...@gmail.com>:
On Saturday, February 18, 2023 at 11:01:30 AM UTC-8 oxy...@gmail.com wrote:
Благодаря помощи в ветке про эмулятор https://groups.google.com/g/besm6/c/WfIQqvmNAUY
Теперь у меня есть возможность запускать на трансляцию программы и смотреть листинг ассемблера.
Мне больше всего понравился ГДРовский ФОРТРАН, он как-то понятней ассемблер генерирует.

Справедливости ради, наиболее оптимизирующим Фортран-компилятором для БЭСМ-6 был ФОРЕКС ИПМ АН СССР.
Самая свежая имеющаяся у нас версия вызывается в МС Дубна командой

*trans:forex3*,,411550

Пока как рабочий вариант принимаю соглашение вызовов внешних процедур/функций - ФОРТРАН-овский.

Ну так в мое время в Фортранах другого не бывало. Это главная фортрановская фишка, можно через это даже значение констант менять! Как сейчас - не знаю.

Передача всего подряд, включая константы, по ссылке - это по нынешним меркам, безумие. А со смесью ссылок и значений
получается практически в точности, как в Паскале.

Leo

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/4f2c1909-1c8e-46ce-aa21-b67c332e0b7bn%40googlegroups.com.

Alex Loktionoff

unread,
Feb 19, 2023, 9:17:59 AM2/19/23
to БЭСМ-6
да я тоже так думаю, что будет совместимость  фортраном передавая указатели, а для внутренних вызовов использовать и значения.
а в чем разница с Паскалем тогда? Он отходит от схемы s1-7; ra13; t8-12+14 ? 

воскресенье, 19 февраля 2023 г. в 00:28:43 UTC+1, Leo B.:

Василий Долматов

unread,
Feb 19, 2023, 10:21:00 AM2/19/23
to be...@googlegroups.com
про Паскаль говоря, необходимо уточнять, о каком именно Паскале идет речь. 

Паскаль-Монитор жил в МС Дубна, в чем-то следовал тамошним соглашениям.

Паскаль-Автокод - жил совершенно по другим правилам, в том числе иначе использовал регистры.


19 февр. 2023 г., в 17:17, Alex Loktionoff <oxy...@gmail.com> написал(а):

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/ca4bea91-0a00-4a2c-8113-446a8fd64000n%40googlegroups.com.

Sergey Ryzhkov

unread,
Feb 19, 2023, 10:52:22 AM2/19/23
to be...@googlegroups.com
Мало того, в классическом Фортране (4 и вроде и в 77) передавать параметры по другому не получится при сохранении парадигмы независимой трансляции модулей. Понятие прототипа, как в C++ там отсутствует.да и include нет как класса.

сб, 18 февр. 2023 г., 23:39 Sergey Ryzhkov <sir...@gmail.com>:

Leo B.

unread,
Feb 19, 2023, 12:58:46 PM2/19/23
to БЭСМ-6
On Sunday, February 19, 2023 at 6:17:59 AM UTC-8 oxy...@gmail.com wrote:
да я тоже так думаю, что будет совместимость  фортраном передавая указатели, а для внутренних вызовов использовать и значения.
а в чем разница с Паскалем тогда? Он отходит от схемы s1-7; ra13; t8-12+14 ? 

Насколько можно судить по компилятору Паскаль-монитор, в нём считается, что процедура, не объявленная как входная, 
может использовать любые регистры с номерами выше номера своего фрейма, не сохраняя их предварительно.
Сохранение регистров 1-7 делается только в начале процедур, скомпилированных в режиме (*=Е+*), которые таким образом делаются доступны
для вызова из других языков.

Leo

Alex Loktionoff

unread,
Feb 20, 2023, 2:25:13 AM2/20/23
to БЭСМ-6
А можно по-подробней об _уровне фрейма_ ? Разве процедура вызываться только на одном и том-же уровне вложенности? /*а как-же рекурсия*/ Или я не правильно понял что такое фрейм...

воскресенье, 19 февраля 2023 г. в 18:58:46 UTC+1, Leo B.:

Василий Долматов

unread,
Feb 20, 2023, 3:55:01 AM2/20/23
to be...@googlegroups.com
фрейм (или scope) - уровень в котором описана процедура. 

если  опишу процедуру внутри какой-то процедуры, то видна она будет только внутри нее, но не извне из головной программы, и тем более не из других процедур. 





20 февр. 2023 г., в 10:25, Alex Loktionoff <oxy...@gmail.com> написал(а):

-- 
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
--- 
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/84858f80-4e79-44d7-a1a2-268b9595ee68n%40googlegroups.com.

Mikhail Popov

unread,
Feb 20, 2023, 1:01:34 PM2/20/23
to be...@googlegroups.com
Захотелось написать свой ФОРТРАН для БЭСМ,

Какой именно? 4,77,90 или 2003? или по возможностям Б-6,  на практике, кодогенератор имеет смысл.

Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/CADLwzuf7khgo2RvZx8giyhRAfurF8V8QKcLk1A1-7hH9Nwnnpg%40mail.gmail.com.

Alex Loktionoff

unread,
Feb 20, 2023, 1:36:00 PM2/20/23
to БЭСМ-6
спасибо за наводку, подключил 2148 диск, запусил, но особой разницы на решете не заметил:

*NАМЕ FОRЕХ

           *САLL УЕSМЕМОRУ

           *ОРТIМ

           *     NО LISТ

           *FULL LISТ

           *SУSТЕМ LОАD LISТ

           *ТRАNS:FОRЕХ3*,,411550


воскресенье, 19 февраля 2023 г. в 00:28:43 UTC+1, Leo B.:
On Saturday, February 18, 2023 at 11:01:30 AM UTC-8 oxy...@gmail.com wrote:

Leo B.

unread,
Feb 20, 2023, 9:59:06 PM2/20/23
to БЭСМ-6
Разница между двумя имеющимися у нас версиями ФОРЕКСа - не столько в оптимизациях, сколько в исправлении ошибок. 
А оптимизирует ФОРЕКС, когда без ошибок, лучше, чем Фортран-ГДР.

Leo

Alex Loktionoff

unread,
Mar 27, 2023, 10:52:15 AM3/27/23
to БЭСМ-6
Посмотрев код генерируемый pascompl и вижу, что как база используется M8 а не М7:
Так что надо вводить коррективы... но все-же не оставляю надежд выработать универсальный совместимый подход FORTRAN&PASCAL и использовать _его_ для C/C++

          8, BASE ,*0023B

...

 *0007B :  , XTA ,*0025B

          1, ATX ,50B

          1, XTA ,50B

           , A+X ,*0026B

          1, ATX ,50B

           , XTA ,*0027B

          1, XTS ,50B

          12, VTM ,*OUTPUT*

          13, VJM ,P/WI  

...

 *0023B  :  , TEXT,8H*OUTPUT*

 *0024B  :  , TEXT,8H  OUTPUT

 *0025B  :  , INT ,82

 *0026B  :  , INT ,428

 *0027B  :  , INT ,10


воскресенье, 19 февраля 2023 г. в 15:17:59 UTC+1, Alex Loktionoff:

Alex Loktionoff

unread,
May 1, 2023, 1:24:07 PM5/1/23
to БЭСМ-6
Обьясните, пожалуйста!
Непонятно, зачем GDR FORTRAN инициализирует M7? /* 7,VTM,*C */
Сначала подумал, что это типа GP для относительной адресации переменных. /*чтоб можно было использовать короткие смещения и код можно сделать перемещаемым*/
Но при каждом вызове процедуры/функции делает 14,VTM,X  ,ITA, 14/*14, ITS,*/
Какой смысл в алоцировании M7? Получается и больше кода и на один регистр меньше, а код все-равно не-перемещаемый.

  001                 РRОGRАМ МАIN

  002                 I = 3

  003                 II = NFN(I)

              7 , VТМ , *С

С *** SТАТЕМЕNТ 00002   > 00000< ***

              7 , ХТА , *DIFF+3

              7 , АТХ , I-*С

С *** SТАТЕМЕNТ 00003   > 00001< ***

             14 , VТМ , I

                , IТА , 14

                , САLL, NFN


понедельник, 27 марта 2023 г. в 16:52:15 UTC+2, Alex Loktionoff:

Mikhail Popov

unread,
May 1, 2023, 1:31:18 PM5/1/23
to be...@googlegroups.com
Это примитивное базирование сделанное на уровне компилятора, FTN DDR не вызывает assembler как backend.

 7 , VТМ , *С
7 , АТХ , I-*С   
эквивалентно
 7. BASE.  *С
   , АТХ , I

Alex Loktionoff

unread,
May 1, 2023, 1:33:15 PM5/1/23
to БЭСМ-6
Интересно, у Фортран M7 у Паскаль M8 а у Тюрина ДИСПАК 1982г. стр51 2.4 Язык экстракодов
Стандартной библиотечной программой называется перемещаемая используя в качестве базового регистр M15 /* в десятичном М13??? тот самый стандартный регистр возврата? как тогда можно вернуться из подпрограммы*/

Как так может быть?

понедельник, 27 марта 2023 г. в 16:52:15 UTC+2, Alex Loktionoff:
Посмотрев код генерируемый pascompl и вижу, что как база используется M8 а не М7:

Mikhail Popov

unread,
May 1, 2023, 1:39:42 PM5/1/23
to be...@googlegroups.com
Вариантов может быть много, вот один из них, при условии, что мы по 13-мы никого не вызываем 
, ita, 13
, xts,
13,vtm, base
 ....
stx,
,ati,13
13,uj, 



--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/e6355197-bd1e-4f2b-9b41-2771d3ae7c06n%40googlegroups.com.

Alex Loktionoff

unread,
May 2, 2023, 3:50:30 AM5/2/23
to БЭСМ-6
Тогда выходит, что для "стандартных библиотечных" программ должен быть свой "стандарт" использования регистров и вызова? Это можно где-то почитать?

понедельник, 1 мая 2023 г. в 19:39:42 UTC+2, mikhailp:

Leo B.

unread,
May 2, 2023, 10:35:13 PM5/2/23
to БЭСМ-6
Соглашение для вызова СП с помощью Э66 должно быть описано в книге Тюрина про ОС Диспак. 

Alex Loktionoff

unread,
May 14, 2023, 4:01:31 PM5/14/23
to БЭСМ-6
Ответ на вопрос инициализации M7 является "базирование"  Программирование на языке фортран /А.И.Салтыков Г.И.Макаренко/ 49 с194
Обращение относительно регистра важно для "коротких команд", если код разрастается, то не все подпрограммы могут "дотянуться" до всех данных 12 битовыми командами.
В книге написано, что в качестве базового выбирают обычно М1-7 если вызывают другие подпрограммы или М8-12 если не вызывают.

понедельник, 1 мая 2023 г. в 19:24:07 UTC+2, Alex Loktionoff:

Alex Loktionoff

unread,
May 14, 2023, 4:14:23 PM5/14/23
to БЭСМ-6
Захотелось написать оптимизирующий компилятор чтоб мог компилировать ЕС и 77 фортртан в бинарники БЭСМ6. /*вдохновил мадлен, который генерит ГДР фортран, такой простой и понятный, его чуть соптимизировать и будет идеал*/ Но хочется сделать бекенд, который бы использовал синтаксическое дерево RUST, чтоб с проверкой времени жизни переменных и владения /* 99.9% всех фортрановских глюков можно отловить при компиляции*/. Можно разные фронтенды написать для RUST, паскаля и может C. Потягаться сколько MFLOPS выйдет в DRYHSTONE.
Для начала уже бы готовое AST в MADLEN перевести...

понедельник, 20 февраля 2023 г. в 19:01:34 UTC+1, mikhailp:

Leo B.

unread,
May 14, 2023, 7:04:21 PM5/14/23
to БЭСМ-6
Собственно генерацию кода можно основывать на Паскаль-компиляторе, в котором видно, как превращаются в код выражения, условия и т.п. Тонкое место - минимизация команд переключения режимов АУ. 

Leo

Michael Yaroslavtsev

unread,
May 14, 2023, 7:58:53 PM5/14/23
to be...@googlegroups.com
On Sun, May 14, 2023 at 4:04 PM Leo B. <leo...@gmail.com> wrote:
Собственно генерацию кода можно основывать на Паскаль-компиляторе, в котором видно, как превращаются в код выражения, условия и т.п. Тонкое место - минимизация команд переключения режимов АУ. 
Я бы ещё порекомендавал не концентрироваться именно на МАДЛЕНе, но выделить это в abstraction layer.. 
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/d1c5e2c4-8dd5-4684-9b2c-a091befff662n%40googlegroups.com.


--
Thanks,
-- Michael

Василий Долматов

unread,
May 15, 2023, 12:37:40 AM5/15/23
to 'Кирилл Кобелев' via БЭСМ-6


15 мая 2023 г., в 02:58, Michael Yaroslavtsev <absolutel...@gmail.com> написал(а):



On Sun, May 14, 2023 at 4:04 PM Leo B. <leo...@gmail.com> wrote:
Собственно генерацию кода можно основывать на Паскаль-компиляторе, в котором видно, как превращаются в код выражения, условия и т.п. Тонкое место - минимизация команд переключения режимов АУ. 
Я бы ещё порекомендавал не концентрироваться именно на МАДЛЕНе, но выделить это в abstraction layer.. 

:) :) :) О-о-о!!! Жоголевское «Ядро ТК» начало проглядывать :)

dol@

Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/CADLwzufUqDcnzLAeVxY3wH6i4_QeBLrbwaBjrAAfU5u-tXe_4w%40mail.gmail.com.

Michael Yaroslavtsev

unread,
May 15, 2023, 1:04:30 AM5/15/23
to be...@googlegroups.com
On Sun, May 14, 2023 at 9:37 PM Василий Долматов <vdol...@gmail.com> wrote:


15 мая 2023 г., в 02:58, Michael Yaroslavtsev <absolutel...@gmail.com> написал(а):



On Sun, May 14, 2023 at 4:04 PM Leo B. <leo...@gmail.com> wrote:
Собственно генерацию кода можно основывать на Паскаль-компиляторе, в котором видно, как превращаются в код выражения, условия и т.п. Тонкое место - минимизация команд переключения режимов АУ. 
Я бы ещё порекомендавал не концентрироваться именно на МАДЛЕНе, но выделить это в abstraction layer.. 

:) :) :) О-о-о!!! Жоголевское «Ядро ТК» начало проглядывать :)
Вот это я не понял. Расскажи.
Но я-то вот о чём.
В какой-то момент, когда лобачёвский C compiler для Эльбруса Б уже был, а володинского ещё не было, я попытался "подковать" лобачёвский компилятор так, чтобы вместо юниксного ассемблера он выдавал "ассемблер Рачинского".
И...ничего не вышло, потому что лобачёвский компилятор пользовался некоторыми нетривиальными фичерами юниксного ассемблера, которые "с первого наскока" было не так просто запихнуть в рамки ассемблера Рачинского.
Так шта, "опыт, сын ошибок трудных". 
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/7C03175C-C44B-406A-B3C2-C0BA9C2E5F63%40gmail.com.


--
Thanks,
-- Michael

Василий Долматов

unread,
May 15, 2023, 1:46:22 AM5/15/23
to be...@googlegroups.com


15 мая 2023 г., в 08:04, Michael Yaroslavtsev <absolutel...@gmail.com> написал(а):



On Sun, May 14, 2023 at 9:37 PM Василий Долматов <vdol...@gmail.com> wrote:


15 мая 2023 г., в 02:58, Michael Yaroslavtsev <absolutel...@gmail.com> написал(а):



On Sun, May 14, 2023 at 4:04 PM Leo B. <leo...@gmail.com> wrote:
Собственно генерацию кода можно основывать на Паскаль-компиляторе, в котором видно, как превращаются в код выражения, условия и т.п. Тонкое место - минимизация команд переключения режимов АУ. 
Я бы ещё порекомендавал не концентрироваться именно на МАДЛЕНе, но выделить это в abstraction layer.. 

:) :) :) О-о-о!!! Жоголевское «Ядро ТК» начало проглядывать :)
Вот это я не понял. Расскажи.
ну, когда мы с тобой еще были студентами,  зав.кафедрой АЯ ВМК МГУ проф. Е.А.Жоголев двигал тему о том, что нужно сделать «универсальный технологический комплекс» для работы на всех имеющихся ЭВМ на всех известных языках программирования, состоящий из его «ядра», которое обрабатывало бы алгоритмы, выраженные на некоем  внутреннем мета-языке», набора входных конвертеров, преобразующих тексты из любых языков программирования в этот мета-язык и набора кодогенераторов, которые алгоритмы, сгенерированные этим «ядром ТК», конвертировали бы в последовательность машинных команд для конкретной ЭВМ.

:) 


Но я-то вот о чём.
В какой-то момент, когда лобачёвский C compiler для Эльбруса Б уже был, а володинского ещё не было, я попытался "подковать" лобачёвский компилятор так, чтобы вместо юниксного ассемблера он выдавал "ассемблер Рачинского".
И...ничего не вышло, потому что лобачёвский компилятор пользовался некоторыми нетривиальными фичерами юниксного ассемблера, которые "с первого наскока" было не так просто запихнуть в рамки ассемблера Рачинского.
вот именно существование вот таких приколов и заставляло относиться к усилиям Е.А.Жоголева (и тех аспирантов, которых он на это властью своей подрядил), как минимум с улыбкой. :)


Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/CADLwzufSKPrg11AsHYPw-fkVOHAQvcNwzD73%2B8gAJgxAXeuhqQ%40mail.gmail.com.

Michael Yaroslavtsev

unread,
May 15, 2023, 4:09:03 AM5/15/23
to be...@googlegroups.com
On Sun, May 14, 2023 at 10:46 PM Василий Долматов <vdol...@gmail.com> wrote:


15 мая 2023 г., в 08:04, Michael Yaroslavtsev <absolutel...@gmail.com> написал(а):



On Sun, May 14, 2023 at 9:37 PM Василий Долматов <vdol...@gmail.com> wrote:


15 мая 2023 г., в 02:58, Michael Yaroslavtsev <absolutel...@gmail.com> написал(а):



On Sun, May 14, 2023 at 4:04 PM Leo B. <leo...@gmail.com> wrote:
Собственно генерацию кода можно основывать на Паскаль-компиляторе, в котором видно, как превращаются в код выражения, условия и т.п. Тонкое место - минимизация команд переключения режимов АУ. 
Я бы ещё порекомендавал не концентрироваться именно на МАДЛЕНе, но выделить это в abstraction layer.. 

:) :) :) О-о-о!!! Жоголевское «Ядро ТК» начало проглядывать :)
Вот это я не понял. Расскажи.
ну, когда мы с тобой еще были студентами,  зав.кафедрой АЯ ВМК МГУ проф. Е.А.Жоголев двигал тему о том, что нужно сделать «универсальный технологический комплекс» для работы на всех имеющихся ЭВМ на всех известных языках программирования, состоящий из его «ядра», которое обрабатывало бы алгоритмы, выраженные на некоем  внутреннем мета-языке», набора входных конвертеров, преобразующих тексты из любых языков программирования в этот мета-язык и набора кодогенераторов, которые алгоритмы, сгенерированные этим «ядром ТК», конвертировали бы в последовательность машинных команд для конкретной ЭВМ.

:) 


Но я-то вот о чём.
В какой-то момент, когда лобачёвский C compiler для Эльбруса Б уже был, а володинского ещё не было, я попытался "подковать" лобачёвский компилятор так, чтобы вместо юниксного ассемблера он выдавал "ассемблер Рачинского".
И...ничего не вышло, потому что лобачёвский компилятор пользовался некоторыми нетривиальными фичерами юниксного ассемблера, которые "с первого наскока" было не так просто запихнуть в рамки ассемблера Рачинского.
вот именно существование вот таких приколов и заставляло относиться к усилиям Е.А.Жоголева (и тех аспирантов, которых он на это властью своей подрядил), как минимум с улыбкой. :)
LLVM. Улыбаемся и машем? :) 
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/5063F8FE-6D2B-4EF2-BCA3-3F10D18DBC74%40gmail.com.


--
Thanks,
-- Michael

Michael Yaroslavtsev

unread,
May 15, 2023, 4:25:54 AM5/15/23
to be...@googlegroups.com
On Sun, May 14, 2023 at 10:46 PM Василий Долматов <vdol...@gmail.com> wrote:


15 мая 2023 г., в 08:04, Michael Yaroslavtsev <absolutel...@gmail.com> написал(а):



On Sun, May 14, 2023 at 9:37 PM Василий Долматов <vdol...@gmail.com> wrote:


15 мая 2023 г., в 02:58, Michael Yaroslavtsev <absolutel...@gmail.com> написал(а):



On Sun, May 14, 2023 at 4:04 PM Leo B. <leo...@gmail.com> wrote:
Собственно генерацию кода можно основывать на Паскаль-компиляторе, в котором видно, как превращаются в код выражения, условия и т.п. Тонкое место - минимизация команд переключения режимов АУ. 
Я бы ещё порекомендавал не концентрироваться именно на МАДЛЕНе, но выделить это в abstraction layer.. 

:) :) :) О-о-о!!! Жоголевское «Ядро ТК» начало проглядывать :)
Вот это я не понял. Расскажи.
ну, когда мы с тобой еще были студентами,  зав.кафедрой АЯ ВМК МГУ проф. Е.А.Жоголев
Сколько я помню, Трифонов, вроде, завкафедрой АЯ был. 
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/5063F8FE-6D2B-4EF2-BCA3-3F10D18DBC74%40gmail.com.


--
Thanks,
-- Michael

Василий Долматов

unread,
May 15, 2023, 5:25:24 AM5/15/23
to 'Кирилл Кобелев' via БЭСМ-6


15 мая 2023 г., в 11:25, Michael Yaroslavtsev <absolutel...@gmail.com> написал(а):



On Sun, May 14, 2023 at 10:46 PM Василий Долматов <vdol...@gmail.com> wrote:


15 мая 2023 г., в 08:04, Michael Yaroslavtsev <absolutel...@gmail.com> написал(а):



On Sun, May 14, 2023 at 9:37 PM Василий Долматов <vdol...@gmail.com> wrote:


15 мая 2023 г., в 02:58, Michael Yaroslavtsev <absolutel...@gmail.com> написал(а):



On Sun, May 14, 2023 at 4:04 PM Leo B. <leo...@gmail.com> wrote:
Собственно генерацию кода можно основывать на Паскаль-компиляторе, в котором видно, как превращаются в код выражения, условия и т.п. Тонкое место - минимизация команд переключения режимов АУ. 
Я бы ещё порекомендавал не концентрироваться именно на МАДЛЕНе, но выделить это в abstraction layer.. 

:) :) :) О-о-о!!! Жоголевское «Ядро ТК» начало проглядывать :)
Вот это я не понял. Расскажи.
ну, когда мы с тобой еще были студентами,  зав.кафедрой АЯ ВМК МГУ проф. Е.А.Жоголев 
Сколько я помню, Трифонов, вроде, завкафедрой АЯ был. 

угу, склероз дважды сглючил… :( 

не АЯ, а СП, и не зав.каф., а всего лишь зав.лаб.

:)

Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/besm6/CADLwzuchU%3D_kc2c5OBOj4RCJWDQ2M2070x8nf2cFPaNR3R6T3w%40mail.gmail.com.

Alex Loktionoff

unread,
Feb 28, 2025, 5:12:07 PMFeb 28
to БЭСМ-6
Согласен, С по факту всему голова. В реальности выживают только языки совместимые во вызовам.
Тогда вопрос какое было соглашение вызовов для С ЭЛЬБРУС-1КБ ведь для БЕСМ6 С просто не реально использовать.
Там работа со строками совсем иная и куча кода типа char *str = malloc(256);
Получается ЭЛЬБРУС-1КБ имел вообще свой томат вызовов?
Может в ДУБНА был какой-то единый стандарт, для своих компиляторов? 

суббота, 18 февраля 2023 г. в 22:21:11 UTC+1, BOPOHOK:

Alex Loktionoff

unread,
Feb 28, 2025, 5:17:48 PMFeb 28
to БЭСМ-6
Будет с LLVM, задумка конечно у меня Наполеоновская, время покажет.
Тут главное С перенести, чтоб был само-компилируемый, а дальше пойдет-поедет...
Только вот боюсь БЭСМ6 не потянет компилятор С со своими 15битовыми указателями, тут наверно надо ориентироваться на ЭЛЬБРУС-1КБ 2 режим. Но компилятор во 2 режиме может генерировать код для БЭСМ6, и для ЭЛЬБРУС-1КБ это могло бы иметь смысл и реально работать в 90-е.

суббота, 18 февраля 2023 г. в 22:48:40 UTC+1, dvv:
On Saturday, February 18, 2023 at 4:36:09 PM UTC-5 BOPOHOK wrote:
On Sat, Feb 18, 2023 at 1:31 PM dvv <dvv...@gmail.com> wrote:


On Saturday, February 18, 2023 at 4:21:11 PM UTC-5 BOPOHOK wrote:
On Sat, Feb 18, 2023 at 11:01 AM Alex Loktionoff <oxy...@gmail.com> wrote:
Захотелось написать свой ФОРТРАН для БЭСМ, даже название придумал forwhat :D
Похвально, но Си был бы полезней. 

 Для оригинальной шестибайтовой? Это да…
У ребят получалось. 
 
Ну а чего ж нет? Чай, не бином Ньютона 😁 Только если это будет не gcc или Clang/LLVM, то это будет YABCC (Yet Another BESM C Compiler). Без оптимизации, без всего.

Alex Loktionoff

unread,
Feb 28, 2025, 5:22:50 PMFeb 28
to БЭСМ-6
Да, интересно, никогда еще компиляторов не писал :D
Лео, подскажите можно ли в dispak-e провалить чисто код сгенерированный например FORTANом? 
Понятно что число команд, но хотяб, чтоб как то потом сравнить, свое поделие с GDR и FOREX.
Чтоб выкинуть исполнение транслятора и экстра-кодов, хотя их бы отдельно посчитать?

воскресенье, 19 февраля 2023 г. в 00:15:41 UTC+1, Leo B.:
On Saturday, February 18, 2023 at 2:54:01 PM UTC-8 Сергей Рыжков wrote:
Так написан же был Вакуленко порт Джонсоновского PCC для БЭСМ. Тексты сохранились?

Сохранился только вариант для Э1-КБ. Перехачить обратно, в принципе, можно, но утомительно. И всё равно получится не ANSI С. 
 
Можно тупо его немножко поправить и заставить генерить не AS а Madlen. Хотя можно и без мониторки, какой тот вариант ассемблера делал я в свое время, вроде на каком то этапе его даже использовали в проекте Юникс. Но потом вроде переписали. У меня это была адаптация ассемблера Вадима Антонова. Но нужно ли все это?

Так и делать Бэббиджевский Difference Engine  в железе было "не нужно". Но сделали, чисто по приколу, чтобы посмотреть, как он мог бы работать. Так и здесь - нормального оптимизирующего Си-компилятора для БЭСМ-6 так никогда и не было, но по приколу, чтобы посмотреть, как он мог бы работать,
будь тогда доступны известные нам технологии производства компиляторов, вполне можно. 

Leo
 

Serge Vakulenko

unread,
Feb 28, 2025, 5:45:40 PMFeb 28
to БЭСМ-6
Вообще-то исходники компилятора Си для Э-1КБ сохранились, так что можете посмотреть на соглашение вызовов.

И для БЭСМ-6 компилятор Си тоже имелся. С его помощью Андрей Основич и Володя Молчанов в Новосибирске даже умудрились затащить Unix v6 на реальную БЭСМ в качестве демонстрации идеи. Тот компилятор, увы, канул в лету.

Вызов malloc() возвращал словный указатель. Указатели char* имели адрес слова в младших битах и смещение для сдвига в старших битах. Получалось более-менее совместимо с традиционным сишным кодом.

Параметры функций передавались ровно так же в стеке. Но запихивались не в обратном порядке, а в прямом: от первого параметра к последнему. Это позволяло функциям с переменными числом параметров типа printf() легко получить первый параметр. Потому что стек у нас растёт в другую сторону.

Дубненский стандарт передачи параметров никак не годился для Си.

--Сергей

Alex Loktionoff

unread,
Feb 28, 2025, 6:27:35 PMFeb 28
to БЭСМ-6


пятница, 28 февраля 2025 г. в 23:45:40 UTC+1, serge.v...@gmail.com:
Вообще-то исходники компилятора Си для Э-1КБ сохранились, так что можете посмотреть на соглашение вызовов.
Можете дать наводку с какого файла начать "заглбляться" чтоб быстрее дойти до соглашения вызовов? 
 
И для БЭСМ-6 компилятор Си тоже имелся. С его помощью Андрей Основич и Володя Молчанов в Новосибирске даже умудрились затащить Unix v6 на реальную БЭСМ в качестве демонстрации идеи. Тот компилятор, увы, канул в лету
Круто, это с адресным пространством в 32К слов? Компилятор сам умещался вместе с текстом и генерированным кодом в 32К???


Вызов malloc() возвращал словный указатель. Указатели char* имели адрес слова в младших битах и смещение для сдвига в старших битах. Получалось более-менее совместимо с традиционным сишным кодом.
Вот спасибо, чтоб не изобретать, свое. я думал использовать поле мантиссы. Но у них было просто левое и правое слово, так?
Ну и вопрос начинающего, а как быстрее всего получить эти два слова в двух регистрах?
Наверно strcat, strcmp, strtok ,были написаны на ассемблере, но все-же как работала адресная арефметика для кода написанного на С?
как char *str = malloc(256); это понятно, а как void *ptr = ++str;  char *word = ptr; как бы выглядел сгенерированный код на МАДЛЕН? 
 
Параметры функций передавались ровно так же в стеке. Но запихивались не в обратном порядке, а в прямом: от первого параметра к последнему. Это позволяло функциям с переменными числом параметров типа printf() легко получить первый параметр. Потому что стек у нас растёт в другую сторону
Не понял, если первый параметр /*const char *format*/ запихивается первым, то в стеке он в глубине, и непонятно на которой.
???
  
Дубненский стандарт передачи параметров никак не годился для Си.
Будем знать.

Serge Vakulenko

unread,
Feb 28, 2025, 7:45:42 PMFeb 28
to БЭСМ-6
On Friday, February 28, 2025 at 3:27:35 PM UTC-8 oxy...@gmail.com wrote:

пятница, 28 февраля 2025 г. в 23:45:40 UTC+1, serge.v...@gmail.com:
Вообще-то исходники компилятора Си для Э-1КБ сохранились, так что можете посмотреть на соглашение вызовов.
Можете дать наводку с какого файла начать "заглбляться" чтоб быстрее дойти до соглашения вызовов? 

Можно начать с папки pcc - там есть Makefile. Если запустить make, запустится сборка компилятора. Но упадёт, потому как код там довольно старенький. Надо всё поправить и добиться, чтобы собрался бинарник ccom. Запускать его с одним аргументом - именем входного Си-шного файла. Он будет выдавать на stdout ассемблерный код.

Порядок генерации аргументов функции задан в функции genargs() в файле pcc/order.c. Комментарий там остался старый: "do the arguments on the right (last->first)". Но код поправлен, чтобы наоборот: левое поддерево генерится первым.
 
 
И для БЭСМ-6 компилятор Си тоже имелся. С его помощью Андрей Основич и Володя Молчанов в Новосибирске даже умудрились затащить Unix v6 на реальную БЭСМ в качестве демонстрации идеи. Тот компилятор, увы, канул в лету
Круто, это с адресным пространством в 32К слов? Компилятор сам умещался вместе с текстом и генерированным кодом в 32К???

Тот юникс компилировался в кросс-режиме, скорее всего. Но компилятор вроде помещался в память БЭСМ, если собрать в двухпроходном режиме. Там есть такой #define ONEPASS в файле pcc/macdefs. Весь входной текст и генерируемый код ему держать в памяти не нужно, он работает пооператорно. Распарсил один оператор из исходного файла - выдал ассемблерный код - перешёл к следующему.
 

Вызов malloc() возвращал словный указатель. Указатели char* имели адрес слова в младших битах и смещение для сдвига в старших битах. Получалось более-менее совместимо с традиционным сишным кодом.
Вот спасибо, чтоб не изобретать, свое. я думал использовать поле мантиссы. Но у них было просто левое и правое слово, так?

Удобнее было держать номер байта в битах 64:62. Команда сдвига с таким аргументом правильно двигала слово куда надо.  
 
Ну и вопрос начинающего, а как быстрее всего получить эти два слова в двух регистрах?
Наверно strcat, strcmp, strtok ,были написаны на ассемблере, но все-же как работала адресная арефметика для кода написанного на С?
как char *str = malloc(256); это понятно, а как void *ptr = ++str;  char *word = ptr; как бы выглядел сгенерированный код на МАДЛЕН? 

Наверняка библиотечные функции были тогда переписаны на ассемблер для БЭСМ. Ничего не осталось. 

Фрагменты генерируемого кода можно видеть в файле pcc/table.c. Там некая параметризованная таблица. К примеру, извлечение байта по указателю char *:

UNARY MUL,      A|C,
        A,              TANY,
        SANY,           TC,
                NAREG|NASL,     RLEFT|RESCC,
                " aex; atia; asy 1024; aax #0xff;", 

Исходно указатель char* находится на сумматоре. Извлечение байта выполняется за четыре команды:
aex       - побитовое сравнение с нулём, при этом сумматор копируется в регистр РМР
atia      - извлечение на сумматор слова по адресу на сумматоре
asy 1024  - сдвиг сумматора вправо на количество, указанное в старших разрядах РМР
aax #0xff - побитовое И, выделение байта

А вот инкремент байтового указателя, находящегося в памяти: char *ptr; ptr++.

INCR,           FOREFF,
        AWD,            TPTRTO|TC,
        SONE,           TINT,
                NAREG,          RESC1|RESCC,
                " xta UL; arx #'2; atx AL;",

Требуется три команды.
xta UL   - считываем указатель на сумматор
arx #'2  - прибавляем бит 62 циклически, с переносом в младшие разряды
atx AL   - записываем обратно

 
Параметры функций передавались ровно так же в стеке. Но запихивались не в обратном порядке, а в прямом: от первого параметра к последнему. Это позволяло функциям с переменными числом параметров типа printf() легко получить первый параметр. Потому что стек у нас растёт в другую сторону
Не понял, если первый параметр /*const char *format*/ запихивается первым, то в стеке он в глубине, и непонятно на которой.
???

Кажется, в каком-то регистре ещё передавалось количество параметров. Суть в том, что параметры в стеке должны лежать в "прямом" порядке, иначе printf() не сумеет по ним правильно пройтись. По традиции va_arg() делает инкремент указателя, а не декремент.

Michael Yaroslavtsev

unread,
Feb 28, 2025, 8:16:49 PMFeb 28
to be...@googlegroups.com
On Fri, Feb 28, 2025 at 2:45 PM Serge Vakulenko <serge.v...@gmail.com> wrote:
Вообще-то исходники компилятора Си для Э-1КБ сохранились, так что можете посмотреть на соглашение вызовов.

И для БЭСМ-6 компилятор Си тоже имелся. С его помощью Андрей Основич и Володя Молчанов в Новосибирске даже умудрились затащить Unix v6 на реальную БЭСМ в качестве демонстрации идеи. Тот компилятор, увы, канул в лету.
Коля Молчанов. Володя тогда в телевизоре был. :)
Для полноты картины надо ещё отметить компилятор Димочки Володина для Э1-КБ.
Он тоже был сделан из Джонсоновского PCC и генерировал код на ассемблере Стаса Рачинмкого (этот тот, на котором был написан ДВС).
На этом компиляторе я в своё время написал
  • начальный загрузчик, который, собственно и загружал ОС с диска. Также он умел копировать ленты и диски.
  • драйвер стандартного канала в ДВС.
В отличие от Серёжиного, в Димочкином компиляторе строки были big-endian.
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/besm6/5c049dca-bd60-4417-9c96-e6ba574987e6n%40googlegroups.com.


--
Thanks,
-- Michael

Serge Vakulenko

unread,
Feb 28, 2025, 8:40:04 PMFeb 28
to БЭСМ-6
Точно, Коля Молчанов, сорри.
Володя Молчанов это другой чувак, в соседнем отделе тогда в курчатнике работал.

Компилятор Димы Володина активно в ИТМиВТ использовался, хорошо помню.

Строки пришлось сделать little endian, действительно. Иначе трюк со сдвигом по РМР не проходил. Я и забыл уже.

--Сергей

Leo B.

unread,
Feb 28, 2025, 9:23:27 PMFeb 28
to БЭСМ-6
On Friday, February 28, 2025 at 2:22:50 PM UTC-8 oxy...@gmail.com wrote:
Да, интересно, никогда еще компиляторов не писал :D
Лео, подскажите можно ли в dispak-e провалить чисто код сгенерированный например FORTANом?  
Понятно что число команд, но хотяб, чтоб как то потом сравнить, свое поделие с GDR и FOREX.
Чтоб выкинуть исполнение транслятора и экстра-кодов, хотя их бы отдельно посчитать?

Я бы просто модифицировал для своих личных целей симулятор dispak, добавив отработку каких-нибудь экстракодов с произвольными неиспользуемыми номерами (например, 00 077 0000 и 00 077 0001) как признаков включения-выключения подсчета количества команд, и написал бы на ассемблере процедуры, выполняющие эти экстракоды, чтобы можно было вызывать их из Фортрана.

Работа с эффективным (не требующим деления на 6) указателем на байт на БЭСМ-6 делается с помощью слова, в младших разрядах которого адрес слова, в котором находится байт, а в разрядах порядка - сдвиг, необходимый для получения нужного байта в младших разрядах.
Тогда операция  *p будет состоять из 4 команд WTC p, XTA, ASX p, AAX =377, что достаточно дешево, чтобы не требовать вызова процедуры.
Запись *p = c в общих чертах делается так:
XTA mask (таблица анти-сдвигов)
ASX p
(выделение младших разрядов здесь не нужно, поскольку операция ASN ниже игнорирует ненужные разряды)
ATI 14 (рабочий регистр = насколько двигать младший байт влево)
WTC p
XTA 
ASX p
AEX c (теперь младший байт сумматора - xor старого и нового значения)
AAX =377 
14, ASN (сдвинули его влево)
WTC p
AEX (наложили на старое слово)
WTC p
ATX (записали результат)

Это уже достаточно длинно для библиотечной рантайм-процедуры

 Инкремент-декремент делается в той же манере с использованием условного перехода по старшему разряду слова после установки группы умножения (или ручной, или после команд коррекции порядка).

Leo

Alex Loktionoff

unread,
Mar 1, 2025, 4:13:44 AMMar 1
to БЭСМ-6
Посмотрев код генерируемый GDR FORTRANом прихожу к выводу, что M7 используется для всех функций. Причем каждая функция его видимо сохраняет в какой-то фортрановский глобальный стек , UJ  , F/SАVЕ, а , UJ  , F/SRЕТ предполагаю М7 восстанавливал. Никакой советский фортран не позволял определять вложенные функции, поэтому M7 был единственной базой можно спокойно обозвать $gp. Но использовался он не как сейчас - таблица глобальных переменных, чтоб сделать код перемещаемым - COMMON структуры передавались как абсолютный адрес и непосредственно загружались в первый свободный индексный регистр: 

              1 , VТМ , *SНАRЕ

              1 , А+Х , I-*SНАRЕ

              1 , АТХ , I-*SНАRЕ

А просто чтоб сделать компиляцию каждой фортрановской функции отдельным обьектником так сказать, каждая функция имела свои статические переменные адресуемые своим М7.
Но есть и кое-что общее, что меня сбоило с толку в RISC процессорах один регистр резервируется под $gp или $gop, чтоб можно было считывать адреса и частые константы одной командой используя короткое смещение относительно таблицы GOP. Адресация через M7 тоже позволяет зарезервировать переменные функции по любому адресу и адресоваться даже 12бит смещением коротких команд.

Но получается паскаль, который на первый взгляд несовместимый по генерируемому коду, потому как использует М8 как базу. На самом деле очень даже совместимый, в смысле паскаль +Е мог быть свободно вызван из фортрана. Ведь +Е функции сохраняли М1..М7 регистры, нужные фортрану, а остальное фортрану ненужно. 

С - вершина стека/сумматор        //a0 %a %fa
Рмр-регистр млдших разрядов       //a1 %b %fb

М0 - 0 аппарантый ноль            //x0 %zero
М1 - обычно указатель в массиве   //s0 %
М2 - обычно счетчик 1го цикла     //s1
М3 - ... тоже что и выше ...      //s2
М4 - 
... тоже что и выше ...      //s3
М5 - 
... тоже что и выше ...      //s4
М6 - 
... тоже что и выше ...      //s5
М7 - база переменных и констант   //s6 %gp
М8 - временный                    //t1
М9 - временный                    //t2
М10 - временный                   //t3
М11 - временный                   //t4
М12 - временный                   //t5

М13 - адрес возврата              //ra
М14 - очень временный             //t6
M15 - стек                        //sp

С   - регистр модификации адресов //t7 %c
      супер временный

Alex Loktionoff

unread,
Mar 1, 2025, 5:05:53 AMMar 1
to БЭСМ-6
Да еще, так как стек растет в верх, то для реализации на С функций с переменным количеством параметров и чтоб va_start() va_arg() работали надо либо пихать параметры с права на лево и реализовывать va_arg() как декремент адреса, либо с лева на право, но еще пихать количество параметров. Надо с этим как-то определиться. Бинарников скомпилированных С компилятором я полагаю не осталось? Тогда может постараться добиться полной совместимости с Паскалем и Фортраном? Ваши предложения относитально порядка и переменного количества?
суббота, 1 марта 2025 г. в 10:13:44 UTC+1, Alex Loktionoff:

Leo B.

unread,
Mar 1, 2025, 1:40:25 PMMar 1
to БЭСМ-6
Я как-то писал, что при реализации Паскаля остановились в шаге от varargs: https://besm6.dreamwidth.org/25586.html

Бинарников, скомпилированных из С для БЭСМ-6, не осталось.

Поскольку, в отличие от старого С, всегда известно, фиксированное или переменное количество аргументов у функции, можно делать практически совместимо с Паскалем.

Leo

Michael Yaroslavtsev

unread,
Mar 1, 2025, 4:04:16 PMMar 1
to be...@googlegroups.com
On Sat, Mar 1, 2025 at 10:40 AM Leo B. <leo...@gmail.com> wrote:
Я как-то писал, что при реализации Паскаля остановились в шаге от varargs: https://besm6.dreamwidth.org/25586.html

Бинарников, скомпилированных из С для БЭСМ-6, не осталось.
В архиве текстов ДВС есть printf.txt, сгенерированный Володинским компилятором. Исходный текст там тоже присутствует в комментариях. 
--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/besm6/0e54c79c-90d1-4293-850b-d712868cec6en%40googlegroups.com.


--
Thanks,
-- Michael

Alex Loktionoff

unread,
Mar 1, 2025, 4:35:16 PMMar 1
to БЭСМ-6
можете тут вклеить МАДЛЕН вот этой функции как пример соглашения? думаю так будет проще кто сюда заглянет

function foo(n:integer; function bar:real; a, b, c:real):real;

begin

case n of

0: foo := bar;

1: foo := bar(a);

2: foo := bar(a, b);

3: foo := bar(a, b, c)

end

end;


суббота, 1 марта 2025 г. в 19:40:25 UTC+1, Leo B.:
Я как-то писал, что при реализации Паскаля остановились в шаге от varargs: https://besm6.dreamwidth.org/25586.html

Бинарников, скомпилированных из С для БЭСМ-6, не осталось.

Поскольку, в отличие от старого С, всегда известно, фиксированное или переменное количество аргументов у функции, можно делать практически совместимо с Паскалем.

Leo

On Saturday, March 1, 2025 at 2:05:53 AM UTC-8 oxy...@gmail.com wrote:
Да еще, так как стек растет в верх, то для реализации на С функций с переменным количеством параметров и чтоб va_start() va_arg() работали надо либо пихать параметры с права на лево и реализовывать va_arg() как декремент адреса, либо с лева на право, но еще пихать количество параметров. Надо с этим как-то определиться. Бинарников скомпилированных С компилятором я полагаю не осталось? Тогда может постараться добиться полной совместимости с Паскалем и Фортраном? Ваши предложения относитально порядка и переменного количества?
суббота, 1 марта 2025 г. в 10:13:44 UTC+1, Alex Loktionoff:
... 

Serge Vakulenko

unread,
Mar 1, 2025, 4:53:57 PMMar 1
to БЭСМ-6
On Saturday, March 1, 2025 at 1:04:16 PM UTC-8 BOPOHOK wrote:
В архиве текстов ДВС есть printf.txt, сгенерированный Володинским компилятором. Исходный текст там тоже присутствует в комментариях. 

Michael Yaroslavtsev

unread,
Mar 2, 2025, 12:59:38 AMMar 2
to be...@googlegroups.com
Ещё один файл в том же архиве, который может представлять интерес, это crenex.txt (C runtime entry/exit). Сколько я помню, это набор прологов и эпилогов для сишных функций. 

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/besm6/ca906d55-6a57-4219-87fa-05997b8f43efn%40googlegroups.com.


--
Thanks,
-- Michael

Leo B.

unread,
Mar 2, 2025, 3:27:40 AMMar 2
to БЭСМ-6
On Saturday, March 1, 2025 at 1:35:16 PM UTC-8 oxy...@gmail.com wrote:
можете тут вклеить МАДЛЕН вот этой функции как пример соглашения? думаю так будет проще кто сюда заглянет

Без объяснения это будет длинно и непонятно, а чтобы понять, как объяснять, нужно потратить несколько дней на эксперименты.
Самый простой пример (вызов аргумента-процедуры без параметров):

00007 2 1 PROCEDURE E; EXTERNAL;
00007 3 1 PROCEDURE P(PROCEDURE F);
00007 4 3 BEGIN
00010 5 3 E;
00012 6 3 F;
00016 7 2 END;

Превращается в

 *0007B :15, ATX ,3      смещение 7 строка 4: вход в процедуру
         14, VJM ,P/2    второго уровня
------
         15, UTM ,2      смещение 10 строка 5: вызов
         13, VJM ,E      внешней процедуры
          7, MTJ ,2      восстановление указателя фрейма
          8, VTM ,*0035B и указателя на блок констант
------
           , XTA ,       смещение 12 строка 6: вызов процедуры-аргумента
         15, ATX ,6      записали 0 куда-то выше стека
          2, UTC ,3      установили адрес слова-указателя на переданный параметр
         10, VTM ,       на регистр 10
         13, VJM ,P/B7   функция вызова процедуры-аргумента
          7, MTJ ,2      восстановление
          8, VTM ,*0035B регистров
------
           , UJ ,P/E            смещение 16 строка 7: выход
 
Вызов же процедуры P сопровождается кучей дополнительного кода, который нужно анализировать отдельно. Это, насколько я понимаю, довольно редкое, если не уникальное решение для компиляторов Паскаля: более простые просто не позволяли передавать процедуры и функции как параметры,  а реализующие стандартный язык требовали объявления полного прототипа функции-аргумента и не нуждались в особых способах их вызова.

Alex Loktionoff

unread,
Mar 2, 2025, 7:41:58 AMMar 2
to БЭСМ-6
Да интересный ассемблер, очень похож на современный, только с ИТМ сокращениями :(
Есть ли готовый скрипт, чтоб ИТМ преобразовать в МАДЛЕН? буду благодарен

Хотя таким путем мы не пойдем, попробую реализовать 100%  совместимое соглашение с паскалем.
Но для документирования думаю стоит приложить цитату из https://www.besm6.org/sources/dvs/printf.txt
Как пример соглашения вызовов ни с чем не совместимое  'СВС-Б Си-компилятор. (C) 1988,1989 Д. Володин.'

* Определения имен регистров

r1# экв 01h

r2# экв 02h

r3# экв 03h

r4# экв 04h

r5# экв 05h

r6# экв 06h

r7# экв 07h

r8# экв 08h

r9# экв 09h

ra# экв 0Ah

fp# экв 0Bh

ap# экв 0Ch //указатель на аргументы /*база стекового фрейма?*/

lr# экв 0Dh //М13 регистр возврата

wr# экв 0Eh //М14 супер временый

sp# экв 0Fh //М15 указатель стека


Из кода видно, что последним параметром в аккумуляторе было количество параметров, даже для функций с фиксированным количеством аргументов:

:;      msg_size = sprintf(string, fmt, &args);

 сч =string

 счм fmt

 сдп 3

 нтжд 

 счм =args

 счм =3   

 пв sprintf(lr#)  


не понял что означают ra# fp#


и непонятно как делался возврат из функции:

 23 entry# внеш '$CENAA'

 24 exit# внеш '$CEXAA'

суббота, 1 марта 2025 г. в 22:53:57 UTC+1, serge.v...@gmail.com:

Michael Yaroslavtsev

unread,
Mar 2, 2025, 2:09:38 PMMar 2
to be...@googlegroups.com
On Sun, Mar 2, 2025 at 4:42 AM Alex Loktionoff <oxy...@gmail.com> wrote:
Да интересный ассемблер, очень похож на современный, только с ИТМ сокращениями :(
Есть ли готовый скрипт, чтоб ИТМ преобразовать в МАДЛЕН? буду благодарен
А разве есть МАДЛЕН для Эльбруса-Б? Этож не для БЭСМ-6 код. 
ra# - регистр номер "а" (9+1=a(hex))
fp# - frame pointer 


и непонятно как делался возврат из функции:

 23 entry# внеш '$CENAA'

 24 exit# внеш '$CEXAA'

Это пролог и эпилог. Я уже упоминал файл crenex.txt. Там это определено. 
суббота, 1 марта 2025 г. в 22:53:57 UTC+1, serge.v...@gmail.com:
On Saturday, March 1, 2025 at 1:04:16 PM UTC-8 BOPOHOK wrote:
В архиве текстов ДВС есть printf.txt, сгенерированный Володинским компилятором. Исходный текст там тоже присутствует в комментариях. 

--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/besm6/699e0976-f5a5-4aef-beed-c370fab6f53bn%40googlegroups.com.


--
Thanks,
-- Michael

Serge Vakulenko

unread,
Mar 2, 2025, 2:55:23 PMMar 2
to БЭСМ-6
On Sunday, March 2, 2025 at 11:09:38 AM UTC-8 BOPOHOK wrote:
On Sun, Mar 2, 2025 at 4:42 AM Alex Loktionoff <oxy...@gmail.com> wrote:
Да интересный ассемблер, очень похож на современный, только с ИТМ сокращениями :(
Есть ли готовый скрипт, чтоб ИТМ преобразовать в МАДЛЕН? буду благодарен
А разве есть МАДЛЕН для Эльбруса-Б? Этож не для БЭСМ-6 код. 

Диспаковского Мадлена не существовало для Э1-КБ. Но сохранился юниксный ассемблер из проекта микро-БЭСМ. Он понимает в том числе и мадленовские мнемоники.


--Сергей

Alex Loktionoff

unread,
Mar 3, 2025, 2:08:34 PMMar 3
to БЭСМ-6
Ой, не так сказал, я имел ввиду например AWK скрипт готовый, который вместо ИТМ мнемоник подставляет MADLEN мнемоники.
Конечно можно самому состряпать выдрав из as.c, но спросил на всякий случай может готовый есть?
Мне чтоб просто читать понятней было.

воскресенье, 2 марта 2025 г. в 20:55:23 UTC+1, serge.v...@gmail.com:

Alex Loktionoff

unread,
Mar 3, 2025, 2:10:21 PMMar 3
to БЭСМ-6
интересно, есть указатель на аргументы и еще и фрейм? разве это не одно и тоже? 
Положительное смещение от фрейма - одно и отрицательное другое, зачем второй регистр?

воскресенье, 2 марта 2025 г. в 20:09:38 UTC+1, BOPOHOK:

Alex Loktionoff

unread,
Mar 3, 2025, 2:12:11 PMMar 3
to БЭСМ-6
Да, Вы правы, практически первая строчка и сразу на повал!

        14, VJM ,P/2    второго уровня

Что тут означает P/2 ? Как это работает?
воскресенье, 2 марта 2025 г. в 09:27:40 UTC+1, Leo B.:

Alex Loktionoff

unread,
Mar 3, 2025, 2:17:45 PMMar 3
to БЭСМ-6
Леонид, я думаю что это не offtopic, как-то Вы предлагали хитрый способ передачи количества аргументов во втором полуслове, сразу за  CALL. Думаю тоже важно в этой теме привести работающий  пример. Подскажите как после CALL объявить константу? У меня с первого раза не вышло:

 МАIN  :    , NАМЕ,

 АСС*  :    , LС  , 1

 РRОGRА:    ,ЕNТRУ,

    , LOC , 1000B

 MAIN:    7 , VТМ , *С

    , XTA , =1234567

            , САLL, OKHO

  13, VJM , *AL00000

    , Z00 , 12345B

 *AL00000:13, XTA , -1

    , ATI , 8

            , САLL, OKHO

    , CALL, STOP*

 *C      :  , BSS ,

    , ЕND ,

...

 LIВRАRУ ОТ  26.02.82 М3

           *NО LОАD LISТ

           *МАIN МАIN

           *ЕХЕСUТЕ

0000000001234567          006   03122 00000 06614 73254 03271 10012 01010 26515 03656 00610 00000 77774 01002 00770 75402

6710100402200000          006   03122 00000 06614 73254 03271 10012 01010 00000 03656 00610 00000 77774 01006 00770 75402

 КОНЕЦ ЗАДАЧИ

 00411: 00 074 0000 *74


Michael Yaroslavtsev

unread,
Mar 3, 2025, 3:55:47 PMMar 3
to be...@googlegroups.com
On Mon, Mar 3, 2025 at 11:10 AM Alex Loktionoff <oxy...@gmail.com> wrote:
интересно, есть указатель на аргументы и еще и фрейм? разве это не одно и тоже? 
Положительное смещение от фрейма - одно и отрицательное другое, зачем второй регистр?
Это надо у Димы спрашивать. Он на эту группу подписан, вроде.
Может, потому, что количество фактических параметров (аргументов) статически не известно? 
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/besm6/2a4efc82-131f-49a4-8ecd-c3ac7187ab99n%40googlegroups.com.


--
Thanks,
-- Michael

Leo B.

unread,
Mar 3, 2025, 4:43:25 PMMar 3
to БЭСМ-6
On Monday, March 3, 2025 at 11:17:45 AM UTC-8 oxy...@gmail.com wrote:
Леонид, я думаю что это не offtopic, как-то Вы предлагали хитрый способ передачи количества аргументов во втором полуслове, сразу за  CALL. Думаю тоже важно в этой теме привести работающий  пример. Подскажите как после CALL объявить константу? У меня с первого раза не вышло:

Мадлен шибко умный. Он знает, что команда, следующая за VJM, должна находиться в следующем слове, потому что возврат из подпрограммы происходит на следующее слово. Поэтому, если нужно, чтобы VJM находилась строго в левом полуслове, а за ней была константа, нужно писать не мнемонику, а код операции (обратите внимание на двоеточие в первой строке - это выравнивание на границу слова):

 : 13,Z31,proc
  ,Z00,const

Что же касается оптимальной кодогенерации, то на этот счет есть пословица  Premature optimization is the root of all evil.

 Leo
It is loading more messages.
0 new messages