ВИКОРИСТАННЯ МАТЕМАТИЧНОГО СПІВПРОЦЕСОРА

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2013
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЕОМ Звіт про виконання лабораторної роботи № 3 з курсу „ Системне програмування” ВИКОРИСТАННЯ МАТЕМАТИЧНОГО СПІВПРОЦЕСОРА Мета: познайомитися з принципами роботи математичного співпроцесора і використати його можливості для обчислення арифметичних виразів. ТЕОРЕТИЧНІ ВІДОМОСТІ Математичний співпроцесор запускається центральним процесором. Після запуску він виконує всі обрахунки самостійно і паралельно з роботою центрального процесора. Якщо центральний процесор направляє наступну команду співпроцесору в той момент, коли співпроцесор ще не закінчив виконання попередньої команди, центральний процесор переводиться в стан очікування. Якщо ж співпроцесор не зайнятий, центральний процесор, направивши команду співпроцесору, продовжує свою роботу, не очікуючи завершення обрахунку. Послідовне розташування команд співпроцесора і центрального процесора в коді програми створюють ілюзію послідовного їх виконання. Простіше кажучи можлива така ситуація, що коли центральний процесор звернеться до комірки пам’яті, куди арифметичний співпроцесор повинен був записати результат своїх обчислень і якщо співпроцесор ще не закінчив обрахунки то результату там не буде. Однак є спеціальні засоби синхронізації (команда FWAIT). Префікс команд та адресація операндів Команди які призначенні для виконання співпроцесором, записуються в програмі як звичайні машинні команди центрального процесора, але всі вони починаються з байта, який відповідає команді центрального процесора ESC. Зустрівши таку команду, процесор передає її співпроцесору, а сам продовжує виконання програми з наступної команди. Асемблерна мнемоніка всіх команд співпроцесора починається з букви F, наприклад: FADD, FDIV, FSUB и так далі. Команди співпроцесора можуть адресувати операнди, аналогічно звичайним командам центрального процесора. Операндами можуть бути або дані, які розміщуються в основній пам’яті комп’ютера, або внутрішні регістри співпроцесора. Для команд арифметичного співпроцесора можливі всі види адресації даних, які використовуються центральним процесором. Формати даних Математичний співпроцесор може обробляти дані в форматі з плаваючою комою і цілі числа. Дійсні числа. В загальному вигляді дійсні числа в загальних обрахунках можна записати наступним чином: (знак)(мантиса)*10(знак)(порядок) Наприклад: -1.35*105 (мінус одна ціла тридцять п’ять сотих, помножені на десять в п’ятому степені). Тут знак: мінус, мантиса: 1.35, порядок: 5. Порядок теж може мати знак. Важливим є таке поняття, як нормалізоване представлення чисел: якщо ціла частина мантиси числа складається з однієї цифри, не рівної нулю, то число з плаваючою крапкою називається нормалізованим. Перевага використання нормалізованих чисел полягає в тому, що для фіксованої розрядної сітки числа (тобто для фіксованої кількості цифр в числі) нормалізовані числа мають найбільшу точність. Крім того, нормалізоване представлення виключає неоднозначність, яка може виникнути через те, що кожне число з плаваючою крапкою може бути представлене різними (ненормалізованими) способами (наприклад: 123.5678*10^5 = 12.35678*10^6 = 1.235678*10^7 = 0.1235678*10^8 ). При програмуванні на мовах високого рівня зустрічається наступне представлення чисел з плаваючою крапкою: (знак)(мантиса)E(знак)(порядок) Наприклад, -5.35E-2 означає число -5.35*10-2 (мінус п’ять цілих тридцять п’ять сотих, помножені на десять в мінус другому ступені). Арифметичний співпроцесор може працювати з дійсними числами в трьох форматах: - одинарної точності (4 байти) - подвійної точності (8 байт) - розширеної точності (10 байт) При будь-якому представленні. старший біт визначає знак дійсного числа: 0 - додатне число, 1 – від’ємне число. Всі числа, рівні по модулю, відрізняються лише цим бітом, оскільки для представлення від’ємних чисел доповняльний код не використовується, на відміну від центрального процесора. Арифметичний співпроцесор працює з нормалізованими двійковими числами. Двійкове число з плаваючою крапкою називається нормалізованим, якщо ціла частина мантиси рівна 1. З метою розширення розрядної сітки, ця одиниця не зберігається у форматах одинарної і подвійної точності. У форматі з розширеною точністю зберігається і "зайвий" біт цілої частини нормалізованого числа. Основна причина використання для обчислень розширеної точності - оберігання програми від можливої втрати точності обчислень, пов’язаної з великими відмінностями в порядках чисел, що беруть участь в арифметичних операціях. Поле порядку - це степінь числа 2, на який множиться мантиса, плюс зсув, рівний 127 для одинарної точності, 1023 - для подвійної точності і 16383 - для розширеної точності. Для того, щоб визначити абсолютне значення числа з плаваючою крапкою, можна скористатися наступними формулами: - Одинарна точність: 1.(цифри мантиси)*2Р-127 - Подвійна точність: 1.(цифри мантиси)* 2Р-1023 - Розширена точність: 1.(цифри мантиси)* 2Р-16383 Знак числа визначається старшим бітом. Наприклад: Маємо таке число представлено з одинарною точністю:  Для цього числа знаковий біт рівний 1 (від’ємне число), порядок рівний 126, мантиса - 11 (у двійковій системі числення). Значення цього числа рівне: 1.11 * 2(126-127)= -1.75 * 2^-1 = -0,875 Цілі числа. Арифметичний співпроцесор разом з дійсними числами здатний обробляти і цілі числа. Він має команди, що виконують перетворення цілих чисел в дійсні і назад. Можливий чотири формати цілих чисел: - ціле число; - коротке ціле число; - довге ціле число; -упаковане двійково-десяткове число. Ціле число займає два байти. Його формат повністю відповідає формату, що використовується центральним процесором. Для представлення від’ємних чисел використовується доповняльний код. Коротке ціле і довге ціле мають аналогічні формати, але займають, відповідно, 4 і 8 байт. Упаковане двійково-десяткове число займає 10 байт. Це число містить 18 десяткових цифр, розташованих по дві в кожному байті. Знак упакованого BCD числа знаходиться в старшому біті найлівішого байта. Решта біт старшого байта повинна бути рівні 0. Існують команди співпроцесора, які перетворюють числа у формат упакованих двійково-десяткових чисел з внутрішнього представлення в розширеному дійсному форматі. Якщо програма робить спробу перетворення в упакований формат ненормалізованих чисел, нечисел, нескінченності і т.ін., в результаті виходить невизначеність. Невизначеність в упакованому BCD форматі є числом, в якому два старші байти містять одиниці у всіх розрядах. Вміст решти восьми байтів довільний. При спробі використовувати таке упаковане число в операціях - фіксується помилка. main.cpp #include <iostream> #include <conio.h> #include <stdio.h> using namespace std; extern "C" int calc(char a, short b, char c, int d, short e); extern "C" const int K; int main() {//X=A1*(B2+C1)-D4/E2+K 45694 int a,b,c,d,e; cout << "X=A1*(B2+C1)-D4/E2+K (K=45694h).\n"; cout << "Please, enter your numbers:\n"; cout << "A1 = "; cin >> a; cout << "B2 = "; cin >> b; cout << "C1 = "; cin >> c; cout << "D4 = "; cin >> d; cout << "E2 = "; cin >> e; cout << endl << "Result(asm) = " << calc(a,b,c,d,e); cout << endl << "Result(c++) = " << a*(b+c)-d/e+K; getch(); return 0; } //calc.asm// .386 .model flat public _K .data _K dd 45694h x dd 0 .code _calc proc ;X=A1*(B2+C1)-D4/E2+K 45694 public _calc push ebp mov ebp,esp mov eax, [ebp+8] mov ebx, [ebp+12] add ebx, [ebp+16] mul bx mov ebx, eax mov eax, [ebp+20] mov ecx, [ebp+24] div cx sub ebx, eax mov eax, ebx add eax, _K pop ebp ret _calc endp END / Висновок: на даній лабораторній роботі я використав можливості математичного процесора у обчисленні виразів.
Антиботан аватар за замовчуванням

01.04.2014 22:04-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!