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

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

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

-30 -

хпде я - деоятичный номер данного оператора DEBUG В ФОРТРАН-программе.

2.6Л.4, Автокод в обращение к стандартным программам.

В ФОРТРАК-ирограшо могут быть записаны в команды на автокоде (языке ассемблера). Применяемая при этом сим­

волики принадлежит Б.Б.Лена к напоминает используемую в £b'j. Команда» как и любой другой оператор, может быть снаб-

язва меткой.

Команда имеет вид:

<нод> , <адрес? , <адресэ- , <адрес > ?

пли

0;

ада (для обращения к стандартным программам в системе ИС-2М):

<код> - восьмеричное число К в диапазоне 04 К .£777 (нули

в начале чиода гожно не писать);

 

 

 

(адрес? аожет быть записан в виде:

 

<адресе> записы­

а) абсолютного адреса ячейки А - тогда в

вается восьмеричное число в диапазоне 0 ^ А ^

7777 (ну­

ли в начале числа можно не писать);

<адресе^

записы- '

б) адрес некоторой константы - тогда в

вьется эта константа.

 

 

 

 

Консч апта

 

 

 

 

•^*MS . « ^ / 3 , Х & . « А Р г У 1 & .

о 1 9

р 3 Г ^ г

 

(oL^fi, V} 8

- восьмеричные цифры)

 

записывается в виде:

( (

 

 

 

Если какой-либо адрес или код в константе отсутствует, его

можно пе писать; если какой-либо адрес имеет вид, например,

7777' то он может сокращенно записываться в виде:

П<

Константа П означает полное слово, т.е. 7.77.7777.7777.7777

- 31 -

Адреса в константе можно писать в любом порядке. Примеры.

Константа

777.7777. 0.0001

записывается в виде:

777Kn'l'"

или

777К I ' " П*

Константа

0.00.0002.0002.С003

записывается в виде:'

П( 'jtt*

ИЛИ

ит.д.

Константа

0.00.7777.0001.7777

записывается в виде:

п' I " П"'

ИЛИ

П* Псее l "

" т.д.

в) адреса простой переменной А - тогда в <адресе> записы­

вается идентификатор этой простой переменной;

г) адреса элемента массива с числовым индексом - тогда в <апреое> записывается соответствующая переменная с индек­ сом. Запрещается использовать двумерный массив с переменной

структурой (см. 2.6.2.1.3.4); такой массив может быть ис­ пользован, только если его индекс состоит из одного индек­

сного выражения, т.е. массив используется как одномерный. Запрещается также использовать массив, расположенный в ди­ намической памяти (см. 2.6.2.1.3.6.). Если используется

мжсив из Ы03У-1, то программист должен сам принять меры по перекоммутации кубов, т.е. написать команды с кодом "57";

д) метки - тогда <адрес> имеет вид:

;га,

где m -метка. Например, переход к оператору с меткой 123

запишется в виде команды:

16,0,:123.0;' ^ е) ссылки на какую-либо команду в окрестности текущей ко­

манды или на саму текущую команду - тогда < адрес> имеет вид:

35 + А,

или

а - А,

ЕЛИ

к,

где А - десятичное целое число, А^ 15;

хобозначает ссылку на текущую команду;

35 + А - ссижу на команду, находящуюся по адресу А, если за нулевой адрес принять адрес текущей

команды; к - А - ссылку на команду, находящуюся по адресу (-А),

ее та за нулевой адрес принять адрес текущей

команды.

Пример.

Очистка массиве А длиной IOOJQ элементов может быть записана так:

52,0,0,0;

100,0,0,А(1);

112,143,к - 1,0001;

ж) адреса десятичного числа - тогда <адрес), имеет вид:

<А> ,

где А - записанное обычным образом (см.2.2.) десятичное

число.

.ПримерГруппа команд в автокоде:

00, П* I * "

 

,

0, 1000;

1: 13,1000, П'

I

' "

,1001;

13,к -

I ,

I '

 

1<"

,«-!{

33, х - 2, 1100* ,0,;

 

36, 05

: 1 ,

0;

 

 

 

-33 -

50,2500, 0,1100; 70,1000, 0,0;

осуществляет вывод на узкую печать массива в 100 команд:

000 777700000001

ООО 777600000002 .

000 777500000003

000 7677000Q0I0I

Другие возможности автокода

Команда:

0; эквивалентна команде:

00, 0, 0, 0;

Обращение к стандартной программе следует осуществлять с помощью операторов:

(JJ - номер стандартной программы - восьмеричное число),

где ЯР ~ признак обращения к стандартной программе -

реализуется так же, как и команда 16,к + 1,7501, 7610;

р, A, N, В; - информационная строка обращения к конкрет­

ной СП (таких строк может быть несколько). Информационные

строки описаны в инструкциях к соответствующим СП и запи­

сываются в ФОРТРАН-программе по обычным правилам записи

команд в автокоде.

Замечание I . Требование писать обращение к стан­ дартной программе с использованием оператора

SP;

вызвано тем, что СП с номерами, находящимися в определен­

ном диапазоне, вводятся с перфокарт, и компилятор, учиты­ вая это, специально приспосабливает рабочую программу для ввода соответствующего количества СП с перфокарт.Этот ввод осуществляется специальной стандартной программой РИС

 

г- 34 -

(см. $.&•

), обращение к которой автоматически

формируется компилятором и располагается в начале рабо­ чей программы (см. также 3.).

Замечание 2. Каждая команда автокода всегда реа­

лизуется в виде одной команды в рабочей программе. Замечание 3. Если непосредственно перед какой-ли­

бо командой автокода находится оператор присваивания, использующий массив из ШЗУ-I, то в этой команде не долж­

на встречаться конструкция вида я или к - Л.

2.6.2. Нешполняемые операторы.

Имеются следующие типы невыполняемых операторов:

-оператора описаний;

-

оператор ЕфЩ'Д;

 

-

оператор ЕИР;

 

-оператор С01ШЕНТ;

. у1травляюшне процессом компиляции;

- операторы рьдйы

-операторы, определяющие подпрограммы,

2.6.2.1.Операторы оьлсалий.

Имеются следующие типы операторов описаний:

-описания простых переменных;

-описания массивов;

- описание

SOinVAhSSCB;

- описание

еттЕШАЬ.

2.6.2.I.I. Локализация.

2 . 6 . 2 . I . I . I . Простые переменные и массивы могут быть ло­

кальными и глобальными.

2.6.2.1.1.1.1.Локальной называется переменная (простая или с индексом), областью действия которой является либо основная программа без подпрограмм, либо только та подпро­ грамма, в которой переменная явно или неявно описана.

2.6.2.1.1.1.2.Глобальной называется переменная, областью

действия которой является программа и все ее подщюграгд.ш.

-35 -

2.G.2.I.I.2.I. Локалыше переменные явно описываются в на­ чале соответствующей подпрограммы или основной программы.

2.6.2.1.1.2.2.Локальные простые переменные могут явно не

описываться. IТх первое появление в тексте подпрограммы

или основной программы является неявным описанием этих пе­

ременных.

2.6.2.1.1.2.3.Глобальные переменные явно описываются в

начале ФОРТРАК-програмш (непосредственно вслед за 0РД10Н, если они есть).

2.6.2.1.2. Описание простых переменных.

Описание простых переменных имеет вид:

REAL А , В , С , . . . |

А,В,С,... - список идентификаторов простых переменных.

При описании простых переменных мо;кно указывать их реальные (абсолютные) адреса в рабочей программе. Для этого вслед

за соответствующим идентификатором в квадратных скобках указывается требуемый восьмеричный адрес.

При указании абсолютных адресов следует учитывать распределение памяти, осуществляемое компилятором для ра­

бочей программы (см.

3.

)•

 

Примеры.

 

 

 

REAL ALFA, BETA [7] , С|

 

2.6.2.1.3. Описание массивов.

 

2.6.2.1.3.I. Описание массивов имеет вид:

 

REAL . . . .

А(Ю,

. . . . В(К,Ь),

С(М),

А,В,С,... - список идентификаторов одноили двумерных мас­ сивов (перечисленных в любом порядке);

N,K,L,M - верхние границы соответствующих индексных выраже­

ний (см. 2.3.2.). Нижняя граница каждого индексного выраже­

ния считается равной единице.

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

-36 -

Однако, если какой-гснбо массив является формальным пара­

метром (см, 2,6.2. СЛ.) (и только в этом ~лучае!), верхь кяя граница индексного выражения может быть не только

числом, но и идентификатором простой переменной. В послед­

нем случае упомянутая простая переменная также должна быть формальным параметров, т.е. содержаться в списке фор­ мальных параметров рассматриваемой подпрограммы. К момен­

ту вызова этой подпрограммы и замены формальных парамет­

ров на соответствующие фактические параметры (см. 2.6.3.) значение фактического параметра, соответствующего верхней

границе индексного выражения, должно быть целым строго по~ ложительным числом. Замена переменной верхней границы мас­

сива - формального параметра па соответствующий фактичес­ кий параметр при обращении к подпрограмме происходит толь­

ко для второго индексного выражения двумерного массива

(т.е. количества столбцов матрицы), так как при обращении

к элементу шсс за имеет смысл верхняя граница только ко­ личества столбцов матрицы (другие вер'хние границы массивов - формальных параметров могут быть любыми натуральными числами иди простыми п ременными).

2.6.2.1.3.2. При описании массивов можно указывать их ре­ альные (абсолютные) адреса в рабочей программе. Для этого вслед за правой круглой скобкой в описании соответствующе­ го sv.H в квадратных скобках указывается требуемый йиоьмсур.чш-й адрес (адрес первого элемента). При указании аЗсолитгяъ'х адресов следует учитывать распределение памяти,

осуществляемое компилятором для рабочей ггрограммы (см. 3.)

Цржер.

REAL , . . , А(10) [2dQ , . . . ;

2.6.1.3.3, Компилятор, как правило, размещает все масси­ вы в нулевом кубе МОЗУ. Однако, при желании массивы можно

разместить и в первом кубе ЮЗУ. Для этого вслед за правой круглой скобкой (если отсутствует квадратная) или за пра­ вой квадратной скобкой в описании соответствующего масси­

ва В' "углозых" скобках указывается требуемый номер ггба ЫОЗУ (т.е. <1> ) .

имеющая п 2

- 37 -

Пример.

REAL

А(10) < 1 >

В(20) ЦЗОО] < 1 > ,

2.6.2.1.3.4. Для работы с двумерными массивами переменной структуры (матрицами с переменным количеством слов в стро­ ке) введено описание (идея которого принадлежит Б.Б.Леви):

REAL ..., A(Ot C0LS N/ot/),...;

где А,- идентификатор массива;

N - идентификатор переменной, указывающей изменяемое обычным образом в программе количество столбцов (C0LS); обнатуральное десятичное число, указывающее макси­

мальное количество элементов массива А.

До первого присвоения значения переменной N к эле­ ментам матрицы А можно обращаться только как к элементам одномерного массива (см. 2.3.2.4.). После того, как пере­

менной II будет присвоено значение

, матрица А будет

рассматриваться как матрица, имеющая

столбцов, т.е.

адрес элемента А( Ы. , |Ь ) будет вычисляться по формуле

С А ] +(П1 -1)*ОС + ^ -1,

где[А]- адрес элемента А(1,1) .

Как видно из этой формулы, количество строк матрицы не играет роли. Значение переменной N может изменяться произвольным образом. Однако, при обращении к элементу массива А как элементу двумерной матрицы переменная и должна иметь натуральное значение n g (возможно, не равное п1 ) , и тогда матрица А будет рассматриваться уже как

столбцов, т.е. адрес элемента к(о(. , J5) будет вычисляться по формуле СА Ц +(п2-1)*сС + ]3 -1.

Пример использования такой матрицы указан на рис. 1. Пример.

REAL .... 3KO.C0LS М / 4 0 0 / ) ,

2.6.2,1.3.5.1. Имеется возможность работать с динамически­ ми массивами. Динамический массив - это массив, который размещается на магнитном барабане и имеет страничную (по 200g кодов + КС) структуру. При работе с динамическими массивами отводится (компилятором) поле в МОЗУ дня разме-

- 38 -

щения одной или нескольких страниц. Обмен страницами меж­ ду МОЗУ и МБ при обращении к элементам динамического мас­ сива происходит автоматически. Следовательно, пользова­ тель работает с динамическими массивами точно так же, как и о обычными (расположенными в МОЗУ) массивами. Общая дли­ на динамических массивов (при полном использовании трех МБ) может быть равна 48768 ячеек.

2.6.2.1.3.5.2. Описание динамического массива имеет вид:

REAL'

AC °t) <D > , ...,B(j» , p<D> '

 

...,С(О.С0ЬЗ N /<?/)< D > ,

где А,Б,С, - идентификаторы динамических массивов, °С|?|<Н Ь - натуральные десятичные числа;

' К см. 2,6.2.1.3.4.

1> - признак динамического массива. 2.6.2.1.3.5.3. Все .динамические массивы располагаются на МБ подряд, начиная с нулевого адреса нулевого МБ. Распо­ ложение и длина поля страниц динамических массивов в МОЗУ определяется компилятором автоматически„ Организация всех

действий о динамическими маосивами (создание административ­ ной системы я реализация обращений к элементам динамических

кассявов) осуществляется с помощью написанного Б.Б.Леш

па­

кета из четырех стандартных программ (см. 8.5.

)•• К

.гнуу£?ср соктдет соответствующие команды в рабочей программе 2.В.2.1.3,0. Д^мерные массивы (матрицы) распадаться в память ло отрокам.

i«5»SeI.3.7. Замечания. ,

2«6*2«1»3,7.1. Описания типа, т.е. простых переменных и злайоивоз, могут встречаться в ФОРТРАН-программе в любом козвчестзо. Все эти описания должны размещаться перед аершм ззыначняемкм оператором соответствующей программной едааицн, 2 6.2.Г.Э.7.2, Проотые переменные и массивы могут быть

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

Опнсакжя

-39 -

REAL A,B(10);

. REAL B(10),A;

эквиваленты меаэду собой и совокупности описаний

REAL А; REAL В ( 1 0 ) {

2.6.2.1.3.7.3. Простые переменные, для кбторых не указан их абсолютный адрес (см. 2.6.2.1.2.), располагаются в ну­

левом кубе подрад.

Массивы, для которых не указан их абсолютный адрес,

располагаются в соответствующем кубе (см. 2.6.2.1.3.3.)

подряд.

2.6.2.1.4. Описание EQUIYALEHCK

Как известно, полями для различных массивов служат

различные области памяти. Однако, имеется возможность ис­ пользовать одно и то »е место в памяти для хранения раз­

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

где каждое

EQUIVALENCE ( Ж , ) . ( K - J

К^,(ьюкет быть только одно) называется группой

ВОШУАЬВНСВ

И, в свою очередь, имеет вид:

 

A(ot ) , в(/» ) , ос j f \ S"),.•.

где А,В,С... - идентификаторы массивов;

oCf j j j л

I " - натуральные десятичные числа.

Массивы А,В,С,... должны бить предварительно описаны в данной программной единице. Эти массивы не могут бить фор­

мальными параметрами.

Это означает, что элементы массивов A(ot)».B(|5 )» С( у , X" ) занимают одну и ту же ячейку в памяти.

Поскольку элементы внутри массива располагаются в памяти подрад, соответственно будут расположены и другие

элементы массивов А, В и С.

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