13.8. ВСТАВКИ МАШИННЫХ КОДОВ

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

оператор-кода ::= обозначение-типа'агрегат-записи;

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

Каждая машинная команда записывается как агрегат именуемого типа, агрегат определяет эту команду. Базовый тип обозначения типа в операторе кода должен быть описан в предопределенном пакете MACHINE_CODE; этот пакет должен быть упомянут в спецификаторе контекста, помещаемом для компилируемого модуля, в который входит оператор кода. Реализация не обязана обеспечивать такой пакет.

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

Реализация может определить машинно-зависимые прагмы, специфицирующие соглашения об использовании регистров и вызовов. Такие прагмы должны быть описаны в приложении F.

Пример:

М : MASK;procedure SET_MASK; pragma INLINE(SET_MASK);procedure SET_MASK is   use MACHINE_CODE;begin   SI_FORMAT'(CODE => SSM, В => M'BASE_REG, D => M'DISP);   --  M'BASE_REG and M'DISP —это заданные реализацией предопределенные атрибутыend;

Ссылки: агрегат именуемого типа 4.3.1, библиотечный модуль 10.1, допустим 1.6, именуемый тип 3.7, комментарий 2.7, компилируемый модуль 10.1, обработчик исключения 11.2, оператор 5, пакет 7, помеченный оператор 5.1, последовательность операторов 5.1, прагма 2.8, прагма INLINE 6.3.2, применим 10.1.1, процедура 6.6.1, спецификатор использования 8.4, спецификатор совместности 10.1.1, статическое выражение 4.9, тело процедуры 6.3, элемент описания 3.9.