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