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

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

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

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

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

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

Міністерство освіти і науки Національний університет «Львівська політехніка» Кафедра ЕОМ Звіт до лабораторної роботи № 3 з дисципліни: “Системне програмування” на тему: Використання математичного співпроцесора Варіант - 19 ВИКОРИСТАННЯ МАТЕМАТИЧНОГО СПІВПРОЦЕСОРА Мета: ознайомитися з принципами роботи математичного співпроцесора і використати його можливості для обчислення арифметичних виразів з числами з плаваючою комою. ТЕОРИТИЧНІ ВІДОМОСТІ: Математичний співпроцесор запускається центральним процесором. Після запуску він виконує всі обрахунки самостійно і паралельно з роботою центрального процесора. Якщо центральний процесор направляє наступну команду співпроцесору в той момент, коли співпроцесор ще не закінчив виконання попередньої команди, центральний процесор переводиться в стан очікування. Якщо ж співпроцесор не зайнятий, центральний процесор, направивши команду співпроцесору, продовжує свою роботу, не очікуючи завершення обрахунку. Послідовне розташування команд співпроцесора і центрального процесора в коді програми створюють ілюзію послідовного їх виконання. Простіше кажучи можлива така ситуація, що коли центральний процесор звернеться до комірки пам’яті, куди арифметичний співпроцесор повинен був записати результат своїх обчислень і якщо співпроцесор ще не закінчив обрахунки то результату там не буде. Однак є спеціальні засоби синхронізації (команда FWAIT), що дозволять центральному процесорові дочекатися результатів роботи співпроцесора. Префікс команд та адресація операндів Команди які призначенні для виконання співпроцесором, записуються в програмі як звичайні машинні команди центрального процесора, але всі вони починаються з байта, який відповідає команді центрального процесора ESC. Зустрівши таку команду, процесор передає її співпроцесору, а сам продовжує виконання програми з наступної команди. Асемблерна мнемоніка всіх команд співпроцесора починається з букви F, наприклад: FADD, FDIV, FSUB и так далі. Команди співпроцесора можуть адресувати операнди, аналогічно звичайним командам центрального процесора. Операндами можуть бути або дані, які розміщуються в основній пам’яті комп’ютера, або внутрішні регістри співпроцесора. Для команд арифметичного співпроцесора можливі всі види адресації даних, які використовуються центральним процесором. Арифметичні команди математичного співпроцесора Співпроцесор використовує шість основних форматів арифметичних команд: Fxxx перший операнд - вершина стеку, другий - наступний елемент стеку, результат операції записується у вершину стеку: Fxxx пам’ять перший операнд - пам’ять, другим та приймачем є вершина стеку ST(0). Покажчик стеку ST не змінюється, команда для дійсних чисел з одинарною і подвійною точністю; Fixxx пам’ять аналогічно попередньому формату команди, але операндами можуть бути 16- або 32-розрядні цілі числа; Fxxx ST, ST(i) для цього формату регістр ST(i) є джерелом, а ST(0) - верхівка стеку - приймачем. Покажчик стеку не змінюється; Fxxx ST(i), ST для цього типу регістр ST(0) є джерелом, а ST(i) - приймачем. Покажчик стеку не змінюється; FxxxP ST(i), ST регістр ST(i) - приймач, регістр ST(0) - джерело. Після виконання команди джерело ST(0) витягується із стеку Символи "xxx" можуть приймати наступні значення: ADD - додавання; SUB - віднімання; SUBR - зворотне віднімання, тобто операнди міняються місцями; MUL - множення; DIV – ділення; DIVR - зворотне ділення, ділене і дільник міняються місцями. Окрім основних арифметичних команд є додаткові арифметичні команди: FSQRT - знаходження квадратного кореня; FSCALE - масштабування на ступінь числа 2; FPREM - обчислення часткової остачі; FRNDINT - заокруглення до цілого; FXTRACT - виділення порядку числа і мантиси; FABS - знаходження абсолютного значення (модуля) числа; FCHS - зміна знаку числа. ЗАВДАННЯ 1. Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу. Вхідні дані повинні вводитися з клавіатури, під час виконання програми, як дійсні числа зі знаком. Програма повинна складатися з двох модулів: головний модуль – створюється мовою С і має забезпечити ввід необхідних даних, виклик асемблерної процедури для обчислення виразу та вивід результату обчислень; модуль безпосередніх обчислень – здійснює всі необхідні арифметичні дії з використанням математичного співпроцесора. 2. Переконатися у правильності роботи кожного модуля зокрема та програми загалом. 3. Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї. 4. Дати відповідь на контрольні запитання. ВАРІАНТИ ЗАВДАННЯ: Вираз K  X=A2*B2+C1-D2/E1+K 4019   А, В, С, D, E, F - дійсні числа, де індекс визнає точність внутрішнього подання (1 - одинарної, 2 – подвійної точності). Константу К подано у 16-му форматі. КОД ПРОГРАМИ: Файл(main.cpp) #include <stdio.h> extern "C" long double calc(long double, double, float, double, float, int); void main() { const int k = 4019; double a, b, d; float c, e; long double res; printf("Enter numbers:\n"); printf("A = "); scanf("%lf", &a); printf("B = "); scanf("%lf", &b); printf("C = "); scanf("%f", &c); printf("D = "); scanf("%lf", &d); printf("E = "); scanf("%f", &e); res = a * b + c - d / e + k; printf("Result in C: %f\n", res); res = calc(a, b, c, d, e, k); printf("Result in ASM: %f\n", res); } Файл(calc.asm) .586 .model flat, c .data .code calc PROC push ebp mov ebp,esp ;----------------------------- fld qword ptr [ebp+8] ;завантаження A fmul qword ptr [ebp+16] ;множення на B fadd dword ptr [ebp+24] ;додавання С fld qword ptr [ebp+28] ;завантаження D fdiv dword ptr [ebp+36] ;ділення на E fsub ;віднімання ST(1)- ST(0) fiadd dword ptr [ebp+40] ;додававння констант ;----------------------------- pop ebp ret calc ENDP END РЕЗУЛЬТАТ ВИКОНАННЯ: / Рис.1 результат роботи програми ВИСНОВОК: На даній лабораторній роботі я здобув навички з принципу роботи математичного співпроцесора і використання його можливості для обчислення арифметичних виразів з числами з плаваючою комою, а саме з програмними типами одинарної, подвійної і подвійної розширеної точності.
Антиботан аватар за замовчуванням

10.02.2017 12:02-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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