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

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

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

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

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

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ / Лабораторна робота №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 – від’ємне. Числа, що рівні за модулем, відрізняються лише цим бітом, оскільки для представлення від’ємних чисел доповняльний код не використовується, на відміну від центрального процесора. Завдання Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу. Вхідні дані повинні вводитися з клавіатури, під час виконання програми в десятковому форматі зі знаком. Програма повинна складатися з двох модулів: головний модуль – створюється мовою С і має забезпечити ввід необхідних даних, виклик асемблерної процедури для обчислення виразу та вивід результату обчислень; модуль безпосередніх обчислень – здійснює всі необхідні арифметичні дії з використанням математичного співпроцесора; Переконатися у правильності роботи кожного модуля зокрема та програми загалом. Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї. Дати відповідь на контрольні запитання. Варіант завдання: А, В, С, D, E, F - знакові операнди, довжиною в байтах, згідно з індексу, значення К подано у 16-му форматі. / Лістинг програми: Модуль С #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> extern"C" float calc(); extern"C" { float A, B, C_, D, E; }; int main() { printf("A="); scanf_s("%f", &A); printf("B="); scanf_s("%f", &B); printf("\nC="); scanf_s("%f", &C_); printf("\nD="); scanf_s("%f", &D); printf("\nE="); scanf_s("%f", &E); calc(); printf("Result=%f", calc()); return 0; } Модуль С #include <stdio.h> extern "C" void Printf(float value) { printf("Result ASM = %f\n", value); return; } Модуль ASM .586 .model flat,c Printf PROTO near C : dword EXTRN A:SDWORD, B:SDWORD,C_:SDWORD,D:SDWORD,E:SDWORD PUBLIC calc .data K dd 29h temp1 dd 0 temp2 dd 0 ;X=(K-B-C)*D+E/F .code calc PROC push ebp mov ebp,esp fld E fadd K fdivr D fld A fmul C_ fsub fld A fmul B fadd fst temp2 fld temp2 invoke Printf, temp2 pop ebp ret calc ENDP END Результати виконання програми: / Рис. 1 Вікно з результатом виконаної програми Висновок: на даній лабораторній роботі я ознайомився з принципами роботи математичного співпроцесора і використав його можливості для обчислення арифметичних виразів з числами з плаваючою комою.
Антиботан аватар за замовчуванням

11.05.2019 10:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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