DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ / Лабораторна робота №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:33

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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