TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Директивы inline 

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

                                              ┌────────────┐
             директива ──────────────────────>│  оператор  ├────────────>
              inline                          │  inline    │
                                              └────────────┘

             При вызове обычной процедуры или функции (включая те,  кото-
        рые содержат в себе операторы 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 }

             Обратите внимание  на отсутствие инструкций входа и выхода и
        инструкции возврата управления. Их присутствия не требуется, пос-
        кольку  при  вызове  этой функции содержащиеся в ней четыре байта
        просто включаются в текст программы.

         B.Pascal 7 & Objects/LR     - 445 -


             Директивы inline предназначены  только  для  очень  коротких
        (менее 10 байт) процедур и функций.

              Из-за того, что процедуры и функции типа inline имеют харак-
         тер макроопределений,  они не могут использоваться в качестве ар-
         гумента операции @ или в функциях Addr, Offs и Seg.

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz