Лабораторная работа №10.
Тема: Ассемблерные вставки в T .Pascal.
Цель:
Ход работы:
1. Изучение теоретического материала:
2. Выполнение заданий .
3. Задание на дом.
4. Защита лабораторной работы.
1. Изучение теоретического материала.
Паскаль предоставляет пять способов включения ассемблерных фрагментов в программу:
· Оператор asm;
· Процедуры и функции с директивой assembler;
· Оператор inline;
· Директивы {$L имя} и exeternal;
· Процедуры и функции с директивой inline;
Во встроенном ассемблере имеются перечисленные ниже зарезервированные идентификаторы:
AL CS HIGH SHL
AND CX LOW SHR
AX DH MOD SI
BH DI NEAR SP
BL DL NOT SS
BP DS OFFSET ST
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 фактически являются макрокомандами, для которых код с инструкциями входа и выхода автоматически не генерируется и никаких инструкций возврата управления не требуется.
2. Выполнение заданий .
1. Используя встроенный ассемблер в Паскале, подсчитать n- й член ряда чисел Фибоначчи.
2. Используя встроенный ассемблер в Паскале, подсчитать суммы двух квадратов
3. Используя встроенный ассемблер в Паскале, вычислить xn.
3. Задание на дом.
1. Используя встроенный ассемблер в Паскале, подсчитать n- й член ряда ex.
2. Используя встроенный ассемблер в Паскале, подсчитать n-й член ряда sin(x).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.