Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги из ГПНТБ / Килов Х.И. Фортран для БЭСМ-4 (МИФ) учеб. пособие

.pdf
Скачиваний:
5
Добавлен:
23.10.2023
Размер:
5.14 Mб
Скачать

- 70 -

только посредством встроешюй функции PL0AT. 2.7,1.22. Нет арифметических функций.

2.7.2.Дополнения.

2.7.2.1.Введены операторы #ртт0н , управляющие процессом компиляции.

2.7.2.2.Введена возможность использования команд в кодах машины - добавлены автокод (ассемблер) и возможность об­ ращений к стандартным программам в системе ИС-2М.

2.7.2.3.Введена возможность отладки, реализуемая с по­ мощью оператора отладочной печати.

2.7.2.4.Введена возможность использования матриц (двумер­ ных массивов) с переменной структурой, т.е. переменным количеством элементов в строке.

2.7.2.5.Введена возможность указания абсолютных адресов в описаниях проотых переменных и массивов.

2.7.2.6.Введена возможность при описании массивов указы­ вать вид памяти для их размещения (1.ЮЗУ-0, М03У-1, дина­ мическая память).

2.7.2.7.Введена возможность накопления на буфер печатае­ мого на АЦПУ материала и, тем самым, экономии времени, т. к. печать из буфера может происходить одновременно с ра­ ботой процессора.

2.7.2.8.Введена возможность печати переменного количест­ ва вертикальных интервалов, 2.7,2*9. Введена возможность вывода на узкую печать.

2.7.2.10.Любой двумерный массив считается эквивалентным одномерному массиву с тем же идентификатором, т.е. к дву­ мерному массиву можно обращаться как к одномерному.

2.7.2.11.Введен оператор Gg_Tg_с возвратом.

2.7.2.12.Введен элемент формата5 ДЛЯ печати шифров, т.е. непереведенных десятичных чисел в двоично-десятичном коде.

2.7.2.13.В операторе присваивания может быть несколько левых частей.

2.7.2.14.В таблицу символов добавлены заглавные буквы русского алфавита.

-71 -

2.8.Некоторые общие замечания.

Более половши времени своей работы программа зат­

рачивает на выполнение менее 4 процентов своих операторов. Более 25 процентов времени своей работы программа затрачи­

вает на редактирование при вводе/выводе. Эти данные были получены в результате исследования -большого количества

ФОРТРАП-npoipaMMС 7 3 и,- по-видимому, характерны для любых

достаточно больших программ.

Ввиду это1"о имеет смысл оптимизировать только самые внутренние циклы и операторы ввода/вывода.

Компилятор МИФ программирует циклы с помощью регист­

ра адреса, и, когда в цикле'встречается одномерный" маосив,

индекс которого совпадает с параметром цикла, рабочая про­ грамма получается максимально короткой (такой, какой бы ее

составил квалщлщированный программист). Положение, одна­ ко, меняется в тех случаях, когда используются двумерные массивы (особенно со вторым индексом, не являющимся пара- • метром внутреннего цикла). Тем не менееследует отметить, что работа с массивами в рабочей программе ведется без по­ мощи стандартных и/или обслуживающих программ - соответст­

вующие команде непосредственно вставляются компилятором в

нужное.место рабочей программы.

Итак, всюду, где это возможно, рекомендуется исполь­ зовать одномерные, а не двумерные массивы. В частности,' МИФ позволяем и к двумерным массивам обращаться как к од­ номерным. Кроме этого, если требуется значительно оптими­ зировать самый внутренний цикл, то можно обратиться к по­ мощи автокода (ассемблера) и написать весь этот цикл (или его часть) на автокоде. Иногда таким способом время работы программы может быть уменьшено в несколько раз С 7 3 .

При программировании вывода .(печати) на АЦПУ следует самым широким образом использовать накопление на буфер. Во

время печати из буфера, происходящей во много раз медлен­

нее, чем работает центральный процессор, последний может

продолжать дальнейшее решение задачи С 4 3 .

- 72 -

Указанные возможности оптимизации, по-видимому, яв­ ляются основными. Это характерно не только для БЭСМ-4, но и для других ЭВМ.

Безусловно, существуют и другие возыо;люсти оптими­ зации wOPTPAH-программ на уровне языка. Многие из них описаны з содержательной статье [ 6 ] , в также в [.'/} и в некоторых других работах.

Некоторая информация об осуществляемой компилятором оптимизации приводится в описании компилятора. Тем не ме­ нее, иногда компилятор создает сравнительно длинные кон­ струкции (например, при программировании работы с масси­ вами ~ формальными параметрами). Полную информацию об этом кото пслучйть, рассматривая и анализируя рабочую nporp:-uvi^y, выведенную пооператорно па узкую печать.

Напоминаем: не имеет смысла оптимизировать редко работащпо части программы.

3 . Общие сведения о компиляции ФОГгРАН-программ.

£ЮРТ?АН--программа записывается на входном языке Ш Ф , *зла'.'?лъко не более чем по символов в строке, и с'боль­ шим расс.'сячмем мекду строками (для возмохашх исправле­ ний). В этшсй строке монет быть несколько операторов; ко­ нец оператора и конец строки не обязательно должны совпа­ дать.

Затем ФОРТРАН-программа сдается в перфораторную для перфорации.

Вслед за этим колода получешшх перфокарт сдается операторам БЭСМ-4 на компиляцшо и, если потребуется,счет.

Ноьшилятор хранится либо на "закрытом" магнитном барабане (например, МБ-4), либо на магнитной ленте. Перед началом ношилящи он должен быть переписан на ЫБ-О, 1.1Б-1, МБ-2. Это делает входящая в состав компилятора рбслуниаа- вдая-программа-администратор (см. 6.2. ) . Если комп лятор на магнитной ленте, то перед началом его переписи

- Т З -

на МБ-О, ЫБ-I и МБ-2 происходит проверка, не находится ли

он уже на требуемых местах. Когда компилятор находится на

нуаашх местах, происходит передача ему управления, и начи­ нается прбцесс компиляции (см. 5.).

Для вызова администратора с "закрытого" МБ или МЛ служит одна перфокарта - карта ,старта (см. 7.2.. )•Несколь­

ко команд, входящих в .ее состав, могут быть также записа­ ны на тот "закрытый".МБ, где хранятся тесты, и, тем самым,

администратор может вызываться непосредственно с пульта.

В процессе компиляции осуществляется подробный контроль ФОРТРАН-программы. Компилятор печатает на АЦПУ

информацию об обнаруженных им ошибках с указанием номера

оператора, в котором обнаружена ошибка. Список ошибок при­ водится в 4.

Если ошибок не обнаружено, то создается рабочая про­ грамма. Рабочая программа, полученная в результате компи­ ляции всей ФОРТРАН-программы, простые переменные, рабочие ячейки, находящиеся в МОЗУ-0 массивы, ИС-2Ы и рабочее по­

ле стандартных программ должны размещаться в МОЗУ, т.е.

их общая длина не должна превышать 4095 ячеек. Если это не

так, следует либо переместить часть массивов в МОЗУ-I или

динамическую память на МБ, либо разделить ФОРТРАИ-програм- му на части. Во всех этих случаях необходима новая компи­ ляция ФОРТРАН-программы.

После создания рабочей программы происходит ее выда­ ча (по желанию программиста - см. 2.6.2.5.) на узкую пе­ чать, АЦПУ или перфорацию.

Вслед за этим происходит вывод распределения памяти на узкую печать j виде:

- 74 -

где1, первая строка - начало и конец рабочей программы в

МОЗУ-0;

вторая строка - начало и конец рабочего поля ИС-2М

для размещения стандартных программ; третья строка - начало и конец массива простых пере­

менных, рабочих ячеек и массивов

МОЗУ-0; четвертая строка - начало и конец массивов МОЗУ-1;

пятая строка - начало и конец динамических массивов

на МБ (все адреса - восьмеричные). Четвертая и/или нятая строки могут отсутствовать, если лет соответствующих массивов.

После печати распределения памяти происходит останов

0.77.7777.0000.7777 После этого при нажатии на ПУСК начинается работа рабочей

программы. Предварительно следует, если нужно, установить на читающем устройстве стандартные программы, вводимые с

перфокарт, и перфокарты с вводимой информацией. Перед ра­

бочей программой работает программа старта. Она:

вызывает в МОЗУ-0 ИС-2М, если это нужно, и пересылает

ИС-2Ь! в МОЗУ-1; формирует обращение к программе РИС (см. 8.6. ) , если есть

стандартные 1лэограмш, вводимые с перфокарт;

переносит (сдвигает вверх) начало и конец рабочего поля ИС-2М; организует стандартные программы работы с динамическими

массивами, если они есть (см. 8.5. ) ; пересылает рабочую гпюграмму, начиная с ячейки 0010 или,если

имеются динамические массивы, с ячейки 0320;

и передает управление первой команде рабочей программы. Если при работе рабочей щюграммы произошел сбой (AB0CT, зацикливание и т.д.), то можно, воспользовавшись

отпечатанной пооператорно рабочей программой или распечат­ кой адресов операторов в рабочей программе, локализовать

ошибку на уровне соответствующего оператора в ФОРТРАН-

- 73 -

программе.

Когда рабочая программа выдана на перфокарты, рабо­

та по ней осуществляется как по обычной программе с уче­

том того, что она должна вводиться с ячейки 0010 и с этой же ячейки начинать свою работу.

4. Список ошибок.

Номер ошибки, печатаемый и на АЦПУ, имеет вид либо' JJ? , либо U-/.f3l . в первом случае на АЦПУ печатается ука­

занный текст ошибки. Do втором случае на АЦПУ печатается

текст ошибки с номеромJ-J , тогда как {5j служит для уточ­ нения, т.е. для более подробной характеристики данной

ошибки. Следовательно, группа ошибок oL4 имеет один общий текст, печатавши на АЦПУ, и ряд конкретных, более точных

текстов, которые упоминаются лишь в списке ошибок,

Вместо ХХХХХХ печатается конкретный идентификатор или номер формального параметра.

Кроме номера ошибки и ее текста, на АЦПУ печатается

также и номер оператора, в котором обнаружена ошибка.

1. Объекты трансляции не помещаются в МОЗУ.

1.1. Переполнен массив МОЗУ, предназначенный для размеще­ ния компилятором таблиц простых переменных, массивов, чи­ сел, меток, констант и подпрограмм.

1.2. СЛИШКОМ ДЛИННЫЙ И/ИЛИ СЛОЖНЫЙ СПИСОК Ы Т Е И Щ | , «

2.У подпрограммы или функции более 36 формальных пара­ метров.

3.для динамического массива указан абсолютный адрес.

4.Идентификатор ХХХХХХ описан дважды.

5.Элемент описания не начинается с идентификатора,

6.Неверно записан элемент описания ХССХХХ.

Элемент описания не заканчивается , или ; или в нем отсутствует один из символов / ( L <. , ) cgLS (при пер­

вой вер:ией границе, равной пулю), пли в подпрограмме первая взрхняя граница mccima-формального параметра

- 76 -

равно нулю.

6.2.Неверно записан абсолютный адрес.

6.3.Неверно записана верхняя граница массива.

6.4.(Х'Шбка в записи номера куба или указателя' динамики.

6.5.После C0LS отсутствует идентификатор или неверно указана длина массива.

6.6.Идентификатор после O0LS не является идетчщшкатором простой переменной.

7.Неверное употребление метки ХХХХХХ.

7.1.Разные операторы помечены одинаково.

7.2.Данной меткой не помечен ни один оператор (печата­ ется номер последнего оператора - END - данной программной единицы).

7.3.Слишком длинная метка (отпечатаны первые пять симво­ лов метет).

7.4.Дашшй оператор не должен быть помечен.

7.5.Нулевая метка.

7.6.За меткой не следует символ :

8.Оператор PAUSE записан неверно.

9.Оператор G0 Т0 записан неверно.

9.1.За G0 Т0 нет метки или скобки или есть пулевая метка,

9.2.3 G0 Т0 с возвратом за [ или, нет метки.

5.3.В в0 Т0 с возвратом за третьей меткой нет J или за остальными нет,

9о4. В вычисляемом Qfl Т0 за ( или , нет метки.

9.5.В вычисляемом 00 Т0 за меткой нет , или )

9.6.В вычисляемом С0 Т0 за ) нет , или за ) , пет иден­ тификатора.

9.7.В вычисляемом G0 т0 идентификатор не является простой переменной.

10.Несуществующий оператор.

11.Описание расположено после выполняемого оператора.

12.Отсутствует ;

12.I. Оператор не заканчивается { либо ошибка в записи оператора.

- 77 -

13. В подщюграыме отсутствует RETURN (печатается номер giro данной подпрограммы).

14.END не заканчивает программную единицу.

15.В программном единице нет ни одного вшюлнлег.юго опе­

ратора.

16.СЛИШКОМ ДЛИННЫЙ СПИСОК EQUIVALENCE,

17.Описание EQUIVALENCE неверно.'

17.1. Идентификатор массива в группе Е О Ж Щ . Щ ^ J m d o о т ~ сутствует, либо предварительно не описан в данной програм­

мной единице, либо является формальным параметром.

17.2. Либо массиву из описания EQUIVALENCE присвоен абсо­ лютный адрес , либо это массив с переменным количеством

столбцов, для которого указан не первый его элемент, либо это одномерный массив, который в описании EQUIVALENCE

упомянут как двумерный.

17.3.Группа описаний в EQUIVALENCE не начинается или не

заканчивается круглой скобкой или содержит только один элемент.

17.4.В группе EQUIVALENCE за идентификатором массива спи­

сок индексов не заключен в круглые скобки или неверно за­ писан .

17.5.В группе EQUIVALENCE значение индекса слишком велико, или не является целым числом.

17.6.В группе squivALEWCE тлеются элементы, принадлежащие

различным видам памяти (МОЗУ-0, МОЗУ-I, ДП),

17.7. В одной группе EQUIVALENCE указаны два элемента од­ ного и того же массива или две группы иглеют более чем один общий массив или одна группа содержит общие массивы более чем с одной из остальных групп.

18.

В основной программе отсутствует оператор ST'JfP (печа­

тается номер END основной программы).

т 9 .

Неверно написан заголовок подпрограммы.

19.1.Отсутствует идентификатор подпрограммы.

19.2.Неверно записан список формальных параметров: отсут­ ствует ( или ) или ,

-78 -

19.3.Формальный параметр не является идентификатором.

19.4.За совокупностью формальных параметров нет ;

20. У функции нет параметров.

'

21.Формальный параметр XIODXv встречается драцди.

22.Протрапслированиая программа не помещается в кубе ШЗУ,

23.Внутри подпрограмш встретилось описание другой под­ программы.

24.Оор'лалышй параметр ХХХПХ спецпфицироиаи дважды.

25.Формальный параметр (массив) ХХХХХХ спецнфищгрован

неверно (массив тлеет абсолютный адрес или является мат­ рицей с переменной структурой).

2G. Идентификатор ХХХХХХ верхней ipaiuuoj массива не фор­ мальный параметр или неверно спэцифгщпрован.

27.Нормальный параметр ХХХХХХ из списка EXTERNAL специ­ фицирован .

28.Формальный параметр ХХХХХХ встретился до описания

подпрограммы - его фактического пара!летра.

29.Описание данной подпрограмм не соответствует описа­

нию ХХХХХХ из той же группы EXTERNAL.

30.В 3XTERNAL отсутствует , или / или ; или идентифика­

тор.

31.EXTERNAL встретилось в подпрограмме пли после нее.

32.Верхняя граница массива ХХХХХХ не должна быть иден­ тификатором.

33.RETURN встретился в основной программе.

34.В подщюграмме REAL не следует за заголовком или та­

ким же оператором,

35.В группе EXTERNAL встретился идентификатор встроен­

ной функции ХХХХХХ.

36.Неверно записан заголовок цикла.

3G.I, Отсутствует метка после Dg.

3G.2. Параметр цикла имеет абсолютный адрес.

36.3.Отсутствует идентификатор параметра цикла.

36.4.Параметр данного цикла совпадает с параметром внешнего цикла.

-79 -

36.5.Параметр цикла не является простой переменной.

36.6.Отсутствует = за параметром цикла.

37.Переход извне внутрь цикла.

38.Глубина вложенных циклов больше дозволенной или

слишком много циклов.

39.Неверно записаны границы или шаг цикла.

39.1.Используется не целое число.

39.2.Число больше 4095.

39.3.Граница или шаг не число и не идентификатор.

39.4.Переменная не является простой или имеет абсолютный адрес.

39.5.Одно из чисел равно нулю.

39.6.Вслед за границей цикла отсутствует, или ;

40.Внешний цикл заканчивается раньше внутреннего цикла с

меткой ХХХХХХ.

41.Цикл заканчинается оператором G0 ПЙ. Sti , R E T U R N

или арифметическим T F .

42.Цикл с меткой ХХХХХХ не заканчивается (печатается но­ мер ЕМ]) донной программной единицы).

43.Этот оператор должен быть помечен.

44.. Метка после 2>& встречалась ранее, причем не в за­ головке другого цикла.

45.Количество вложенных скобок слишком велико.

46.Оператор, нельзя обработать из-за предшествующих оши­

бок.

47.Параметру цикла присваивается значение внутри этого ц: кла.

48.В арифметическом выражении неверно записано число.

49.За фактическим параметром в подпрограмме ХХХХХХ не

следует, или ) • / • 50. Идентификатор ХХХХХХ формального параметра -подпрограм­ мы используется как простая переменная.

51'. Список левой части в операторе присваивания слишком велик.

52.В списке левой части ХХХХХХ не является переменной.

53.В арифметическом выражении встретился недозволенный символ.

Соседние файлы в папке книги из ГПНТБ