ВИКОРИСТАННЯ МАТЕМАТИЧНОГО СПІВПРОЦЕСОРА

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

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

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

Рік:
2011
Тип роботи:
Методичні вказівки до лабораторної роботи
Предмет:
Системне програмування

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

Міністерство освіти і науки, молоді та спорту України Національний університет “Львівська політехніка”  Кафедра ЕОМ ВИКОРИСТАННЯ МАТЕМАТИЧНОГО СПІВПРОЦЕСОРА Методичні вказівки до лабораторної роботи № 3 з курсу “ Системне програмування ” для студентів базового напряму 6.050102  -  “Комп’ютерна інженерія” Затверджено на засіданні кафедри ”Електронні обчислювальні машини” Протокол №  від року Львів – 2011 Використання математичного співпроцесора: Методичні вказівки до лабораторної роботи № 3 з курсу “ Системне програмування ” для студентів базового напряму 6.050102  -  “Комп’ютерна інженерія” / Укладачі: Мархивка В.С., Олексів М.В., Акимишин О.І., Мороз І.В., – Львів: Національний університет “Львівська політехніка”, 2011, 10  с. Укладачі Мархивка В.С., ст. викл. Олексів М. В., асистент Акимишин О.І., к.т.н., доцент Мороз І.В., ст. викл. Рецензенти Відповідальний за випуск: Мельник А. О., професор, завідувач кафедри ВИКОРИСТАННЯ МАТЕМАТИЧНОГО СПІВПРОЦЕСОРА Мета: познайомитися з принципами роботи математичного співпроцесора і використати його можливості для обчислення арифметичних виразів. ТЕОРЕТИЧНІ ВІДОМОСТІ Математичний співпроцесор запускається центральним процесором. Після запуску він виконує всі обрахунки самостійно і паралельно з роботою центрального процесора. Якщо центральний процесор направляє наступну команду співпроцесору в той момент, коли співпроцесор ще не закінчив виконання попередньої команди, центральний процесор переводиться в стан очікування. Якщо ж співпроцесор не зайнятий, центральний процесор, направивши команду співпроцесору, продовжує свою роботу, не очікуючи завершення обрахунку. Послідовне розташування команд співпроцесора і центрального процесора в коді програми створюють ілюзію послідовного їх виконання. Простіше кажучи можлива така ситуація, що коли центральний процесор звернеться до комірки пам’яті, куди арифметичний співпроцесор повинен був записати результат своїх обчислень і якщо співпроцесор ще не закінчив обрахунки то результату там не буде. Однак є спеціальні засоби синхронізації (команда 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 – від’ємне число. Всі числа, рівні по модулю, відрізняються лише цим бітом, оскільки для представлення від’ємних чисел доповняльний код не використовується, на відміну від центрального процесора. Арифметичний співпроцесор працює з нормалізованими двійковими числами. Двійкове число з плаваючою крапкою називається нормалізованим, якщо ціла частина мантиси рівна 1. З метою розширення розрядної сітки, ця одиниця не зберігається у форматах одинарної і подвійної точності. У форматі з розширеною точністю зберігається і "зайвий" біт цілої частини нормалізованого числа. Основна причина використання для обчислень розширеної точності - оберігання програми від можливої втрати точності обчислень, пов’язаної з великими відмінностями в порядках чисел, що беруть участь в арифметичних операціях. Поле порядку - це степінь числа 2, на який множиться мантиса, плюс зсув, рівний 127 для одинарної точності, 1023 - для подвійної точності і 16383 - для розширеної точності. Для того, щоб визначити абсолютне значення числа з плаваючою крапкою, можна скористатися наступними формулами: - Одинарна точність: 1.(цифри мантиси)*2Р-127 - Подвійна точність: 1.(цифри мантиси)* 2Р-1023 - Розширена точність: 1.(цифри мантиси)* 2Р-16383 Знак числа визначається старшим бітом. Наприклад: Маємо таке число представлено з одинарною точністю:  Для цього числа знаковий біт рівний 1 (від’ємне число), порядок рівний 126, мантиса - 11 (у двійковій системі числення). Значення цього числа рівне: 1.11 * 2(126-127)= -1.75 * 2^-1 = -0,875 Цілі числа. Арифметичний співпроцесор разом з дійсними числами здатний обробляти і цілі числа. Він має команди, що виконують перетворення цілих чисел в дійсні і назад. Можливий чотири формати цілих чисел: - ціле число; - коротке ціле число; - довге ціле число; -упаковане двійково-десяткове число. Ціле число займає два байти. Його формат повністю відповідає формату, що використовується центральним процесором. Для представлення від’ємних чисел використовується доповняльний код. Коротке ціле і довге ціле мають аналогічні формати, але займають, відповідно, 4 і 8 байт. Упаковане двійково-десяткове число займає 10 байт. Це число містить 18 десяткових цифр, розташованих по дві в кожному байті. Знак упакованого BCD числа знаходиться в старшому біті найлівішого байта. Решта біт старшого байта повинна бути рівні 0. Існують команди співпроцесора, які перетворюють числа у формат упакованих двійково-десяткових чисел з внутрішнього представлення в розширеному дійсному форматі. Якщо програма робить спробу перетворення в упакований формат ненормалізованих чисел, нечисел, нескінченності і т.ін., в результаті виходить невизначеність. Невизначеність в упакованому BCD форматі є числом, в якому два старші байти містять одиниці у всіх розрядах. Вміст решти восьми байтів довільний. При спробі використовувати таке упаковане число в операціях - фіксується помилка. Регістри співпроцесора Арифметичний співпроцесор має наступну систему регістрів: 8 регістрів загального призначення для роботи з даними (R0–R7, кожний розміром 10 байт), до яких можна звертатися тільки як до елементів стеку (де ST(0) – його вершина); регістр стану SR (два байта); регістр управління CR (два байта); регістр тегів TW (два байта); регістр вказівника команди FIP (шість байтів); регістр вказівника операнду команди FDIP (шість байтів). Числові регістри Числові регістри, як правило, в технічній літературі позначаються ST0 - ST7. Числові регістри використовуються за принципом стеку. Регістр стану в полі ST містить номер числового регістра, що є вершиною стеку. При виконанні команд як операнди можуть виступати числові регістри. В цьому випадку номер вказаного в команді регістра додається до вмісту поля ST регістра стану і таким чином визначається регістр, що використовується. Більшість команд після виконання збільшують поле ST регістра стану, записуючи результати своєї роботи в стек числових регістрів. Система команд математичного співпроцесора Можливі три формати команд співпроцесора, аналогічні форматам команд центральних процесорів фірми Intel. Це команди зі звертанням до оперативної пам’яті, команди зі звертанням до одного з числових регістрів і команди без операндів, заданих явним чином. Команди зі звертанням до пам’яті можуть займати від двох до чотирьох байт, залежно від способу адресації. Всі асемблерні мнемоніки команд співпроцесора починаються з букви F, тому їх легко відрізнити від команд центрального процесора. Команди співпроцесора можна розділити на декілька груп: команди пересилки данихарифметичні командикоманди порівнянь чиселтрансцендентні команди команди керування Команди пересилки даних призначені для завантаження чисел з оперативної пам’яті в числові регістри, записи даних з числових регістрів в оперативну пам’ять, копіювання даних з одного числового регістра в іншій. Арифметичні команди виконують такі операції, як додавання, віднімання, множення, ділення, знаходження квадратного кореня, знаходження часткового залишку, округлення і т.п. Команди порівняння порівнюють дійсні і цілі числа, виконують аналіз чисел. Трансцендентні команди призначені для обчислення різних тригонометричних, логарифмічних, показникових і гіперболічних функцій - sin, cos, tg і т.ін. Команди керування забезпечують установку режиму роботи арифметичного співпроцесора, його скидання і ініціалізацію, перехід співпроцесора в захищений режим роботи і т.д. Основні команди математичного співпроцесора Команда Функція Операнд 1 Операнд 2 Результат  Команди пересилки даних  FLD Завантажити відправник (змінна дійсного типу) до стеку (регістр ST(0)) відправник – ST(0)  FILD Завантажити відправник (змінна цілого типу) до стеку (регістр ST(0)) відправник – ST(0)  FST Копіювати значення зі стеку (регістр ST(0)) до приймача (змінна дійсного типу) приймач – приймач  FSTP Перенести значення зі стеку (регістр ST(0)) до приймача (змінна дійсного типу) приймач – приймач  FIST Копіювати значення зі стеку (регістр ST(0)) до приймача (змінна цілого типу) приймач – приймач  FISTP Перенести значення зі стеку (регістр ST(0)) до приймача (змінна цілого типу) приймач – приймач  FXCH Обмін значеннями регістрів ST(0) та відправника (інший регістр) відправник – –  FCMOVxx Група команд умовної пересилки даних приймач відправник ST(0)  Група команд умовної пересилки даних FCMOVxx  Команда Реальна умова Умова для команди FCOM  FCMOVE ZF = 1 Якщо рівні  FCMOVNE ZF = 0 Якщо нерівні  FCMOVB CF = 1 Якщо менше  FCMOVBE CF = 1 та ZF = 1 Якщо менше або рівні  FCMOVNB CF = 0 Якщо не менше  FCMOVNBE CF = 0 та ZF = 0 Якщо не менше або рівні  Основні команди математичного співпроцесора Команди управління FPU  FINIT Ініціювання роботи математичного співпроцесора FPU – – –  FSTCW Копіювання вмісту регістру CR до приймача (змінна розміром 2 байта або регістр загального призначення) приймач – змінна  FLDCW Копіювання відправника (змінна розміром 2 байта) до регістру CR відправник – CR  FSTSW Копіювання вмісту регістру SR до приймача (змінна розміром 2 байта або регістр AX) приймач – змінна або AX   Арифметичні команди математичного співпроцесора Співпроцесор використовує шість основних типів арифметичних команд: 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. Для чого використовується математичний співпроцесор? 2. Які формати даних може обробляти математичний співпроцесор? 3. Які числові регістри має співпроцесор? 4. Які регістри керування має співпроцесор? 5. Які групи команд має співпроцесор? 6. Які команди пересилки даних співпроцесора ви знаєте? 7. Які команди управління співпроцесора ви знаєте? 8. Які арифметичні команди FPU ви знаєте? ЛІТЕРАТУРА 1.Березко Л.О., Троценко В.В. Особливості програмування в турбо-асемблері. - Київ, НМК ВО, 1992. 2.Абель П.Язык ассемблера для ІBM PC и программирования. Пер. з англ.-М.,"Высшая школа",1992. 3. Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2 (2A & 2B): Instruction Set Reference, A-Z. – 2011. Режим доступу: http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-2a-2b-instruction-set-a-z-manual.html ЗАВДАННЯ Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу. Вхідні дані повинні вводитися з клавіатури, під час виконання програми в десятковому форматі зі знаком. Програма повинна складатися з двох модулів: головний модуль – створюється мовою С і має забезпечити ввід необхідних даних, виклик асемблерної процедури для обчислення виразу та вивід результату обчислень; модуль безпосередніх обчислень – здійснює всі необхідні арифметичні дії з використанням математичного співпроцесора; Переконатися у правильності роботи кожного модуля зокрема та програми загалом. Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї. Дати відповідь на контрольні запитання. ВАРІАНТИ ЗАВДАНЬ № Вираз K  1 X=A4+B2*C1-D2/E1+K 1254021  2 X=A4/B2+C3-D1*E1-K 202  3 X=K-B4+C2/D1-E1*F2 37788663  4 X=A1*(B2+C1)-D4/E2+K 45694  5 X=A2*B2-A2*C1-D4/E2+K 505  6 X=K+B2/C1-D2*F2-E1 6DD02316  7 X=A4/B2-C1*(D1+E2-K) 717  8 X=A8-B3+K-D2/E1+F1*B2 88  9 X=A1*B2-A1*C2+D2/(E1+K) 29  10 X=A4-B4/C2+K+E2*F1 2310  11 X=(A4-B3-K)*D1+E4/F2 311  12 X=K+B4/C2-D2*F2-E1 7055E0AC  13 X=A2/B1+C1*(D3+E2-K) 2513  14 X=A4-B1-K-D2/E1+F1*B1 614  15 X=A3+(B1*C2)-D4/E2+K 4569600F  16 X=A4/B2+C3-D1*E1+K 616  17 X=A4-K+C4/D2-E1*F1 1017  18 X=A1*(B2-C1)+D2/E1+K 56987018  19 X=A2*B2+A2*C1-D2/E1+K 4019  20 X=K+B4/C2-D1*F1-E2 18932020  21 X=A4/B2+C1*(D2 – E1+K) 21  22 X=K-B8-C4-D2/E1+F2*B1 45781022  23 X=A2*B2-C1+D4/E2+K 7AA02023  24 X=K-B2/C1+D3+E2*F2 74569024  25 X=(K-B8-C1)*D1+E4/F2 2B05025  26 X=A2+K+C2/D1-E1*F1 6C26  27 X=A2*B1+C4/(K-E1*F1) A77627  28 X=K+B4/C2+D3-E2/F1 3FF28  29 X=K-B1*C1+D3-F2/E1 12A0C029  30 X=K+B8-D2/C1+E1*F2 25630   ПРИКЛАД ВИКОНАННЯ Завдання: Написати програму, яка обчислює арифметичний вираз над знаковими даними, введеними в десятковій системі і результат виводить на екран в десятковій формі зі знаком. Заданий вираз: X=A+B Оскільки дані, що вводяться повинні бути знаковими і зберігати заданий розмір, проаналізуємо які значення можуть бути введені, а отже і отримані в результаті обчислень. Текст програми, яка повністю реалізовує завдання, приведений нижче.Програма передбачає ввід/вивід знакових даних з використанням функції С. Далі, застосовуються можливості арифметичного співпроцесора для обчислень всіх арифметичних дій. Для цього в сегменті даних передбачаємо змінні, що будуть використовуватися для обчислень. Вони повинні бути 4 або 8 байтними(згідно форматів даних для співпроцесора). Main.cpp Calc.asm  #include <stdio.h> extern "C" void calc(void); extern "C" { float A=0; float B=0; float X=0; }; int main() { printf("Please, enter your numbers:\n"); printf("A = "); scanf("%f",&A); printf("B = "); scanf("%f",&B); calc(); printf("X = %.4f\n",X); return 0; } .386 .model flat,c EXTRN A:SDWORD, B:SDWORD, X:SDWORD .data Afl dd 0 Bfl dd 0 .code calc PROC mov eax,A mov Afl,eax mov eax,B mov Bfl,eax fld Afl fld Bfl fadd fstp X ret calc ENDP END   НАВЧАЛЬНЕ ВИДАННЯ ВИКОРИСТАННЯ МАТЕМАТИЧНОГО СПІВПРОЦЕСОРА МЕТОДИЧНІ ВКАЗІВКИ до лабораторної роботи № 3 з дисципліни “ Системне програмування ” для студентів базового напряму 6.050102 -  “Комп’ютерна інженерія” Укладачі Мархивка В.С., ст. викл. Олексів М. В., асистент Акимишин О.І., к.т.н., доцент Мороз І.В., ст. викл. Редактор Комп’ютерне верстання Здано у видавництво . Підписано до друку Формат 70х100/16. Папір офсетний. Друк на різографі Умовн. друк. арк. Обл..-вид. арк.. Тираж прим. Зам.. Видавництво Національного університету “Львівська політехніка” Реєстраційне свідоцтво ДК №751 від 27.12.2001 р. Поліграфічний центр Видавництва Національного університету “Львівська політехніка” Вул.. Ф. Колесси, 2. Львів, 79000
Антиботан аватар за замовчуванням

20.05.2013 22:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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