Cтраница 3
Кроме операторов, соответствующих машинным командам, в программе могут быть использованы директивы Ассемблера, предназначенные для управления процессом ассемблирования, резервирования памяти и выполнения других функций. Операторы директив передают информацию о необходимом режиме ассемблирования самому Ассемблеру и не порождают машинных команд. Директивы записываются в формате операторов, но содержимое некоторых полей имеет особенности, которые будут указаны ниже. [31]
При объявлении переменной для нее выделяется ( резервируется) память. Резервирование памяти не очищает ячейки от значений, которые ранее в них хранились, поэтому если за объявлением переменной не следует ее инициализация, то текущее значение этой переменной будет непредсказуемым, а не нулевым, как думают многие. [32]
В программе BSKBPBF дополнительно считывается информация файлов BNI, NI, KL, KOLI, LAD, PRIZN и заносится в соответствующие массивы. После резервирования памяти под информационные массивы и считывания файлов происходит обращение к программе OTKRPB, в которой производится формирование фиктивного файла обратной матрицы и формирование массива базисных цен. После выхода из OTKRPB в программе открываются файлы BUSTL, MATRIX, BOBR1, BOBR2, необходимые для работы и производится корректировка блоков DCB. На этом предварительная подготовка в программе закончена. [33]
Она дополнительно считывает информацию файлов BNI, NI, KOLI, LAD, PRIZN. После резервирования памяти под информационные массивы и считывания файлов происходит обращение к OTKRPB для формирования файла обратной базисной матрицы и массива базисных цен. [34]
В автокодовой программе описание массива не выполняет логических функций. Оно осуществляет резервирование памяти для значений элементов массива, сами же значения описанием не определяются. Описание вводится в любом месте автокодовой программы до оператора, использующего индексную переменную. [35]
Обратим внимание читателя на одну деталь. Но при резервировании памяти ее содержимое не определяется, и если в процессе выполнения программы содержимое этого байта не будет определено, то при распечатке всей области TEXT на печать будет выдан один случайный символ - содержимое этого последнего байта области. [36]
Схема распределения памяти с использованием динамического буфера ( см. рис. 10.4) представляет собой еще одно средство монитора. Эта схема позволяет отложить резервирование памяти для операций ввода-вывода до тех пор, пока в работающей программе не возникает реальная потребность в них. Только в этот момент выполняется загрузка драйверов, и после завершения процедур обмена они удаляются из памяти. Под динамическим распределением памяти понимается свойство основной структуры распределения памяти изменяться во времени. [37]
В подразделе 3.4 при описании состава модуля ПЕЧАТЬ было сказано, что программы SPACE, PPOG и REPORT, объединенные в загрузочный модуль LIBRARY, осуществляют сервисные функции. Эти функции заключаются в резервировании памяти на магнитном диске для на - бора данных ОПИСАНИЕ. В качестве входных данных модуль LIBRARY использует информацию оператора DD, который описывает создаваемый библиотечный набор данных ОПИСАНИЕ. При создании этого набора данных необходимо учитывать, что под раздел отводится один блок. [38]
Как правило, в начале каждого прохода LC устанавливается в нуль. На первом проходе, помимо резервирования памяти под машинные коды команд, транслятор формирует таблицу имен, в которую заносит символические имена, определенные в программе, и соответствующие им значения. Так, на первом проходе трансляции программы 2.2 в таблицу имен будут занесены метки START и QUIT с соответствующими им значениями LC. На втором проходе значения этих имен из таблицы будут использованы при трансляции команд, например при трансляции команды BR START символический адрес START будет заменен соответствующим значением, взятым из таблицы имен. [39]
Набор директив в языке ассемблера довольно обширен. WORD и др.) предназначены для резервирования памяти с занесением в нее данных и обеспечивают формирование последовательности битов в объектном модуле. ODD) используются для управления счетчиком адресов и в зависимости от текущего значения этого счетчика могут вызывать или не вызывать генерацию битовых последовательностей в объектном модуле. PAGE и др.) никак не воздействуют на структуру объектного модуля, но информируют ассемблер о том, например, как формировать листинг программы. [40]
Рассмотрим теперь более обший случай, когда число слов в тексте заранее неизвестно и слова могут иметь различную длину. При работе с такими текстами возникают проблемы резервирования памяти, определения конца текста и определения границ каждого из слов, входящих в текст. [41]
Фиктивная секция заканчивается операторами CSECT, END пли DSECT с другим именем. Заметим, что псевдокоманды DS, записанные в фиктивной секции, фактического резервирования памяти не производят. Они являются только планом данных, к которым будет обращение з программе. Для транслятора фиктивная секция фактически ничем не отличается от обычной секции, за исключением того факта, что для нее не отводится места в памяти. Символическим именам фиктивной секции всегда присваиваются значения, начиная с нуля. [42]
А чтобы не менять обозначений в программе, такое совмещение осуществим при резервировании памяти, используя команду транслятору ORG, - это весьма типичный случай использования данной команды. [43]
Поскольку теперь мы исходим из того, что длина строки может изменяться, для резервирования памяти приходится накладывать ограничение на допустимую длину Lma % строки. [44]
Действия описываются в исходной программе посредством операторов исходного языка программирования. Каждый из этих операторов в зависимости от его назначения заменяется в процессе трансляции одной или несколькими выполняемыми командами или командами резервирования памяти и описания устройств. [45]