Спецификаторы адреса
Спецификатор адреса задает адрес в памяти для понятия.
спецификатор - адреса :: = for простое-имя use at простое-выражение;
Выражение после зарезервированного слова
at
должно быть типа ADDRESS, определенного в пакете SYSTEM (см. 13.7). Этот пакет должен быть именован в спецификаторе совместности компилируемого модуля, в котором помещается спецификатор адреса. Условия, определяющие интерпретацию значения типа ADDRESS как адреса, уровня прерывания или чего-либо другого, зависят от реализации. Ниже перечислены допустимые толкования простого имени и смысл соответствующего адреса:
а) имя объекта: требуемый адрес — адрес объекта (переменной или константы);
б) имя подпрограммы, пакета или задачного модуля: требуемый адрес — адрес машинного кода, связанного с телом программного модуля;
в) имя одиночного входа: адрес задает аппаратное прерывание, связанное с этим входом. Если простое имя — это имя одиночной задачи, то спецификатор адреса относится к задачному модулю, а не к задачному объекту. Во всех случаях спецификатор адреса является правильным только тогда, когда точно одно описание с этим идентификатором помещено раньше непосредственно в том же разделе описаний, спецификации пакета или спецификации задачи. В качестве простого имени недопустимо имя, введенное описанием переименования.
Спецификаторы адреса не могут быть использованы для задания перекрытия объектов или перекрытия программных модулей. Данное прерывание может быть связано не более чем с одним входом. Любая программа, использующая такой спецификатор адреса, ошибочна.
Пример:
for CONTROL use at 16#0020#; -— предполагается, что SYSTEM.ADDRESS -- это некоторый целый тип
Примечание.
Из приведенных правил следует, что если в данной точке программы видимы две совмещенные подпрограммы, то спецификатор адреса для каждой из этих подпрограмм является неправильным в данной точке. Аналогично если в спецификации задачи описаны совмещенные друг с другом входы, то они не могут быть входами прерываний.