Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Директивы inline

Директивы inline позволяют писать процедуры и функции, кото-

рые преобразуются при каждом вызове в заданную последовательность

инструкций, представляющих собой машинный код. Синтаксис у дирек-

тивы inline такой же, как у оператора inline:

-------------

директива ---------------------->¦ оператор +------------>

inline ¦ inline ¦

L-------------

При вызове обычной процедуры или функции (включая те, кото-

рые содержат в себе операторы inline) компилятором генерируется

такой код, в котором параметры (если они имеются) помещаются в

стек, а затем уже для обращения к процедуре или функции генериру-

ется инструкция CALL. Однако, когда вы обращаетесь к процедуре

или функции типа inline, компилятор вместо инструкции CALL гене-

рирует код из директивы inline. Вот короткий пример двух директив

inline:

procedure DisableInterrupts; inline($FA); { CLI }

procedure EnableInterrupts; inline($FB); { STI }

Когда вызывается процедура DisableInterrupt то генерируется

один байт кода - инструкция CLI.

Процедуры или функции, описанные с помощью директив inline,

могут иметь параметры, однако на параметры нельзя ссылаться сим-

волически (хотя для других переменных это допускается). К тому

же, поскольку такие процедуры или функции фактически являются

макрокомандами, у них отсутствуют автоматический код с инструкци-

ями входа или выхода и никаких инструкций возврата управления не

требуется.

Следующая функция выполняет умножение двух целых значений, в

результате чего получается число длинного целого типа:

function LongMul(X,Y : Integer): Longint;

inline(

$58/ { POP DS ; извлечь из стека Y }

$5A/ { POP AX ; извлечь из стека X }

$F7/$EA); { IMUL DX ; DX:AX = X*Y }

Обратите внимание на отсутствие инструкций входа и выхода и

инструкции возврата управления. Их присутствия не требуется, пос-

кольку при вызове этой функции содержащиеся в ней четыре байта

просто включаются в текст программы.

Директивы inline предназначены только для очень коротких

(менее 10 байт) процедур и функций.

Из-за того, что процедуры и функции типа inline имеют харак-

тер макроопределений, они не могут использоваться в качестве ар-

гумента операции @ или в функциях Addr, Offs и Seg.

Соседние файлы в предмете Программирование на Pascal