Справочник Ada 95
13.8 Вставки машинного кода
Вставка машинного кода может быть реализована вызовом подпрограммы, чья последовательность_операторов содержит операцию_кодаы.
Синтаксис
операция_кода ::= квалифицированное_выражение;
Операция операция_кода разрешена только в обрабатываемой_последовательности_операторов тела подпрограммы. Если тело подпрограммы содержит операции_кода, то в этом теле подпрограммы единственно допустимая форма оператора — операция_кода (меченная или нет), единственно допустимые декларативные_элементы — указатели_использования, и нет обработчика_исключений (комментарии и псевдокоманды разрешены как обычно).
Правила разрешения имен
Квалифицированное_выражение ожидается любого типа.
Правила корректности
Квалифицированное_выражение должно быть типа, объявленного в пакете System.Machine_Code.
Оператор операция_кода должен появляться только в области видимости указания with_clause, которое упоминает пакет System.Machine_Code.
Статическая семантика
Содержимое библиотечного пакета System.Machine_Code (если предоставлено) определяется реализацией. Значение операций операция_кода определяется реализацией. Обычно каждое квалифицированное_выражение представляет машинный код или директиву ассемблера.
Разрешения для реализации
Реализация может устанавливать ограничения на операцию операция_кода. Реализация не обязана предоставлять пакет System.Machine_Code.
ПРИМЕЧАНИЯ
15 Реализация может предоставить определяемые реализацией псевдокоманды, задающие конвенции регистров и вызовов.
16 Функции машинного кода освобождаются от правила, что требуется оператор return_statement. На самом деле, операторы return_statement запрещены, так как разрешены только операторы операция_кода.
17 Вспомогательные подпрограммы (см. 6.3.1, «Правила соответствия») также могут использоваться для достижения вставки машинного кода. Доступ к языку ассемблера можно получить, используя функции в Приложении B, «Интерфейс с другими языками».
Примеры
Пример операции кода:
M : Mask;
процедура Set_Mask; псевдокоманда Inline(Set_Mask);
процедура Set_Mask; псевдокоманда Inline(Set_Mask);
процедура 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;