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

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

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

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

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

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

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

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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