Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
12.05.2015
Размер:
311.3 Кб
Скачать

Завдання на лабораторну роботу

Розрахувати функцію, задану варіантом, двома методами:

  • з використанням математичного співпроцесора.

  • з допомогою виклику стандартних функцій.

Візуально порівняти отримані результати.

Варіант визначається якXYY, деX–номер групи,YY–номер в списку.

N = XYY mod 5

N

Функція

0

Sin(x)

1

Cos(x)

2

Arccos(x)

3

Arcsin(x)

4

Arctg(x)

5

Exp(x)

6

Ln(x)

7

Sh(x)

8

Ch(x)

9

Tg(x)

Теоретичні відомості

В якості запам'ятовуючого пристрою в співпроцесора використовується 8 80-розрядних регістрів, організованих в структуру на зразок стека.

Типи даних, які розпізнаються співпроцесором

Усередині FPU числа зберігаються в 80-бітному форматі з плаваючою комою, для запису або читання з пам'яті можуть використовуватися:

• один з трьох форматів з плаваючою точкою (32, 64 і 80 біт),

• цілочисельні формати (16, 32 і 64 біта),

• 80-бітний BCD-формат.

32-Бітний формат чисел з плаваючою комою

31 30 23 22 0

+---+---------+-------------+

| S|E7 ...E0|M1M2 ...M23|

+---+---------+-------------+

Біт S - знак, біти E - зміщений порядок (8 біт), M - мантиса (23 біта).

Порядок називають зміщеним бо справжній порядок дорівнює E-127. Число E зберігається у вигляді невід'ємного числа в прямому коді.

• Для звичайних чисел допустимими значеннями порядку є все, крім 0 і 255.

• Якщо E = 0, то число чи є машинним нулем (+0 або -0), або є денормалізованним.

• Якщо E = 255, число являє + inf або-inf або NaN.

Мантиса являє собою дробову частину цієї мантиси (тобто, кома знаходиться зліва від M1). Якщо число нормалізоване (E не 0), то мається на увазі ціла частина M0 = 1. Для денормалізованних чисел (E = 0) мається на увазі M0 = 0.

Тобто, звичайні числа обчислюються за формулою:

N = (-1) ^ S * 2 ^ (E-127) * (1.M)

Наприклад:

+1.0 0 01111111 00000000000000000000000 (або 3F800000h)

+2.0 0 10000000 00000000000000000000000

-2.0 1 10000000 00000000000000000000000

Числа з плаваючою комою зберігаються в пам'яті у форматі Little endian, тобто молодші байти йдуть першими. Наприклад, число +1.0 буде зберігатися в пам'яті як:

00 00 80 3F

64-Бітний формат чисел з плаваючою комою

63 62 52 51 0

+---+-------------+-------------------+

| S|E7 ...E0|M1M2 ...M52|

+---+-------------+-------------------+

Цей формат повністю аналогічний попередньому, тільки порядок зміщений на 1023.

80-Бітний формат чисел з плаваючою комою

79 78 64 63 0

+---+---------------+-------------------------+

| S|E7 ...E0|M0M1 Ь2 ...M52|

+---+---------------+-------------------------+

Цей формат має дві відмінності:

• порядок зміщений на 16383;

• в мантиссу безпосередньо включений біт цілої частини M0. Він дорівнює 0 тільки для денормалізованних чисел, та1 у всіх інших випадках.

Система команд математичного співпроцесора

Структура стека і регістрів управління та стану співпроцесора Intel 8087, емулятор якого ми будемо використовувати в даній роботі, має наступний вигляд:

У мові Асемблера є спеціальна група команд, яка генерує коди співпроцесора і організує його взаємодію з головним процесором. Назви цих команд починаються з літери F, а наступні літери визначають тип операції.

Наприклад, всі команди завантаження і перетворень містять в мнемоніці букви ld і виконуються шляхом розміщення даних з плаваючою точкою в верхівку стека з попереднім зміною поточного значення покажчика стека st і перетворенням у внутрішню десятибайтну форму з плаваючою крапкою. Основна команда fld пересилає дані як з регістрів з плаваючою крапкою, що задаються у формі st [i], де i - номер необхідного регістра щодо верхівки стека, так і з будь-якої області головної пам'яті і задається за форматом:

[Мітка:] fld операнд-джерело

Команди fild і fbld задаються програмістом для перетворення цілочисельних даних в форму з плаваючою крапкою при завантаженні чотирьох-, восьми-і десятибайтних даних в співпроцесор з пам'яті. Буква i задає цілочисельні двійкові дані, буква b - десятибайтні двійково-десяткові дані в bcd-коді. Команди fst і fist задають копіювання вмісту верхівки стека st [0] з перетвореннями в формат, що відповідає визначенню області приймача. Команди вилучення з стека і перетворень даних: fstp, fistp і fbstp після перетворення даних звільняють відповідний регістр стека і зміщують покажчик стека. Команда fxch задає обмін регістра верхівки стека st [0] з регістром, заданим в операнді. Група безоперандних команд використовується для завантаження поширених констант в верхівку стека fldz - 0, fld1 - 1, fldpi - п, fldlg2 - lg 2, fldln2 - ln 2, fldl2t-log2 10, fldl2e - log2 e.

Якщо проміжні результати обчислення функцій поміщені в області пам'яті f1 і f2, то фрагмент програми для підсумовування даних має вигляд:

fld f1; Завантаження першого доданка

fld f2; Завантаження другого доданка

fadd; Підсумовування з вивільненнямстекаспівпроцесора

fstp result; Запам'ятовування результату в пам'яті

Слід запам'ятати:

• кількість елементів в стеку співпроцесора обмежена (максимум 8);

• стек «кільцевий»;

• при поміщенніданих у стек, TOP зменшується на 1 і даніпоміщуютьсяв нову вершину стека;

• при виштовхуванні даних з стека, дані зчитуються з вершини і TOP збільшується на 1;

• числа можуть бути завантажені тільки на вершину стека;

• вилучатись може тільки вершина стека.

Соседние файлы в папке SP_ukr