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

книги из ГПНТБ / Кушнерев Н.Т. Программирование для ЭВМ Минск-32

.pdf
Скачиваний:
37
Добавлен:
24.10.2023
Размер:
11.94 Mб
Скачать

Если программа требует места больше, чем участок памяти, на котором предполагается ее выполнение, то такую программу сле­ дует составлять из отдельных частей. Эти части будут загружаться в память в процессе выполнения программы, заменяя друг друга на одном и том же месте. Каждую из таких частей будем называть сегментом. Сегмент представляет собой несобранную или собран­ ную программу. Сборка каждого сегмента производится предвари­ тельно и независимо друг от друга. Сегмент, с выполнения которого начинается выполнение всей программы, загружается в память первым и называется головным сегментом. В памяти может нахо­ диться, кроме головного сегмента, еще один или несколько сегмен­ тов. Сегменты могут вызываться на место других, ранее вызванных, но уже отработавших сегментов.

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

При выполнении сегментированной программы участок памяти, отведенный для нее, занимается следующим образом. Головной сегмент располагается, как показано на рис. 49. Головной сегмент мог использовать для своих целей некоторую часть свободных ячеек и не освободить их к моменту загрузки внутреннего сегмента. Эти ячейки будут расположены вплотную к полю областей, а поло­ жение их будет зафиксировано в указателе заполнения памяти. Очередной загружаемый сегмент располагается в памяти в соответ­ ствии с содержимым указателя. Ячейки индексов этого сегмента располагаются в индексном поле за ячейками индексов предыду­ щего сегмента. Основные, рабочие и общие области располагаются так же, как соответствующие области предыдущего сегмента, при­ чем для общих областей с совпадающими наименованиями новое место в памяти не отводится. При загрузке сегмента автоматически корректируется указатель заполнения памяти. Если очередной сег­ мент вызывается на место предыдущего, то в программе должно быть предусмотрено предварительное освобождение памяти преды­

дущего сегмента. При освобождении памяти

восстанавливается

предыдущее состояние указателя.

 

 

 

 

 

 

 

 

Приведем схему

распределения

памяти

при

выполнении

про­

граммы, состоящей

из нескольких сегментов. Пусть XI—головной

сегмент этой программы, У1 и У2 — два

независимых

сегмента,

ко­

торые вызываются

сегментом X I на

место друг

друга,

a Z1 — сег­

мент, подчиненный У1. Пусть сегменты У1 и У2 используют

память

динамически. На рис. 50 изображено

распределение

памяти

для

этой программы.

 

 

 

 

 

 

 

 

 

Рассмотрим теперь, как производится выделение и

освобожде­

ние памяти под сегменты при составлении

программы

на

языке

символического кодирования. Напомним, что если сегмент

загру­

жается в память в процессе выполнения программы, то его головная

190

программа

должна

быть описана

с

помощью

оператора ОПРЗ

(см. п.

4.3).

 

 

 

 

 

 

 

а

 

 

 

 

 

 

 

 

А

У1

Щ &

СВододно

11

 

ЗамятоУ1

У/

Х1

I—Индексное поле —

 

 

_

Сегменты

 

A

XT

У2

Свободно

Занято У2

У2

XI

|

Индексное поле—*-

 

Сегменты

 

Рис.

50. Пример распределения

памяти

сегментированной

программы:

а)

после загрузки сегментов X I , Y1; б)

после загрузки

сегмента

 

Y2 на место

предыдущих.

 

Для загрузки сегмента используется оператор «Загрузить сег­ мент», при необходимости освободить участок памяти, занятый сегментом, используется оператор «Освободить память сегмента»,

аабсолютный адрес указателя заполнения памяти можно получить

спомощью оператора «Передать адрес указателя памяти».

ЗАГРУЗИТЬ СЕГМЕНТ (ЗГР)

Оператор состоит из двух строк.

ЗГР

\ {

[:И;]Т(Д]

\ ]

 

[\

:И[;Т[,К]

Л

КА

 

0; В

 

Т,К

условное обозначение внешнего устройства, с которого

производится загрузка сегмента.

Т,К может определяться индексной ячейкой, а не указываться непосредственно в адресной части. Если адресная часть оператора отсутствует, то загружаемый сегмент разыскивается на той же магнитной ленте, с которой загружался сегмент, содержащий этот оператор ЗГР. Если он загружался с перфокарт или перфолент, то загружаемый сегмент будет разыскиваться на ЛС.

Во второй строке записывается этикетка В описания головной программы загружаемого сегмента. Это описание должно произво­

диться с помощью оператора 0 П Р З . Первая строка

преобразуется

транслятором в экстракод с кодом 6 0 и определителем

000101.

При выполнении оператора диспетчер закрепляет

за

програм­

мой устройство, соответствующее Т,К, загружает с него программу сегмента, освобождает устройство и передает управление к следую-

191

щему оператору программы. Магнитная лента не закрепляется и не освобождается, так как она была уже закреплена ранее. При от­ сутствии программы на МЛ диспетчер продолжает поиск ее на ЛС. Обращение к вызванной в МОЗУ программе должно производиться по оператору ИП. Для вызова в память нескольких сегментов нуж­

но выполнить несколько операторов ЗГР. Если сегмент,

который

требуется

загрузить по оператору ЗГР, уже находится в

памяти,

повторной

его загрузки не производится.

 

О С В О Б О Д И Т Ь

П А М Я Т Ь С Е Г М Е Н Т А (0СВПС)

 

0СВП С

 

 

 

 

Адресная

часть не используется. При трансляции оператор пре­

образуется в экстракод с кодом

6 0 и определителем 001010.

При выполнении оператора

диспетчер освобождает память, за­

нимаемую

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

соответ­

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

Если необходимо освободить память сегмента, который к момен­ ту требования на его загрузку по оператору ЗГР находился в памя­ ти, то какой оператор ©СВПС игнорируется.

П Е Р Е Д А Т Ь А Д Р Е С У К А З А Т Е Л Я З А П О Л Н Е Н И Я П А М Я Т И ( П А У П )

П А У П

Адресная часть не используется. Оператору соответствует ячейка программы, в разряды 21 -=-36 которой при загрузке про­ граммы пересылается абсолютный адрес указателя заполнения памяти. Ячейка отводится в том месте программы, где был распо-

Строка

Этикетка

 

Коп

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9,

17,

1 1

| « 17,

,

,

,21 12, і

| " |

,

 

,

I

І>С, ,

1

1

 

 

і

,

і

,40

 

 

43, і

і

,

,W|

і

 

 

 

 

 

 

0 ,1,0

1

1 1

I

Ч,СЛ,

 

1

9,K,A,P

 

; ,0,

 

і

і

і

. I

 

 

 

,4,",A,3,

 

 

<A, , S , •

,

f

1

,),

 

і ,

 

 

 

 

0 ,2,0

,

,

1

1

> |

4

1

P,A,Bi

 

'

 

,

 

 

 

 

 

 

,C,7,

,*,H,A,V,

 

 

,К,А,ЗлА,Т

 

 

 

,£,/>,Й,

,

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 ,3,0

,

1

1

1

 

в,Ф,В,

 

і

P',A,3,M\;

 

 

 

,P-4,6,1,

,

і

iB,

,P,A,6,I,

 

 

I ,

,

і

і

 

 

і

,

і

,

,

і

,

 

 

 

 

 

0 ,4,0

,

,

,

,

 

71,9,8,

 

,

* , / , 7,7 ' 7, 7 ,7 ,St;

, P,A,6,

 

 

 

 

 

 

 

і

,

 

 

 

,

 

I

I

 

 

 

 

 

 

 

 

0 ,5,0

,

,

,

,

 

л,с,а,

,

*• J ,2,0і S,,,P,A

 

,6,

і

,

 

і

і

,

,

і

,

,

і

,

 

 

 

 

 

 

 

,

і

,

 

 

 

 

 

 

 

0

,1,0

'

I

 

I

'

B,0,f>,

 

,

P,A.J,2,

 

 

,

 

і

 

,

 

,

, ,

 

,

,

 

,

 

 

 

 

!

,

 

 

 

 

 

 

. . . .

 

 

 

 

 

 

 

 

 

 

 

И,М,И,

,

 

 

 

 

 

 

 

 

 

 

 

,

i

,

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

,7,0

1

1 1

I

X ,»,P,

1 t

 

 

i

 

i

 

і

 

 

 

 

 

 

,

,

 

 

 

 

 

і

.

, .

 

 

 

 

 

 

 

 

0

,3,0

,

,

,

,

 

п,о,м,

,

,

,

,

1

 

 

 

 

 

 

 

 

І

і

і 1 І і •

 

і .

.

,

і

і ,

 

 

,

,•

і І

 

 

 

 

 

 

 

0

,9,0

,

1

,

1

 

к,Ґ,С,Л,1

 

О , \ , T ,C.K ,C ,7

 

,2,

,

,

l

,

 

l

i

i

i

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

',0,0

I

I

I

 

,

е,с,т,

,

,

,

і

'

 

 

 

 

 

 

 

 

 

 

І

І

і

і

і

j

і

і

і

і

і

і

 

і

,

і

і

 

 

 

 

 

 

 

 

1 ,1,0

Х,0,Р,

 

,

 

1,

,

1 .

P.A,6,

 

j

 

,

 

,. ,

 

,

, ,

,

і

,

і

і

, , і

j

 

 

 

 

 

 

 

 

 

 

,

 

 

 

 

 

 

 

 

> ,2,0

,

1

,

1

 

3-,С,П,

ц

P ,A,B,t\;

 

 

,0,

і

,

,>,А,П,И,С,Ь,

 

 

,C ,7 ,A,P,0,r,Ф,

 

 

 

,</,//,A,1,

,

 

,

 

 

 

1 ,3,0

1

1

,

1

 

» ,

1 1

1

P,A,S,1\

 

 

і

і

 

і

 

< 1 і і

і

,

,

 

1

і

і

і

!

1 1 1 1 1 l

1 l

,

,

,

 

 

 

 

 

'

l M

,

,

1

1

з,с,о,

,

!/ ,к,А,з\;

 

,0,

і

і

і і

і

і

і і

 

і

,

і

,

!

і

,

,

,

,

 

,

,

,

,

,

,

 

 

 

 

 

У

,3,0-

<

1

1

1

I

I

I

I

,—Іг—Г",

 

і

 

I

 

I ~\і—і—і—7 1 1 'l 1 t"і—••—іГ

 

I і "г—і—і—і—у

 

\

T

 

 

 

 

 

 

 

 

 

,

,

,

,

,

1 ,6,0 . . .

1

1 1 , 1

,

,

,

 

 

 

 

 

,

,

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

!

 

 

!

,

,

 

 

,

, ,

1 ,7,0 , , I 1

 

I I I I

, , , 1

 

 

 

 

 

 

 

 

1 1 1 1 J 1 1

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

1 ,1,0

 

 

,

1

*,7,Р,

 

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

,

1

 

,

1

1

,

1

1

1

 

1

1

1 ,9,0

1

.

1

,

 

А,

,

,

О,;

,Є,п\

 

 

 

 

 

 

 

 

 

 

і

і

і

і

 

і

і

і

і

і

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

г ,0.0

Т,С

,К,С

,7

К,7,

 

,

,

М,А,Л,»\

 

 

 

 

 

 

 

 

 

 

 

 

 

,

1

 

,

1

,

 

1

,

1

 

1

 

 

 

 

 

 

i

.

i

,

 

 

 

 

 

U

J L

 

 

 

 

 

,

і

і

,

M,£,C,T,*,

 

 

 

 

,

 

 

 

 

 

 

 

 

 

 

 

,

,

,

 

,

,

,

!

 

,

,

 

,

,

.

,

,

,

,

 

,

г ,г

9,*,*,},

 

 

О,А,9,0,

 

,

,

1

 

 

 

 

 

 

 

і

і

і

і

і

і

і і

і

 

 

 

 

 

 

 

 

 

 

'

 

 

 

 

 

 

 

 

 

 

г

,5

0,0,

,

,

 

 

г,г,

S,»,9,r'p,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

j

 

 

 

 

 

 

і

. І

 

 

 

 

 

 

 

 

 

 

 

 

 

z

i V

,

,

|

|

 

н,е,о,

,

'

і

 

 

 

 

 

 

 

 

1

1 *

t

i

 

l

l

\

1 1

1 1

1

1

 

1

1

 

1 l l

і

 

 

 

 

 

 

 

192

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

Пусть сегмент ВНЕШ требует для своего выполнения дополни­ тельно N ячеек памяти, а затем загружает внутренний сегмент ВНУТР, не освобождая их. Тогда в программе сегмента ВНЕШ нужно записать операторы, приведенные на стр. 192.

В ячейке РАЗМ в разрядах 21+-36 записано восьмеричное зна­

чение N + 1.

Если требовалось

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

до загрузки

сегмента ВНУТР, то операторы в строках 110+140 не

нужны, а перед ЗГР следует записать:

 

Ч

РАБ

 

ЗСП УКАЗ; 0

При занятии памяти для своих целей программа должна, кроме корректировки указателя заполнения памяти, запомнить его старое значение в первой еще не занятой ячейке свободного участка для последующего восстановления при освобождении памяти.

66. БИБЛИОТЕКА ПРОГРАММ

Ниже рассматриваются организации передачи параметров из одной программы в другую, а также организация библиотек про­ грамм на магнитной ленте. Система программирования предпола­ гает, что программы или их части записываются на некоторых входных языках. Трансляторы с этих языков переводят их в неко­ торые модули либо сразу на языке загрузки, либо предварительно на языке более низкого уровня (например, возможна трансляция с языка COBOL в ЯСК). Правила оформления таких модулей стан­ дартные. Таким образом, после трансляции модули уже не зависят от входных языков.

В каждом из таких оттранслированных модулей может содер­ жаться обращение к другим программам. Благодаря этому возмож­ но комплектовать модули более сложной структуры. При обраще­ нии к программе во внешней программе, как правило, задаются параметры. Они располагаются в ячейках вслед за командой обра­ щения к программе (на ЯСК этой команде отвечает оператор ИП). В системе программирования зафиксированы некоторые определен­ ные правила задания параметров.

Параметрами программ могут быть только абсолютные адреса. На ЯСК абсолютные адреса могут быть заданы, например, с по­ мощью оператора КА. В каждую из ячеек за командой обращения к программе записывается по два адреса (параметры).

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

13. Заказ 5093.

193

Например, если в программе шесть параметров, то на ЯСК обращение к ней выглядит так:

ИП В1; 3 КА ПАР2; ПАРІ

КА ПАР4; ПАРЗ КА ПАР6; ПАР5,

где В1 — этикетка первой ячейки описания программы. При нечетном количестве адресов параметров в последней ячейке с параметрами будет константа вида 0;ПАР.

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

лицу, заканчивая ее признаком, требуемым

внутренней

программе,

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

В частности, если программа предназначена

для обработки много­

мерных массивов числовой

информации

(например,

программы

вычисления определителей,

нахождения

собственных

значений

матриц и другие

программы линейной алгебры), то параметрами

для

нее являются

адреса так называемых информационных векто­

ров

для каждого

из массивов, обрабатываемых программой. При­

нято, то информационный вектор массива содержит в первой ячей­ ке абсолютный адрес начала массива (разряды 21 +-36); во второй ячейке — порядок по первому измерению массива; в третьей ячейке —порядок по второму измерению массива. Порядок задается целым восьмеричным числом. Последняя ячейка содержит код *****.

Таким образом, количество строк в таблице зависит от размер­ ности массива.

Например, информационный вектор для трехмерного массива порядка 10X15x20 на ЯСК можно задать так:

ИВМ КА 0; А КЧ 10 КЧ 15

КЧ 20 j^-p *****

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

ИП ПР; 1 ' КА 0; ИВМ,

где ПР определяет описание программы. Предполагается, что дру­ гих параметров у программы нет.

Для программ, связанных с вводом или выводом больших мас­

сивов информации, а также с

их последовательной

обработкой в

системе программирования принято передавать в качестве

одного

из параметров адрес описания

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

массива

пред-

194

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

Параметрами программ могут служить и другие адреса. Напри­

мер,

адрес описания

некоторой программы служит

параметром,

«ели

внутренняя программа обращается

к этой программе, но не

содержит ее описания

(см. п. 4.3). Часто

параметром

программы

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

Внутренние программы принимают параметры и могут исполь­

зовать их различным

образом. Это,

например,

засылка

адресов

параметров в ячейку

уровня

(см. примеры 3 и 4,

п. 4.4);

выборка

параметров по операторам со специальным базированием

(см. при­

мер 4, п. 4.4); засылка параметров в

индексные

ячейки

(см. при­

мер 6, п. 4.6). Программы могут передавать параметры друг

другу

также и через общие области

(см. пример 2, п. 4.4). Однако

в этом

случае программы должны быть хорошо согласованы между собой и не могут иметь общего применения.

Как уже отмечалось, для использования программы библиотеки помещают на магнитной ленте. Наиболее часто используемые про­ граммы помещаются на ленту системы. Лента системы содержит диспетчер и другие необходимые для работы программы. Програм­ мы на других магнитных лентах образуют библиотеки пользовате­ лей, личные библиотеки. Такие магнитные ленты могут предназна­ чаться для одного или группы пользователей, если они связаны комплексом программ.

Для создания на магнитной ленте библиотечных программ, кор­ ректировки ее состава используется набор системных программ с общим названием «Библиотекарь».

Сами программы библиотекаря являются обычными програм­ мами библиотеки программ, в них соблюдены все правила передачи параметров и другие правила, предъявляемые к программе, входя­ щей в библиотеку. В библиотекаре имеются программы, позволяю­ щие записать на магнитную ленту с библиотекой программ новые

программы с перфоленты и перфокарт (программа П 0 П Л ) ,

а так­

же с магнитной ленты (программа МАГ). При работе этих

про­

грамм проводится контроль на совпадение имен каждой из новых программ с программами на данной магнитной ленте. Запись про­ граммы с повторившимся наименованием не производится. Вы­ дается список программ, имеющихся на магнитной ленте. Этот список может быть получен также с помощью отдельной програм­ мы СПРАВ. В библиотеке имеются также программы, позволяющие скопировать магнитную ленту с библиотекой, исключив при этом ненужные программы.

Магнитная лента с библиотекой программ, как и всякая другая магнитная лента, содержит в начальной зоне наименование ленты. Это наименование записывается на ленту по отдельной программе ЫНКМЛ.

13»

195

6.7. ОТЛАДКА ПРОГРАММ

Гак как запись программ или их частей производится на какомлибо из языков программирования, то и информацию об ошибках в этих программах желательно было бы получить в обозначениях исходного языка. Часть такой информации (синтаксические ошиб­ ки) выдается транслятором с соответствующего языка. Но не все ошибки, допущенные программистом, обнаруживаются при транс­ ляции. Большинство из них выявляется в процессе анализа хода выполнения программы. Сведения о ходе выполнения программы для их дальнейшего анализа могут быть получены от специально предназначенных для этого отлаживающих программ

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

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

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

Спомощью операторов печати можно получить разнообразную информацию, характеризующую выполнение отлаживаемой про­

граммы в заданных точках проверки программы либо на заданных ее участках. Вид печати задается программистом. Операторы печа­ ти позволяют напечатать содержимое отдельных ячеек или групп ячеек памяти в любой момент выполнения программ; получить информацию о логическом ходе выполнения программы; о покомандном выполнении программы; следить за изменением содержимого некоторой ячейки памяти либо группы ячеек; напечатать содержи­ мое ячеек уровня отлаживаемой программы; напечатать наимено­ вания выполняющихся внутренних программ отлаживаемой про­ граммы.

Операторы управления процессом отладки позволяют выполнять отладку программ по частям, выполнять отладочные операторы

196

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

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

необходимого действия, должен содержать

также указание о том,

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

выполнено.

Отлаживаемая программа может представлять собой отдельную программу или объединение нескольких программ. Поэтому каждый из отладочных операторов должен быть отнесен к той программе, информацию для отладки которой он содержит. Если для некоторых из программ, входящих в отлаживаемую программу, не заданы отладочные операторы, то никаких действий по отладке этой про­ граммы при выполнении отлаживаемой программы не произво­ дится.

При подготовке к отладке программы, как обычно, производится её сборка. Сборку можно производить в несколько приемов. Одна­ ко при сборке программы, подготавливаемой к отладке, необходи­ мо, чтобы внутренние программы, если они подлежат отладке,, были включены в головную программу на последнем этапе сборки.

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

которой должно быть произведено действие оператора (назовем

эту команду точкой)

или участок программы, на котором действует

отладочный оператор

(участок программы будем называть интер­

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

Отладочные операторы записываются на бланках символическо­ го кодирования. В графе «Идентификатор» указывается наимено­ вание той программы, к которой относятся отладочные операторы. Отладочные операторы для каждой из программ записываются с нового бланка с соответствующим идентификатором.

Каждый из отладочных операторов на бланке занимает отдель­ ную строку. В графе «Этикетка» записывается точка, в графе «КОП» — сокращенное мнемоническое наименование отладочного оператора, а в графе «Адреса и замечания» — остальная информа­ ция оператора, а также комментарии программиста. В одной точке может быть задано несколько отладочных операций. В этом случае отладочные операторы записываются последовательно один за дру­ гим, а точка можег быть указана только в первом из них. Не тре­ буется, чтобы отладочные операторы были записаны в порядке, соответствующем последовательности их выполнения. Не обяза­ тельно также, чтобы операторы, заданные в одной точке, были за­ писаны все сразу. Точка задается этикеткой, если эта этикетка имеется в словаре обозначений программы, или числовым адресом в восьмеричной системе. В адресной части операторов записи и печати могут адресоваться ячейки программы, к которым относится действие,, указанное в операторе. При адресации ячеек программист

14. Заказ 5093.

197

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

Приведем краткую характеристику основных отладочных опе­ раторов.

О п е р а т о р « З а п и с а т ь » (3) позволяет в процессе выполне­ ния отлаживаемой программы присвоить любой ее ячейке некоторое значение. С помощью этого оператора можно задавать исходные данные, вносить небольшие изменения в программу, исправлять некоторые ошибки, обнаруженные в программе. Программист мо­ жет записать с помощью этого оператора, например, результаты выполнения некоторых внутренних программ, если они использу­ ются теми программами, которые программист отлаживает.

Вместе с отладочным оператором «Идти», управляющим про­ цессом отладки, это дает возможность отлаживать программы даже в том случае, если не все внутренние программы уже имеются. Оператор действует в точке, в которой он задан, но, в отличие от других таких операторов, сн выполняется только при первом про­ хождении точки, а при повторном прохождении точки игнорируется. В операторе задается вид записываемой информации, адрес ячейки, куда она записывается, и сама информация. При выполнении опе­ ратора в процессе отладки на УПч печатается точка, к которой был отнесен оператор, адрес ячейки и та информация, которая в ней записана.

О п е р а т о р п е ч а т и (П)

служит для

вывода на печать зна­

чений, интересующих

программиста, одной

или нескольких после­

довательных ячеек. С

помощью

этого оператора можно вывести на

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

О п е р а т о р ы п е ч а т и р е з у л ь т а т о в позволяют напеча­ тать в заданном виде результат команды, выполненной перед точ­

кой, в которой задан оператор (ПР) или результаты

выполнения

каждой из команд на заданном интервале

(операторы Н П Р — на­

чать печать результатов и К П Р — закончить

печать

результатов).

В ходе выполнения отладки, начиная с точки оператора НПР, для каждой выполняющейся команды печатается ее адрес, сама коман-

198

да* и результат предыдущего действия. Печать этой информации прекращается в точке оператора КПР .

О п е р а т о р ы к о н т р о л я и з м е н е н и я з н а ч е н и я я ч е е к (НПЗ — начать печать значений и КПЗ — закончить печать зна­ чений) позволяют программисту следить за изменением содержи­ мого отдельной ячейки программы. В процессе выполнения отладки по этим операторам печатается в заданном виде значение заданной ячейки всякий раз, когда это значение изменяется. Печатается так­ же команда, которая производит запись этого значения. Операторы позволяют определить, в каком месте программы происходит неже­

лательное изменение значения какой-либо

ячейки.

 

' О п е р а т о р ы п е ч а т и э т и к е т о к

(НПЭТ — начать

печать

этикеток и КПЭТ — закончить печать этикеток)

служат для

печати

этикеток выполняющихся команд на заданном

интервале.

С по­

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

Начиная с точки оператора НПЭТ, отладочная программа пе­ чатает этикетки перед выполнением команд, которые были помечены в символической программе этикетками, сохраненными в словаре обозначений отлаживаемой программы. Печать этой информации прекращается в точке оператора КПЭТ. В этой точке этикетка не

печатается.

 

 

 

О п е р а т о р ы п е ч а т и п е р е х о д о в

(НПП — начать

печать

переходов и КПП—.закончить печать переходов), как и

предыду­

щие, позволяют проследить ход выполнения

программы

на

задан­

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

операто­

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

адреса

команд, по которым они происходят.

 

 

С п о м о щ ь ю о п е р а т о р а п е ч а т и

н а и м е н о в а н и й

в ы п о л н я ю щ и х с я п р о г р а м м (ПНП)

программист

может

определить перечень программ, которые в момент выполнения от­ лаживаемой программы являются по отношению к ней внешними.

Это программы, которые начали и не закончили свое

выполнение

до точки, в которой задан этот оператор.

 

Если некоторая точка входит в цикл, то отладочные операторы,

заданные в этой точке, выполняются обычно столько

раз, сколько

раз получает управление данная точка. С помощью

о п е р а т о р а

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

Оператор К 0 Н Е Ц позволяет закончить отладку программы в той точке, в которой он задан. Однако чаще всего выполнение от­ ладки прекращается из-за того, что, вследствие ошибки программи­ ста, возникает какой-либо сбой вычислителя (переполнение, защита и т. п.). Отлаживающая программа печатает некоторые сведения о месте и причинах сбоя. Программист может также задать с помо-

199

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