Новый Си компилятор для БЭСМ-6

35 views
Skip to first unread message

Serge Vakulenko

unread,
Jul 25, 2026, 6:20:02 PMJul 25
to БЭСМ-6
Для энтузиастов бэсмостроения: разработан Си компилятор, порождающий код для БЭСМ-6. Входной язык соответствует стандарту Си11. Порождаемый ассемблерный код может быть в трёх форматах: Madlen, БЕМШ или Unix. В состав компилятора входит рантайм библиотека для беззнаковой арифметики, указателей и прочего. 

Проект находится на Гитхабе: besm6/c-compiler

К примеру, возьмём классический Hello World, слегка адаптированный к мониторной системе Дубна:

    $ cat hello.c
    extern int printf(const char *fmt, ...);
    void program()
    {
        printf("Приветик!\n");
    }


Превратим его в Мадлен:

    $ b6cc -Smadlen hello.c
    $ cat hello.madlen
    c
      program:   ,name,
        b/ret:   ,subp,
                 ,its, 13
                 ,call, b/save0
              14 ,vtm, *str0
                 ,ita, 14
                 ,aox, =:64
              14 ,vtm, -1
                 ,call, printf
                 ,uj, b/ret
        *str0:   ,log, 3405015120442524
                 ,log, 3224544102400000
                 ,end,


Листинг запуска посредством dubna смотрите в приложенном файле hello.lst.

А вот тот же пример, скомпилированный в БЕМШ:

    $ b6cc -Sbemsh hello.c
    $ cat hello.bemsh
    ввд$$$
    *
    progra старт 1
    _save0 внешн ._save0
    printf внешн .printf
    _ret   внешн ._ret
           счим 13
           пв _save0(13)
           уиа _str0(14)
           счи 14
           или =в'6400000000000000'
           уиа -1(14)
           пв printf(13)
           пб _ret
    _str0  конд в'3405015120442524'
           конд в'3224544102400000'
           финиш
    квч$$$
    трн$$$
    0-0
    блмак
    бтмалф
    кнц$$$


Имеется коллекция документации.

Про машину БЭСМ-6:
  • Besm6_Data_Representation.md - Как каждый тип данных Си хранится в 48-битном слове
  • Besm6_Instruction_Set.md - Система команд БЭСМ-6
  • Besm6_Calling_Conventions.md - Как функции вызывают друг друга: регистры, b/save, b/ret
  • KOI7_Encoding.md - Кодировка КОИ-7 и преобразование в ASCII, выполняемое компилятором
  • Madlen.md - Ассемблер «Мадлен» (монитор «Дубна»)
  • Bemsh.md - БЕМШ, изначальный автокод 1967 года с русскими мнемониками
  • Besm6_Unix_Assembler.md - Юниксный ассемблер
Про компилятор:
  • Technical_Reference.md - Структура исходных текстов, все компоненты, система сборки и тесты
  • Learn_From_This_Project.md - Пошаговый разбор того, как устроен компилятор и почему он реализован именно так
  • Tests_From_The_Book.md - Организация набора тестов — руководство для начинающих
  • C_Grammar.md - Грамматика языка Си и её отображение на рукописный синтаксический анализатор
  • Type_Coercion.md - Правила языка Си для неявного приведения типов в выражениях
  • Type_Sizes_Alignment.md - Размеры и выравнивание типов для целевой машины
  • TAC_Optimization.md - Машинно-независимые проходы оптимизации трёхадресного кода
  • Peephole_Rewrites.md - Оптимизация машинного кода для БЭСМ-6
  • Memory_Allocation.md - Собственный аллокатор памяти компилятора
  • String_Map.md - Словарь «ключ–значение», используемый для таблиц символов
  • Word_Oriented_IO.md - Как записываются двоичные файлы .ast и .tac
Про рантайм библиотеку Cи:
  • Standard_Include_Files.md - Заголовочные файлы C11, поставляемые для БЭСМ-6
  • Besm6_Runtime_Library.md - Вспомогательные подпрограммы, вызываемые сгенерированным кодом
  • Besm6_Intrinsics.md - Доступ к машинным инструкциям, которые невозможно выразить средствами языка Cи
  • Frexp_Ldexp.md - Функции frexp и ldexp, написанные на языке ассемблера
Этот Си компилятор был успешно применён для переноса Unix v7 на БЭСМ-6. Но про него я напишу отдельно.

С уважением
--Сергей Вакуленко
hello.lst

Mikhail Popov

unread,
Jul 25, 2026, 8:25:35 PMJul 25
to be...@googlegroups.com
Сергей, хорошо сделано!  Вспоминаю 1983 год, Паремский подбивал сделать компилятор из PDP-шного, но тогда обломались.
Успехов. 


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

Serge Vakulenko

unread,
Jul 26, 2026, 1:48:43 AMJul 26
to БЭСМ-6
Спасибо, Миша!
Эх, в 83-м году такой компилятор на бэсм6 дал бы мощный толчок. Но не сложилось. Через 40 лет навёрстываем. 😀

--Сергей 
Reply all
Reply to author
Forward
0 new messages