Обчислення елементарних функцій на математичному співпроцесорі

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

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

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

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

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

Міністерство освіти і науки Національний університет «Львівська політехніка» Кафедра ЕОМ Звіт до лабораторної роботи № 4 з дисципліни: “Системне програмування” на тему: Обчислення елементарних функцій на математичному співпроцесорі ОБЧИСЛЕННЯ ЕЛЕМЕНТАРНИХ ФУНКЦІЙ НА МАТЕМАТИЧНОМУ СПІВПРОЦЕСОРІ Мета: познайомитися з принципами роботи математичного співпроцесора та оволодіти навиками використання вбудованих елементарних математичних функцій та реалізації розгалужень. ТЕОРИТИЧНІ ВІДОМОСТІ: Команди порівняння чисел У центральному процесорі команди умовних переходів виконуються відповідно до значень окремих бітів регістра прапорців процесора. У арифметичному співпроцесорі існують спеціальні команди порівнянь, за наслідками виконання яких, встановлюються біти кодів умов в регістрі стану: FCOM – порівняння; FICOM – порівняння цілих чисел; FCOMP - порівняння дійсних чисел і вилучення зі стеку; FICOMP - порівняння цілих чисел і вилучення зі стеку; FCOMPP - порівняння і подвійне вилучення зі стеку (ST(0), ST(1)); FTST - порівняння операнда з нулем; FXAM - аналіз операнда на тип числа (скінчене число, денормалізоване число, нуль, некінечність, ...). Трансцендентні команди Трансцендентні команди призначені для обчислення наступних функцій: тригонометричні (sin, cos, tg...) зворотні тригонометричні (arcsin, arccos...) показникові (xy , 2x , 10x , ex ) гіперболічні (sh, ch, th...) зворотні гіперболічні (arsh, arch, arcth...) Ось список всіх трансцендентних команд математичного співпроцесора: FPTAN - обчислення часткового тангенса; FPATAN - обчислення часткового арктангенса; FYL2X - обчислення y*log2(x); FYL2XP1 - обчислення y*log2(x+1); F2XM1 - обчислення 2x-1; FCOS - обчислення cos(x); FSIN - обчислення sin(x); FSINCOS - обчислення sin(x) і cos(x) одночасно. Команди керування Команди, керування, призначені для роботи з нечисловими регістрами співпроцесора. Деякі команди мають альтернативні варіанти. Мнемоніки цих команд можуть починатися з FN або F. Перший варіант відповідає командам “Без очікування”. Для таких команд процесор не перевіряє, чи зайнятий співпроцесор виконанням команди, тобто біт зайнятості B не перевіряється. Особливі випадки також ігноруються. Варіанти команд “З очікуванням” діють так само, як і звичайні команди співпроцесора. Ось список команд керування для співпроцесора: FNSTCW (FSTCW) - записати управляюче слово (записує вміст регістра управління в оперативну пам’ять). FLDCW - завантажити управляюче слово (завантажує регістр управління з оперативної пам’яті і, як правило, використовується для зміни режиму роботи співпроцесора). FNSTSW (FSTSW) - записати слово стану (записує вміст регістра стану в оперативну пам’ять). FNSTSW AX (FSTSW AX) - записати слово стану в AX (записує вміст регістра стану в регістр AX центрального процесора, де можливий аналіз вмісту за допомогою команд умовних переходів). FNCLEX (FCLEX) - скинути особливі випадки (скидає прапорці особливих випадків в регістрі стану співпроцесора, також скидаються біти ES і B). FNINIT (FINIT) - ініціалізувати співпроцесор (ініціалізує регістр стану, регістр управління, і регістр тегів таким чином: регістр управління - проектна нескінченість, округлення до найближчого, розширена точність, всі особливі випадки замасковані; ЗАВДАННЯ Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу. Вхідні дані повинні вводитися з клавіатури, як дійсні числа. Програма повинна складатися з двох модулів: головний модуль – створюється мовою С і має забезпечити ввід необхідних даних, виклик асемблерної процедури для обчислення виразу та вивід результату обчислень; модуль безпосередніх обчислень – здійснює всі необхідні арифметичні дії з використанням математичного співпроцесора. Переконатися у правильності роботи кожного модуля зокрема та програми загалом. Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї. Дати відповідь на контрольні запитання. ВАРІАНТИ ЗАВДАННЯ: Варіант Завдання   19    Примітка: ai – елементи масиву дійсних чисел подвійної точності; c та d - дійсні числа одинарної точності. КОД ПРОГРАМИ: Файл(main.cpp) #include <cmath> #include <iostream> #define SIZE 4 using namespace std; extern "C" float calc(float, float, double); void main() { double a[SIZE]; float c, d; double x; cout << "Enter a (4 elements): "; for (int i = 0; i < SIZE; i++) cin >> a[i]; cout << "Enter c: "; cin >> c; cout << "Enter d: "; cin >> d; for (int i = 1; i < SIZE+1; i++) { if (c > d) x = (2 * c - d + sqrt(23 * a[i])) / (a[i] / 4 - 1); else x = (c + 4 * d - sqrt(123 * c)) / (1 - a[i] / 2); cout << "\n\tResult" << i << endl; cout << "Result in C: " << x << endl; cout << "Result in ASM: " << calc(c, d, a[i]) << endl; } } Файл(calc.asm) .586 .model flat, c .data const_1 dd 1 const_2 dd 2 const_4 dd 4 const_23 dd 23 const_123 dd 123 .code calc PROC push ebp mov ebp, esp ;-------------------- finit fld dword ptr[ebp+8] ;завантаження c fcom dword ptr[ebp+12] ;порівняння з d fstsw ax ;формування прапорців sahf ja __more ;якщо c>d переходимо на _more ;---------------------------------(при c <= d) fld dword ptr[ebp+12] ;завантаження d fimul const_4 fadd fld dword ptr[ebp+8] ;завантаження c fimul const_123 fsqrt ;обчислення кореня Ст(0) fsub ;обчислення знаменника fild const_1 fld qword ptr[ebp+16] ;завантаження а fidiv const_2 fsub fdiv ;ділення чисельника на знаменник jmp __end ;---------------------------------(при c > d) __more: fimul const_2 fsub dword ptr[ebp+12] ;віднімання d fld qword ptr[ebp+16] ;завантаження a fimul const_23 fsqrt ;знайти корінь від Ст(0) fadd ;обчислення знаменника fld qword ptr[ebp+16] ;завантаження а fidiv const_4 fisub const_1 fdiv ;ділення чисельника на знаменник __end: ;-------------------- pop ebp ret calc ENDP END РЕЗУЛЬТАТ ВИКОНАННЯ:  Рис.1 Вміст консолі після виконання команди ВИСНОВОК: На даній лабораторній роботі вивчив принципи роботи математичного співпроцесора, навчився використовувати вбудовані елементарні математичні функції та реалізовувати розгалуження. Також результат виконання асемблерного модуля порівнюю з результатом отриманим засобами мови С я отримав одинакові результати, що свідчить про коректність результату.
Антиботан аватар за замовчуванням

10.02.2017 12:02-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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