Изучение теоретического материала. Выполнение заданий

Страницы работы

Содержание работы

Лабораторная работа №10.

Тема: Ассемблерные вставки в T .Pascal.

Цель:

Ход работы:

1. Изучение теоретического материала:

2. Выполнение заданий .

3. Задание на дом.

4. Защита лабораторной работы.

1.  Изучение теоретического материала.

Паскаль предоставляет пять способов включения ассемблерных фрагментов в программу:

·  Оператор asm;

·  Процедуры и функции с директивой assembler;

·  Оператор inline;

·  Директивы {$L имя} и exeternal;

·   Процедуры и функции с директивой inline;

Во встроенном ассемблере имеются перечисленные ниже зарезервированные идентификаторы:

AH              CL                   FAR           SEG

AL               CS                   HIGH         SHL

AND            CX                   LOW         SHR

AX               DH                   MOD         SI

BH               DI                    NEAR         SP

BL               DL                   NOT            SS

BP               DS                    OFFSET    ST

BX              DWORD          OR              TBYTE

BYTE         DX                    PTR            TYPE

CH              ES                     QWORD     XOR

                                                                  WORD

А) Оператор asm.

Этот оператор записывается аналогично составному оператору и имеет следующую структуру:

Asm

                       Ассемблерные команды

End;

Данный оператор может располагаться в любом месте операторного блока программы и включает синтаксически корректные фрагменты ассемблерного текста.

Оператор asm можно использовать также в процедурах и функциях. В этом случае автоматически генерируется код входа и выхода из процедуры/функции. Чтобы функция возвращала правильный результат, итоговое значение функции следует занести в специальную переменную @ Result. Кроме того, в ассемблерном коде вместо обычных паскалевских меток допускается использование необъявленных меток, которые начинаются с символа @.

Б) Директива assembler.

Директиву assembler можно использовать в тех случаях, когда весь операторный блок процедуры или функции состоит из ассемблерных команд.

Процедуры/функции с директивой assembler имеют следующие особенности по сравнению с процедурами/функциями, не использующими ее:

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

·  компилятор не выделяет память для результата функции, и ссылки на идентификатор @ Result будет ошибкой. Функции со строковым результатом являются исключением из этого правила;

·  функции, использующие директиву assembler, должны возвращать   результат следующим образом

-  результаты функций порядкового типа возвращаются в регистре AL для 8-разрядных значений, в регистре AX для 16-разрядных значений или в паре регистров DX, AX для 32-разрядных значений;

-  результаты функций вещественного типа возвращаются в регистрах DX, BX, AX;

-  результаты функций типов, использующих инструкции сопроцессора 8087 (Single, Double, Extended, Comp) возвращаются в регистре стека сопроцессора ST(0);

-  результаты функций указательного типа возвращаются в паре регистров DX, AX;

-  результаты функций строкового типа возвращаются во временной ячейке которую указывает @ Result.

В) Директивы {$L имя} и External.

Директива компилятора {$ имя файла} позволяет в паскалевскую программу включить подпрограмму в объектном коде (в файле с расширением .OBJ), полученную с помощью ассемблера. Вставка кода подпрограммы выполняется в точке расположения директивы {$ имя файла}.

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

Г) Оператор inline.  

Операторы inline позволяют вставить инструкции машинного кода непосредственно в программу. Оператор inline состоит из зарезервированного слова inline, за которым в круглых скобках располагаются записи машинного кода, разделенной косой чертой. Такие операторы могут свободно чередоваться с другими операторами языка Паскаль.

Д) Директива inline.

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

   Использование директивы inline имеет следующие особенности:

·  на параметры процедур и функций inline нельзя ссылаться по их идентификаторам;

·  процедуры и функции inline фактически являются макрокомандами, для которых код с инструкциями входа и выхода автоматически не генерируется и никаких инструкций возврата управления не требуется.

2.  Выполнение заданий .

1.  Используя встроенный ассемблер в Паскале, подсчитать n- й член ряда чисел Фибоначчи.

2. Используя встроенный ассемблер в Паскале, подсчитать суммы двух квадратов


3. Используя встроенный ассемблер в Паскале, вычислить xn.

3. Задание на дом.

1. Используя встроенный ассемблер в Паскале, подсчитать n- й член ряда ex.

2. Используя встроенный ассемблер в Паскале, подсчитать n-й член ряда sin(x).

Похожие материалы

Информация о работе

Тип:
Задания на лабораторные работы
Размер файла:
33 Kb
Скачали:
0