Эта страница содержит листинг маленькой программы на Алголе, демонстрирующий компиляцию и выполнение программ на БЭСМ-6 в пакетном режиме, а также передачу параметров по имени в Алголе.

Мониторная система "Дубна" была разработана в Объединённом Институте Ядерных Исследований в городе Дубна Московской области.

Ниже приведено содержимое входного пакета перфокарт. Три первые строки (паспорт задачи) обрабатываются операционной системой ДИСПАК (диспетчер пакетов). Они задают шифр пользователя (419999), используемую систему обработки заданий (буква З - признак заказа стандартной системы, СХ - код системы) и лимит времени (30 секунд). ЕЕ - признак конца паспорта задачи, а B1A3 - признак ввода двоичных образов перфокарт. Зачем это нужно, я объясню потом.


ШИФР 419999 ЗСХ^
ВРЕМ 30^
EEВ1А3
*name алгол
*     управляющие инструкции начинаются со *
*     первая инструкция должна быть '*name'
*     звёздочка и 5 пробелов обозначают комментарий
*     значащими являются 5 символов после *
*
*некорректные инструкции игнорируются, но печатается предупреждение
*
*algol      <-- последующие неуправляющие строки
*               будут переданы транслятору с алгола
*               (по умолчанию - с фортрана)
*
*punch      <-- запрашивает вывод объектных модулей на перфокарты
*
*     если не присутствует '*no list', печатается аннотированный
*     листинг программы
*

'begin'
	'comment'
	эта программа демонстрирует передачу параметров по имени ;
	'integer' x, y;
	'procedure' sub(a, b);
	'integer' a, b;
	'begin'
		x := 5;
		print(''First in sub : a='', a, '' b='', b, newline);
		a := 7;
		print(''Second in sub: a='', a, '' b='', b, newline);

	'end';
	x := 7;
	y := 11;
	sub(y, x + y); 
	print(''After sub    : x='', x, '' y='', y, newline);
'end'
'eop'
*     как только встречается неуправляющая строка, соответствующий
*     транслятор получает управление и читает строки, пока не решит
*     остановиться, или пока не будет достигнут конец файла
*
*     инструкция '*execute' вызывает загрузку и выполнение программы
*     входные данные, если есть, задаются после *execute
*
*     если не присутствует '*no load list', печатается таблица символов
*execute
*end file
``````
ЕКОНЕЦ

Карта *end file - последняя, которую читает мониторная система "Дубна"; следующая карта, представленная здесь шестью обратными кавычками, на самом деле была специальной - картой "Диспетчерский конец", обозначающей конец ввода образов перфокарт. У этой карты были пробивки во всех позициях в колонках 1 и 41.

Последняя карта обозначает конец ввода для ОС ДИСПАК: Е - это признак конца сегмента данных, а "КОНЕЦ" - это совсем конец.

А вот и результат:




                                                      26.07.03 М1

  М О Н И Т О Р-8 0  (3.6)   26.11.83М       (  МС " Д У Б Н А " ИАЭ  )             ШИФР    419999000000

                     ЖЖЖ    ЖЖЖ ЖЖЖЖЖ  ЖЖЖ    ЖЖЖ
                    Ж   Ж  Ж  Ж Ж     Ж   Ж  Ж  Ж
                    Ж   Ж  Ж  Ж Ж     Ж   Ж  Ж  Ж
                    Ж   Ж  Ж  Ж Ж     Ж   Ж  Ж  Ж
                    Ж   Ж  Ж  Ж Ж     Ж   Ж  Ж  Ж
                    ЖЖЖЖЖ  Ж  Ж Ж     Ж   Ж  Ж  Ж
                    Ж   Ж Ж   Ж Ж      ЖЖЖ  Ж   Ж


*NАМЕ АЛГОЛ
           *     УПРАВЛЯЮЩИЕ ИНСТРУКЦИИ НАЧИНАЮТСЯ СО *
           *     ПЕРВАЯ ИНСТРУКЦИЯ ДОЛЖНА БЫТЬ '*NАМЕ'
           *     ЗВ0ЗДОЧКА И 5 ПРОБЕЛОВ ОБОЗНАЧАЮТ КОММЕНТАРИЙ
           *     ЗНАЧАЩИМИ ЯВЛЯЮТСЯ 5 СИМВОЛОВ ПОСЛЕ *
           *
           *НЕКОРРЕКТНЫЕ ИНСТРУКЦИИ ИГНОРИРУЮТСЯ, НО ПЕЧАТАЕТСЯ ПРЕДУПРЕЖДЕНИЕ
ILLЕGАL SУSТЕМ САRD
           *
           *АLGОL      <-- ПОСЛЕДУЮЩИЕ НЕУПРАВЛЯЮЩИЕ СТРОКИ
           *               БУДУТ ПЕРЕДАНЫ ТРАНСЛЯТОРУ С АЛГОЛА
           *               (ПО УМОЛЧАНИЮ - С ФОРТРАНА)
           *
           *РUNСН      <-- ЗАПРАШИВАЕТ ВЫВОД ОБЪЕКТНЫХ МОДУЛЕЙ НА ПЕРФОКАРТЫ
           *
           *     ЕСЛИ НЕ ПРИСУТСТВУЕТ '*NО LISТ', ПЕЧАТАЕТСЯ АННОТИРОВАННЫЙ
           *     ЛИСТИНГ ПРОГРАММЫ
           *

26.07.03 М1 А L G О L - Г Д Р (25.01.79)СВ-К 1. 'ВЕGIN' 2. 'СОММЕNТ' 3. ЭТА ПРОГРАММА ДЕМОНСТРИРУЕТ ПЕРЕДАЧУ ПАРАМЕТРОВ ПО ИМЕНИ ; 4. 'INТЕGЕR' Х, У; 5. 'РRОСЕDURЕ' SUВ(А, В); 6. 'INТЕGЕR' А, В; 7. 'ВЕGIN' 8. Х := 5; 9. РRINТ(''FIRSТ IN SUВ : А='', А, '' В='', В, NЕWLINЕ); 10. А := 7; 11. РRINТ(''SЕСОND IN SUВ: А='', А, '' В='', В, NЕWLINЕ); 12. 'ЕND'; 13. Х := 7; 14. У := 11; 15. SUВ(У, Х + У); 16. РRINТ(''АFТЕR SUВ : Х='', Х, '' У='', У, NЕWLINЕ); 17. 'ЕND' 18. 'ЕОР' LINЕ АDDRЕSSЕS(ОСТАL) 1 2 3 4 5 6 7 8 9 0 1 - 10 00001 00001 00003 00003 00004 00015 11 - 18 00016 00030 00032 00033 00042 00051 00051 >>> РRОGRАМ <<< LЕNGТН: 65 (00101) ТIМЕ: 0,00 SЕС. (СР: 0,00 SЕС.) АLGОL-СОМРILЕR 16.IV.75 * КАК ТОЛЬКО ВСТРЕЧАЕТСЯ НЕУПРАВЛЯЮЩАЯ СТРОКА, СООТВЕТСТВУЮЩИЙ * ТРАНСЛЯТОР ПОЛУЧАЕТ УПРАВЛЕНИЕ И ЧИТАЕТ СТРОКИ, ПОКА НЕ РЕШИТ * ОСТАНОВИТЬСЯ, ИЛИ ПОКА НЕ БУДЕТ ДОСТИГНУТ КОНЕЦ ФАЙЛА * * ИНСТРУКЦИЯ '*ЕХЕСUТЕ' ВЫЗЫВАЕТ ЗАГРУЗКУ И ВЫПОЛНЕНИЕ ПРОГРАММЫ * ВХОДНЫЕ ДАННЫЕ, ЕСЛИ ЕСТЬ, ЗАДАЮТСЯ ПОСЛЕ *ЕХЕСUТЕ * * ЕСЛИ НЕ ПРИСУТСТВУЕТ '*NО LОАD LISТ', ПЕЧАТАЕТСЯ ТАБЛИЦА СИМВОЛОВ *ЕХЕСUТЕ РRОGRАМ 01000 А/РRОСRТ Е 01512 МОN*IТОR 02051 А/SТОР 01101 А/РАRСОN Е 01535 РLВЕG Е 02060 А/SТАRТ Е 01105 А/РАRVАR Е 01544 РLСLО Е 02066 А/DRUСК 01161 А/РАRРАR Е 01555 АSАVЕ* Е 02074 А/IРRI Е 01213 А/РАRVАL Е 01564 SАVЕ*НID Е 02101 А/RРRI Е 01245 А/РАRЕХР Е 01571 FОR*АLL Е 02116 А/ВРRI Е 01301 А/РАRLАВ Е 01602 ОН* Е 02120 А/SРRI Е 01310 А/РАRSТR Е 01611 ОН*1 Е 02125 А/LРRI Е 01325 SТОР* 01622 ISО/GОSТ 02134 А/NLINЕ Е 01371 А/АRRD/К 01643 РRINТ8* 02203 А/NРАGЕ Е 01373 А/АRRD/V Е 01646 СВОБОД 02251 А/I*ISО Е 01446 SТОРFLG* С 01736 А/R*ISО Е 01451 РRINТ8 01737 А/САLLР 01504 РRINТ80 Е 01737 А/САLLS Е 01505 А/ЕRRОR 01775 FIRSТ IN SUВ : А= 11 В= 16 SЕСОND IN SUВ: А= 7 В= 12 АFТЕR SUВ : Х= 5 У= 7

Но это ещё не всё! Помните, мы запросили вывод объектного кода на перфокарты? Было отперфорировано 7 карт; вот как они выглядят (обратите внимание на первую колонку каждой карты - пробивки в них не соответствуют никакому символу и служат признаком объектного кода):

Эти "двоичные модули" можно было использовать во входных пакетах вместо исходного кода, экономя процессорное время. Для этого и нужен режим ввода двоичных образов перфокарт.