Справочник по Ada 2012
13.8 Вставки машинного кода
Вставка машинного кода может быть достигнута вызовом подпрограммы, чья последовательность_операторов содержит оператор_кодаы.
Синтаксис
Оператор оператор_кода разрешен только в обрабатываемой_последовательности_операторов тела подпрограммы тело_подпрограммы. Если тело подпрограммы содержит операторы оператор_кода, то внутри этого тела подпрограммы единственно допустимой формой оператора оператор является оператор_кода (меченый или нет), единственные допустимые декларативные элементы — это оператор_использованияы, и не допускается обработчик_исключения (комментарийы и pragmaы разрешены как обычно).
Правила разрешения имен
Ожидается, что квалифицированное_выражение будет любого типа.
Правила легальности
Выражение квалифицированное_выражение должно иметь тип, объявленный в пакете System.Machine_Code.
Оператор оператор_кода должен появляться только в области действия с_определением_пакета, который упоминает пакет System.Machine_Code.
Статическая семантика
Содержимое библиотечного пакета System.Machine_Code (если предоставлено) определяется реализацией. Значение операторов оператор_кода определяется реализацией. Обычно каждое квалифицированное_выражение представляет собой машинную инструкцию или директиву ассемблера.
Разрешения реализации
Реализация может ввести ограничения на операторы оператор_кода. Реализация не обязана предоставлять пакет System.Machine_Code.
ПРИМЕЧАНИЯ
18 Реализация может предоставить определяемые реализацией pragmas, задающие соглашения о регистрах и вызовах.
19 Функции машинного кода освобождаются от правила, что требуется оператор возврата. На самом деле, операторы возврата запрещены, так как разрешены только операторы оператор_кода.
20 Вспомогательные подпрограммы (см. 6.3.1, «Правила соответствия») также могут использоваться для достижения вставок машинного кода. Интерфейс к ассемблерному языку можно реализовать с помощью функций из Приложения B, «Интерфейс к другим языкам».
Примеры
Пример оператора кода:
M : Mask;
процедура Set_Mask
с Inline;
процедура Set_Mask
с Inline;
процедура Set_Mask есть
использование System.Machine_Code; -- предполагается, что «с System.Machine_Code;» появляется где-то выше
начать
SI_Format'(Код => SSM, B => M'Base_Reg, D => M'Disp);
-- Base_Reg и Disp - определяются реализацией атрибуты
конец Set_Mask;
использование System.Machine_Code; -- предполагается, что «с System.Machine_Code;» появляется где-то выше
начать
SI_Format'(Код => SSM, B => M'Base_Reg, D => M'Disp);
-- Base_Reg и Disp - определяются реализацией атрибуты
конец Set_Mask;