TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

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

Странности

FAQ

Ссылки

Форум

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

Рассылка

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

Об авторе

 

 

Классы выражений 

             Выражения встроенного ассемблера подразделяются на три клас-
        са:  регистровые  значения,  ссылки  на память и непосредственные
        значения.

             Выражение, состоящее только из имени регистра,  является ре-
        гистровым значением.  Примерами регистровых значений являются AX,
        CL, DI и ES. Используемые в качестве операндов, регистровые выра-
        жения указывают ассемблеру на необходимость генерировать инструк-
        ции, которые работают с регистрами ЦП.

             Выражения, обозначающие адреса памяти,  являются ссылками на
        память. К этой категории относятся метки Паскаля, переменные, ти-
        пизованные константы, процедуры и функции.

             Выражения, которые не являются регистровыми и не  связаны  с
        ячейками памяти,  представляют  собой  непосредственные значения.
        Эта группа включает в себя нетипизированные константы и идентифи-
        каторы типа.

             Непосредственные значения и ссылки на память при использова-
        нии их в качестве операндов приводят к генерации различного кода.
        Например:

             const
               Start = 10;
             var
               Count: Integer;
                .
                .
                .
             asm
               mov        ax,Start           { MOV AX,xxxx }
               mov        bx,Count           { MOV BX,[xxxx] }
               mov        cx,[Start]         { MOV CX,[xxxx] }
               mov        dx,OFFSET Count    { MOV DX,xxxx }
             end;

             Поскольку Start - это непосредственное значение, первая инс-
        трукция  MOV ассемблируется в непосредственную инструкцию. Однако
        вторая инструкция MOV транслируется в инструкцию,  ссылающуюся на
        память,  так как Count - это ссылка на память. В третьей инструк-
        ции MOV для преобразования Start в ссылку  на  память  (в  данном
        случае слово со смещением 10 в сегменте данных) используется опе-
        рация квадратных скобок.  В четвертой инструкции MOV для преобра-
        зования  Count в непосредственное значение (смещение Count в сег-
        менте данных) используется операция OFFSET.

             Как вы  можете  видеть,  квадратные скобки и операция OFFSET
        дополняют друг друга.  В терминах результирующего машинного  кода
        следующий  оператор asm идентичен первым двум строкам предыдущего
        оператора asm:

             asm
               mov       ax,OFFSET [Start]
               mov       bx,[OFFSET Count]
             end;

             Ссылки на память и непосредственные значения классифицируют-
        ся, в свою очередь,  как перемещаемые и абсолютные выражения. Пе-
        ремещаемое выражение обозначает значение, которое требует на эта-
        пе компоновки перемещения, а абсолютное выражение обозначает зна-
        чение, которое такого перемещения не требует. Обычно выражение со
        ссылкой на метку, переменную процедуру или функцию является пере-
        мещаемым,  а выражение,  где операции выполняются исключительно с
        константами - абсолютным.

             Перемещение является процессом, с помощью которого компонов-
        щик присваивает идентификаторам абсолютные адреса.  На этапе ком-
        поновки компилятору неизвестны конечные адреса метки, переменной,
        процедуры или функции. Они не будут известны до этапа компоновки,
        на  котором компоновщик присваивает идентификатору конкретный аб-
        солютный адрес.

             Встроенный ассемблер  позволяет вам выполнять любую операцию
        с абсолютным значением,  но операции с  перемещаемыми  значениями
        ограничиваются сложением и вычитанием констант.

Содержание

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

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

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

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

Hosted by uCoz