Розроблення алгоритму і програми а NASM асемблері для додавання / множення чисел з плаваючою крапкою

Розробка алгоритму роботи програми, її загальна характеристика та функціональні особливості, умови ефективного використання. Способи виклику та адреса завантаження, відомості про використання оперативної пам'яті. Посібник системного програміста.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 07.06.2016
Размер файла 182,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Курсова робота

Розроблення алгоритму і програми а NASM асемблері для додавання / множення чисел з плаваючою крапкою

Вступ

програма алгоритм системний

Відповідно до завдання, в програмі використовується формат числа з плаваючою крапкою.

Число з плаваючою крапкою - форма представлення дійсних чисел, в якій число зберігається у формі мантиси і показника степеня.

Число з плаваючою крапкою має фіксовану відносну точність, залежну від кількості розрядів мантиси, і змінювану абсолютну. Найбільш часто використовувані представлення затверджено в стандарті IEEE 754. Реалізація математичних операцій з числами з рухомою комою в обчислювальних системах може бути як апаратною, так і програмною.

Існує кілька способів того, як рядки з цифр можуть представляти числа:

· Найбільш поширений шлях подання значення числа з рядка з цифрами - у вигляді цілого числа - кома (radix point) за замовчуванням розташований наприкінці рядка.

· Загалом, в математичному поданні рядок з цифр може мати яку завгодно довжину, а положення коми позначається шляхом явного записи символу коми (або, на Заході, крапки) в потрібному місці.

· У системах з поданням чисел у форматі з фіксованою комою існує певна умова щодо положення коми. Наприклад, в рядку з 8 цифр умова може вказувати положення коми в середині запису (між 4-й і 5-й цифрою). Таким чином, рядок «00012345» позначає число 1,2345 (нулі ліворуч завжди можна відкинути).

· В експоненційної запису використовують стандартний (нормалізований) вид представлення чисел. Число вважається записаним в стандартному (нормалізованому) вигляді, якщо воно записане у вигляді, де, зване мантисою, таке, що, - ціле, називається показником ступеня та - ціле, основу системи числення (на письмі це зазвичай 10). Тобто у мантиси кома поміщається одразу після першої значущої (не дорівнює нулю) цифри, рахуючи з ліва направо, а подальший запис дає інформацію про дійсне значення числа. Наприклад, період обертання (на орбіті) супутника Юпітера Іо, який дорівнює 152853,5047 с, в стандартному вигляді можна записати як 1,528535047Ч105 с. Побічним ефектом обмеження на значення мантиси є те, що в такому записі неможливо зобразити число 0.

· Запис з плаваючою комою схожий на запис чисел в стандартному вигляді, але мантиса та експонента записуються роздільно. Запис з плаваючою комою схожий на запис чисел в стандартному вигляді, але мантиса та експонента записуються роздільно. Повертаючись до прикладу з Іо, запис у формі з плаваючою комою буде 1528535047 з показником 5. Це означає, що записане число в 105 разів більше числа 1,528535047, тобто для отримання потрібного числа кома зсувається на 5 розрядів вправо. Однак, запис у формі з плаваючою комою використовується переважно в електронному поданні чисел, при якому використовується основа системи числення 2, а не 10. Крім того, в двійковій системі запису мантиса зазвичай денормалізована, тобто кома йде до першої цифри, а не після, і ціла частини взагалі не розглядається - так з'являється можливість значення 0 зберегти природним чином. Таким чином, десяткова 9 в двійковому представленні з плаваючою комою буде записана як мантиса +1001000… 0 і показник +0… 0100. Звідси, наприклад, біди з двійковим поданням чисел типу однієї десятої (0,1), для якої двійкове подання мантиси виявляється періодичним двійковим дробом - за аналогією з дробом 1/3, який не можна записати з кінцевою кількістю цифр в десятковій системі числення.

Запис числа у формі з рухомою комою дозволяє робити обчислення над широким діапазоном величин, поєднуючи фіксовану кількість розрядів та точність. Наприклад, у десятковій системі подання чисел з рухомою комою (3 розряду) операцію множення, яка запишется так:

0,12 Ч 0,12 = 0,0144

1. Постановка задачі

Додавання чисел з фіксованою комою у цифрових обчислювальних машинах може виконуватися в одному з машинних кодів: прямому, оберненому або доповняльному. Суму також отримаємо в одному з цих кодів. При реалізації операції додавання знаковий розряд й інформаційна частина числа розглядаються як єдине ціле, в результаті чого з від`ємними числами машина оперує як і з додатніми. Головна перевага такого методу полягає в тому, що правильний знак суми отримується автоматично в процесі додавання знакових цифр операндів і цифри переносу з сусіднього молодшого розряду. У випадку виникнення одиниці переносу зі знакового розряду суми її потрібно відкинути при додаванні в доповняльному коді і додати до молодшого інформаційного розряду суми при додаванні в оберненому коді (тобто виконати циклічний перенос одиниці переповнення).

Для виявлення переповнення розрядної сітки при додаванні вводиться допоміжний розряд у знакову частину зображення числа, що називають розрядом переповнення. Таке подання числа називається модифікованим кодом.

Знакова частина позитивного числа містить цифри 00, а від'ємного 11. Ознакою переповнення розрядної сітки є наявність у знаковій частині цифр 01 або 10.

Додавання у прямому коді виконується тільки над числами одного знаку. Числа з різними знаками підсумовують в оберненому або доповняльному коді.

Машинна операція додавання чисел з плаваючою комою здійснюється в шість наступних етапів:

· вирівнюються порядки доданків: менший порядок збільшується до більшого, а мантиса числа зсувається вправо на відповідну кількість розрядів;

· виконується перетворення мантис доданків в один з модифікованих кодів (обернений чи доповняльний);

мантиси доданків додаються;

· у разі необхідності мантиса суми переводиться в прямий код;

· виконується нормалізація суми;

· виконується корекція порядку результату.

Число вважається нормалізованим, якщо старший інформаційний розряд дорівнює одиниці. Також слід зауважити, що додавання мантис здійснюється в оберненому або доповняльному кодах. Якщо мантиса результату додавання нормалізована, то до цього результату приписуємо порядок будь-якого з операндів. В протилежному випадку відбувається нормалізація числа. В процесі виконання операції додавання можеливе порушення нормалізації справа та зліва. Ознакою порушення нормалізації числа справа є наявність різних цифр у знакових розрядах. У цьому випадку необхідно зсунути число вправо на один розряд. А ознака порушення нормалізації числа зліва - це присутність однакових цифр в розряді переповнення і в старшому розряді цифрової частини. Він показує на необхідність зсуву числа вліво на один розряд.

Кожний зсув мантиси вліво при нормалізації веде до зменшення порядку результату додавання на одиницю. А кожний зсув мантиси вправо - до збільшення. Таким чином відбувається корекція порядку.

Операція множення

Найпростіше множення виконується у прямому коді. У разі представлення чисел з фіксованою комою воно реалізується у два етапи. На першому етапі визначається знак добутку шляхом додавання за модулем два цифр знакових розрядів співмножників (табл. 1.1). На другому етапі здійснюється множення модулів співмножників, потім, у разі потреби, округлення модуля добутку, після чого до модуля результату дописується його знак, що визначений на першому етапі.

Таблиця 1.1 - Правила визначення знаку добутку

Обчислення вручну

Обчислення в машині

В залежності від способу формування суми часткових добутків розрізняють чотири основних методи виконання множення та відповідно чотири структури АЛП для цієї операції.

Метод 1. Множення, починаючи з молодших розрядів множника, з зсувом часткових добутків вправо при нерухомому множеному. Послідовність дій в кожному циклі виконання множення визначаються молодшим розрядом регістра множника, куди послідовно одна за одною надходять цифри множника. Оскільки по мірі зсуву множника вправо старші розряди регістра множника звільняються, він може бути використаний для збереження молодших розрядів добутку, що надходять з молодшого розряду суматора часткових добутків по мірі виконання множення.

Метод 2. Множення, починаючи з молодших розрядів множника при зсуві множеного вліво та нерухомій сумі часткових добутків. Послідовність дій визначається, як і в першому варіанті, молодшим розрядом регістра множника. При цьому методі регістр множеного та суматор часткових добутків повинні мати подвійну довжину.

Метод 3. Множення, починаючи зі старших розрядів множника, при зсуві суми часткових добутків вліво та нерухомому множеному. Послідовність дій виконання множення визначається старшим розрядом регістра множника. Даний метод потребує додаткового в порівнянні з першим методом обладнання. Множення починається з молодших розрядів і множене зсувається вліво на один розряд в кожному такті.

Метод 4. Множення, починаючи зі старших розрядів множника, при зсуві вправо множеного та нерухомій сумі часткових добутків. Послідовність дій на кожному кроці множення визначається старшим розрядом регістра множника.

Операцію множення найпростіше виконувати в прямих кодах чисел. Разом з тим, застосування обернених та доповняльних кодів дозволяє істотно спростити операцію алгебричного додавання. Проте використання такої форми представлення чисел має певні особливості:

1. Дії, що виконуються під час множення обернених (доповняльних) кодів, залежать від знаку множника.

2. Добуток обернених (доповняльних) кодів співмножників дорівнює оберненому (доповняльному) коду результату тільки у випадку додатного множника.

3. Якщо множник є від'ємним числом, то обернений (доповняльний) код добутку одержується додаванням поправок і () до добутку обернених (доповняльних) кодів співмножників. Оскільки поправки мають різну вагу, то послідовність їх додавання залежить від того, з яких розрядів множника починається множення.

2. Теоретичні відомості

Для виконання арифметичних операцій над числами з плаваючою точкою в мікроконтролерах необхідно розробляти досить складні підпрограми. Вихідні числа в форматі з плаваючою точкою представлені знаком, мантисою і порядком. Мантиса є правильним дробом, розряди якої представляють значущі розряди числа, порядок показує фактичний стан точки в запису мантиси.

Для представлення чисел з плаваючою точкою розроблений і введений стандарт IEEE-754, що включає базовий одинарний, базовий подвійний, розширений одинарний і розширений подвійний формати, що відрізняються кількістю розрядів і способами подання мантиси і порядку. На рис. 2.1 приведена структура полів базового 32-розрядного одинарного формату. Формат містить знаковий розряд S, 8-розрядне поле для зміщеного порядку В і 23-розрядне поле для мантиси F.

Рис. 2.1. Базовий одинарний формат

У цьому форматі при зображенні порядку використовується зміщення, рівне 127, прихований біт цілої частини мантиси Fq, що містить 1. Мінімальний (Е = 0) і максимальний (В = 255) порядки зарезервовані для подання спеціальних чисел. Діапазон ± 38 представлення чисел в цьому форматі становить ± 10, а точність 6-7 десяткових розрядів. Наведемо кілька прикладів кодування чисел в цьому форматі:

У розглянутих далі алгоритмах для 8-розрядних мікроконтролерів приймається уявлення істинного нуля нульовим набором (знак, порядок, мантиса). Спеціальні числові значення з стандарту (на зображення нескінченності, невизначеності) враховувати не будемо.

У всіх наведених програмах арифметичних операцій для мікроконтролерів AVR прийнято розміщення вихідних операндів і результатів у другій половині регістрів загального призначення (R16… R31). Перший операнд, символічно позначається А, розміщується в чотирьох регістрах А: РА (порядок), rtiAL (старший, середній і молодший байти мантиси). Другий операнд, символічно позначається В, розміщується в регістрах В: РВ (порядок), ТВН, ШВМ, mBL (мантиса). Результат поміщається перед виходом з процедури в регістри РА, mAL.

Процедура складання чисел з плаваючою точкою одного знака включає наступні дії:

* визначається різниця порядків доданків Ар = (РА - РВ). При нерівності порядків, якщо різниця порядків більше О, зсувається мантиса числа В вправо до тих пір, поки порядок меншого числа В не стане рівним більшому; якщо різниця порядків менше О, зсувається мантиса числа А вправо;

* після вирівнювання порядків доданків при Ар = О проводиться складання мантис. Як порядку суми приймається РА або РВ;

* перевіряється мантиса суми на можливість порушення нормалізації. При додаванні чисел з однаковими знаками можливе порушення нормалізації тільки вліво на один розряд. Щоб отримати нормалізовану мантису, необхідно зрушити її вправо. Порядок збільшується на одиницю, що може привести до переповнення.

На рис. 2.2 приведена схема алгоритму додавання чисел А і В з плаваючою точкою і однаковими знаками. Кожна складова представлена однобайтовим порядком і трьохбайтовою мантисою в стандартному форматі: знак числа, 8-розрядний зміщений порядок, 23-розрядна мантиса з прихованою одиницею (всього 32 розряду). Число А перед початком операції розміщено в регістрах РА, mAL, число В-в регістрах РВ, рви, РВМ, pBL. Результат операції зберігається на місці першого операнда А.

Рис. 2.2. Схема алгоритму складання чисел з плаваючою точкою

Процедура складання з плаваючою точкою AddF починається з перевірки знаків доданків. Якщо знаки операндів не збігаються, знак другого операнда змінюється на протилежний і виконується перехід до процедури вирахування чисел SubF. Якщо вихідні операнди мають один знак, кожен з них проходить перевірку на рівність 0. Якщо один з операндів дорівнює О, складання не проводиться, а результат приймається рівним іншому операнду. При цьому в разі рівності Про першого операнда регістри А і В обмінюються операндами. На цьому операція закінчується. Перетворення результату в стандартний формат не проводиться.

Якщо обидва операнда ненульові, в однобітовому прапорі Т регістру стану мікроконтролера SREG зберігається загальний знак операндів і виконується їх відновлення з базового формату. Оскільки для цього використовується одна і та ж процедура гес з бібліотеки допоміжних процедур, налаштована на роботу з регістрами А, перед другим відновленням проводиться обмін операндами.

Далі віднімають порядки. При отриманні негативної різниці виконується обмін операндами і віднімання повторюється. У разі рівного розподілу порядків, коли їх різниця Ар = О, у разі переходу до складання мантисс. В іншому випадку попередньо різниця Ар порівнюється з довжиною мантиси. Якщо різниця перевищить 24, то при вирівнюванні порядків зі зрушенням вправо мантиси меншого числа вона покине розрядну сітку, відбувається втрата значущості. Як результат приймається операнд, який в цей момент знаходиться в регістрах першого операнда (РА, ша). Якщо різниця менше 24, переходимо до зрушення мантиси меншого числа, помістивши її в регістри (mAL), різниця порядків - в регістрі РВ, менший порядок - в регістрі РА. Зрушення мантиси вправо супроводжується збільшенням порядку в регістрі РА, зменшенням в регістрі РВ і триває до тих пір, поки в регістрі РВ не отримаємо 0.

Склавши побайтно мантиси, перевіряємо ознака перенесення, який свідчить про порушення нормалізації. При відсутності його (С = 0) виконується перехід до перетворення числа в базовий формат. При С = 1 мантиссу суми зрушуємо вправо і порядок збільшуємо на 1. Виконуємо перевірку переповнення. Якщо утворився порядок, рівний О, це означає перевищення максимального порядку 255. Програма завершується з встановленим прапором переповнення С. Отриманий в регістрах РА, результат вважається невизначеним і не форматується. При відсутності переповнення прапор З скидається і виконується перетворення в базовий формат.

Програма дозволяє виконати алгебраїчне додавання чисел з урахуванням знаків доданків. У тому випадку, коли складові мають різні знаки, відбувається звернення до модуля віднімання. За допомогою директиви.include «flsub.asm» підключають програмний модуль віднімання чисел з плаваючою точкою однакових знаків. Це дозволяє в подальшому виконати за допомогою однієї і тієї ж програми не тільки складання, а й віднімання чисел.

На початку загальної програми складання; вирахування виконують перевірку коду виконуваної операції: 1 - для складання (+), 2 - для вирахування (-). Залежно від заданої операції і знаків операндів запускають процедуру складання або віднімання беззнакових чисел (табл. 2.1). При необхідності проводиться зміна місць операндів. У підсумку можна застосувати одну з двох процедур: додавання чи віднімання модулів чисел.

Таблиця 2.1. Виконувані операції

Типові процедури, які використовуються алгоритмами складання; вирахування, поміщені в бібліотеку, що підключається директивою.include «fllib.asm». Бібліотека fllib містить процедури відновлення операнда з базового формату гес, упаковки в базовий формат раек, обмін операндів swapAB, зсуву мантиси вправо на один розряд shift, логічного додавання 24-розрядної мантиси для порівняння з нулем.

Відновлення числа з базового формату проводиться за допомогою чотирьох операцій, як показано на рис. 3.10, а. Спочатку за допомогою логічного зсуву вліво ф молодший біт порядку з регістра старшого байта мантиси виштовхується на прапор переносу С. Потім виконується циклічний зсув вліво вмісту регістра порядку РА Завдяки цьому 8-розрядний порядок повністю виявляється в регістрі РА. Далі мантиса зсувається вправо @ і в розряд 7 регістра

Перетворення результату операції, що розміщується після обробки в регістри А, в базовий формат виконується за схемою на рис. 3.10, б. Спочатку зберігаємо порядок РА в одному з регістрів, наприклад РВ ф. Потім знак результату, який зберігається на прапорі Т, переносимо на прапор З Виконуючи зрушення вправо регістра порядку РА, вводимо знак числа в розряд 7 регістра РА Передачу молодшого біта порядку в старший розряд мантиси виконуємо за два кроки: спочатку з розряду Про регістра РВ в Т потім з Т в розряд 7 регістра місце старшого розряду мантиси.

Обмін 32-розрядних операндів в регістрах А і В здійснюється з використанням логічної функції виключає Або. Дійсно, отримавши спочатку А <- А Ф В, виконуємо далі В <-ВФАіА <-АФВ. Ці операції повторюють окремо для кожного байта порядку і мантиси (всього 12 операцій). Використовувані бібліотечні процедури з коментарями представлені в лістингу програми 3.4.

Операція починається з провірки знаків доданків (рис. 3.11). Якщо знаки операндів не збігаються, знак від'ємника змінюється на протилежний і виконується перехід до процедури складання чисел AddF. Якщо вихідні операнди з одним знаком, кожен проходить перевірку на рівність 0. Якщо один з операндів дорівнює О, віднімання не проводиться, а результат приймається рівним іншому операнду, при необхідності коригується знак результату.

Якщо обидва операнда не рівні О, в Т зберігається знак зменшуваного і відновлюють обидва числа. При цьому відновлення числа В передує реєстровий обмін А <-> В. Потім виконують порівняння порядків. Якщо порядки рівні, порівнюють мантиси, при їх рівності результат операції вважається рівним 0. Виявляється більше число без урахування знака, яке поміщається в регістри В. Якщо при цьому виконується обмін регістрів, то зберігається в Т знак змінюється на протилежний.

Подальші дії пов'язані з вирівнюванням порядків і зрушенням вправо мантиси меншого числа, яке знаходиться в регістрах А. Після вирівнювання порядків виконується віднімання мантис і формування результату в регістрах А. При відніманні мантис з однаковим знаком може виникнути порушення нормалізації вправо, т. Е. Поява одного або декількох нулів в старших розрядах мантиси різниці. Усунення порушення нормалізації виконується шляхом зсуву мантиси різниці вліво і зменшення порядку результату РА на одиницю при кожному зсуві. Якщо при зменшенні порядку виникне антипереповнення (при зміні порядку від мінімально допустимого значення 0x00 до максимального значення OxFF), виконується вихід з процедури з встановленим прапором С = 1 і повернення в головний модуль програми з невизначеним результатом. Після усунення порушення нормалізації виконується форматування результату в регістрах А і вихід з процедури вирахування в основну програму.

Додавання і віднімання чисел А і В з плаваючою комою може здійснюватися тільки за умови рівності їх порядків. Для цього вони заздалегідь вирівнюються зсувом одного з них.

3. Розробка алгоритму роботи програми

Для комп'ютерних програм алгоритм є списком деталізованих інструкцій, що реалізують процес обчислення, який, починаючи з початкового стану, відбувається через послідовність логічних станів, яка завершується кінцевим станом. Перехід з попереднього до наступного стану не обов'язково детермінований - деякі алгоритми можуть містити елементи випадковості.

Поняття алгоритму належить до підвалин математики. Обчислювальні процеси алгоритмічного характеру (як-то арифметичні дії над цілими числами, знаходження НСД двох чисел тощо) відомі людству з глибокої давнини. Проте, чітке поняття алгоритму сформувалося лише на початку XX ст

Наша програма повинна мати чіткий, сформований алгоритм, який дозволить швидко працювати програмі і безперебійно оброблювати вхідні і вихідні дані.

Алгоритм програми представимо у вигляді блок-схеми.

Рис. 3.1. Блок-схема алгоритму програми

4.

4. Опис програми

Виклик і завантаження

Способи виклику програми

Виклик програми виконується завантаженням на виконання файлу ADDMUL.exe

Адреса завантаження програми

Адреса завантаження визначається операційною системою автоматично.

Відомості про використання оперативної пам'яті

Програма при роботі не ініціює запити на виділення оперативної пам'яті, крім тої, що виділена їй для роботи операційною системою.

Обсяг програми

Файл ADDMUL.asm має обсяг 2 Кб, файл ADDMUL.exe - 27 Кб

Вхідні дані

Характер вхідних даних

Вхідні дані для роботи програми являють введені з клавіатури числа з плаваючою крапкою

Організація вхідних даних

Вхідні дані організовуються у чисел з плаваючою крапкою.

Попередня підготовка вхідних даних

Попередня підготовка вхідних даних не обов'язкова.

Вихідні дані

Характер вихідних даних

Вихідними даними є число - результат множення або дадавання двох чисел з плаваючою крапкою.

Організація вихідних даних

Вихідні дані організовані у вигляді числа з плаваючою крапкою, що видає програма на екран.

Формат, описання та спосіб кодування даних

Текстові повідомлення, що виводяться на екран.

5. Посібник системного програміста

Призначення програми

Програма призначена для множення або додавання (відповідно до вибору користувача) двох чисел з плаваючою крапкою

Структура програми

Програма складається з основного програмного модуля і двох функцій: множення та додавання чисел з плаваючою крапкою. Програма не містить власних, самостійно створених класів і не використовує динамічно підключаємі бібліотеки dll.

Налаштування програми

Програма має простий, консольний інтерфейс і не потребує жодних налаштувань з боку користувача.

Перевірка програми

Перевірку програми на працездатність забезпечується її тестуванням.

Тестування програмного забезпечення (англ. Software Testing) - це процес технічного дослідження, призначений для виявлення інформації про якість продукту відносно контексту, в якому він має використовуватись. Техніка тестування також включає як процес пошуку помилок або інших дефектів, так і випробування програмних складових з метою оцінки. Може оцінюватись:

· відповідність вимогам, якими керувалися проектувальники та розробники

· правильна відповідь для усіх можливих вхідних даних

· виконання функцій за прийнятний час

· практичність

· сумісність з програмним забезпеченням та операційними системами

· відповідність задачам замовника.

Оскільки число можливих тестів навіть для нескладних програмних компонент практично нескінченне, тому стратегія тестування полягає в тому, щоб провести всі можливі тести з урахуванням наявного часу та ресурсів. Як результат програмне забезпечення (ПЗ) тестується стандартним виконанням програми з метою виявлення баґів (помилок або інших дефектів).

Тестування ПЗ може надавати об'єктивну, незалежну інформацію про якість ПЗ, ризики відмови, як для користувачів так і для замовників.

Тестування може проводитись, як тільки створено виконуваний код (навіть частково завершено). Процес розробки зазвичай передбачає коли та як буде відбуватися тестування. Наприклад, при поетапному процесі, більшість тестів відбувається після визначення системних вимог і тоді вони реалізуються в тестових програмах. На противагу цьому, відповідно до вимог гнучкої розробки ПЗ, програмування і тестування часто відбувається одночасно.

Тестування - це одна з технік контролю якості, що включає в себе

· Планування робіт (Test Management)

· Проектування тестів (Test Design)

· Виконання тестування (Test Execution)

· Аналіз отриманих результатів (Test Analysis).

Верифікація (Verification) - це процес оцінки системи або її компонентів з метою визначити чи задовольняють результати поточного етапу розробки умовам, сформованим на початку цього етапу. Тобто чи виконуються цілі, терміни, завдання з розробки проекту, визначені на початку поточної фази. Валідація (Validation) - це визначення відповідності розроблюваного програмного забезпечення між очікуваннями і потребами користувача, вимогам до системи.

План Тестування (Test Plan) - це документ, що описує весь обсяг робіт з тестування, починаючи з опису об'єкта, стратегії, розкладу, критеріїв початку і закінчення тестування, до необхідного в процесі роботи обладнання, спеціальних знань, а також оцінки ризиків з варіантами їх вирішення.

Тест дизайн (Test Design) - це етап процесу тестування програмного забезпечення, на якому проектуються і створюються тестові випадки (тест кейси), відповідно до визначених раніше критеріями якості та цілями тестування.

Тестовий випадок (Test Case) - це документ, що описує сукупність кроків, конкретних умов і параметрів, необхідних для перевірки реалізації тестованої функції або її частини.

Баг / Дефект Репорт (Bug Report) - це документ, що описує ситуацію або послідовність дій (Steps), що призвела до некоректної роботи об'єкта тестування (Misbehavior), із зазначенням причин та очікуваного результату (Expected Result).

Тестове Покриття (Test Coverage) - це одна з метрик оцінки якості тестування, що представляє із себе щільність покриття тестами вимог або коду, що виконується.

Деталізація Тест Кейсів (Test Case Specification) - це рівень деталізації опису тестових кроків і необхідного результату, при якому забезпечується розумне співвідношення часу проходження до тестового покриття.

Час Проходження Тест Кейса (Test Case Pass Time) - це час від початку проходження кроків тест кейса до отримання результату тесту.

Проведемо тестування нашої програми методом чорного ящика, перевіривши тим самим функціональну придатність програмного продукту. Тестові випадки наведені в таблиці 7.4.1

Таблиця 5.4.1. Тестові випадки

Номер теста

Назва теста

Значения вихідних даних

Очікуваний результат

Реакція програми

Висновок

1

Чорний ящик

Додавання

A=3.4

B=2.1

C=5.5

Rezult:5.5

Програма працює вірно

2

Чорний ящик

Множення

A=3.4

B=2.1

С=7,14

Rezult:7.14

Програма працює вірно

6. Посібник оператора

Дана програма реалізує модель арифметико-логічного пристрою. Вона виконує арифметичні операції додавання та множення над числами з плаваючою крапкою.

Після запуску програми відкривається головне вікно, яке має дружній інтерфейс (меню). Меню складається з 2-х пунктів (див рис. 6.1):

1. Додавання чисел чисел

2. Множення чисел

Рис. 6.1. Головне вікно

Якщо натиснути клавішу «1» відбудеться перехід до мітки, де виконуються операція додавання (див. рис. 6.2).

Рис. 6.2. Вікно додавання

Якщо натиснути клавішу «2» відбудеться перехід до мітки, де виконуються операція множення (див. рис. 6.3).

Рис. 6.3. Вікно множення

Також реалізована можливість повернення із кожного підпункту до головного меню програми. Для цього треба натиснути будь-яку клавішу.

Для введення чисел створенні спеціальні процедури:

· input_integral_part - для введення цілої частини числа.

· input_fractional_part - для введення дробової частини числа

Для введення символів з клавіатури використовується функція 0Ah переривання 21h. За допомогою цієї функцій, якщо після введення числа ще не натиснута клавіша «Enter», його можна редагувати, використовуючи на клавіатурі стрілки вправо/вліво та клавішу «Backspace».

При введенні числа відбувається перевірка на введений символ. Якщо введено щось інше окрім цифрових значень, то на екрані з'являється повідомлення про помилку.

Під цілу частину числа виділяється 6 байт, під дробову також 6 байт. З урахуванням крапки та знака загальна кількість символів, яка відводиться під число дорівнює 14 байт.

При виборі одного з пунктів меню, додавання або множення, програма спочатку пропонує ввести цілу частину числа А, потім дробову частину числа А, потім цілу частину числа B і в кінці дробову частину числа B. Після цього виконуються відповідні арифметичні операції і результат виводиться на екран.

Пісня виконання арифметичних дій, програма очікує на натиснення будь-якої клавіші для повернення до головного меню.

Висновки

В ході виконання завдання курсової роботи мною було розроблено проект програми на NASM асемблер для множення / додавання чисел з плаваючою крапкою.

Під час розробки і реалізації алгоритму задачі, мною було вивчено особливості роботи з мовою низького програмування асемблер, застосовано на практиці, отримані знання з лекційного курсу.

Програма повноцінно працює при будь-яких вхідних даних і може бути впроваджена у виробництво і застосовуватись кінцевими користувачами для заощадження сил і часу па проведення вище вказаних операцій над числами з плаваючою крапкою.

Список використаних джерел

1. Аблязов Р.З. Программирование на ассемблера на платформе x86-64. - М.: ДМК Пресс, 2011. - 304 с.

2. Голубь Н.Г. Исскуство программирования на ассемблере. Лекции и упражнения. - 2-е изд., испр. и доп., - СПб.: ДиаСофт, 2002. - 656 с.: ил.

3. Зубков С.В. Assembler для DOS, Windows и Unix. - 2 изд., испр. и доп., - М: ДМК, 2000. - 608 с.: ил.

4. Кип Р. Ирвин. Язык ассемблера для процесоров Intel. - 4-е изд., Пер. с англ. - М.: Издательский дом «Вильямс», 2005. - 912 с.: ил.

5. Крупник А.Б. Изучаем ассемблер. - СПб.: Питер, 2005. - 249 с.

6. Магда Ю.С. Ассемблер для процессоров Intel Pentium. - СПб.: Питер, 2006. - 410 с.: ил.

7. Марек Р. Ассемблер на примерах. Базовий курс. - СПб.: Наука и техника, 2005. - 240 с.: ил.

8. Столяров А.В. Программирование на языке ассемблера NASM для OC UNIX. Уч. пособие. - 2-е изд. - М.: Макс-пресс, 2011. - 188 с.

9. Харт Джонсон М. Системное программирование в среде Windows / Джонсон М. Харт; пер. с англ. - М.: Издательский дом «Вильямс», 2005.

10. Юров В.И. Assembler. Учебник для вузов. 2-е изд. - СПб.: Питер, 2003. - 637 с.

11. Юров В.И. Assembler. Практикум. 2-е изд. - СПб.: Питер, 2006. - 399 с

Додаток

Лістинг програми NASM асемблер

model small code 386

start: mov ax,@data

mov ds, ax

mov es, ax

main_loop: mov ax, 3; Очищаємо екран

int 10h

mov ah, 9

mov dx, offset string0

int 21h mov ah, 0

int 16h cmp al, '1' je a2

cmp al, '2' je a1

cmp ah, 1 jne main_loop

exit: mov ah, 4Ch

int 21h

a0: mov ax, 3;

int 10h

mov ah, 9

mov dx, offset string8

int 21h

mov ah, 0

int 16h

jmp main_loop

; додавання

a1: mov ax, 3;

int 10h

mov ah, 9

mov dx, offset string1

int 21h

mov string2+30,'A'

mov di, offset A

call input

inc string2+30; міняю A на B в повідомленні 'Vvedit chyslaoA'

mov di, offset B

call input_integral_part

call input_fractional_part

xor bx, bx

finit; ініціалізація FPU

fild A; завантажили число А

fild B; завантажили число В

fadd st(1), st; додамо А і В

fst С; результат додавання в змінну С

mov di, offset string5

fldz; загрузили в FPU ноль

db 0DFh, 0F1h; fcomip st, st(1); порівняння числа з нулем

jnz a3 mov byte ptr [di], '0'; Якщо ціла частина рівна 0

inc edi jmp b01

a3: fstcw control; Заокруглюємо до нуля

or control, 0C00h

fldcw control

fld st; дублюємо вміст st(0) в st(1)

frndint;

fsub st(1),

fldz db 0DFh, 0F1h; fcomip st, st(1); прирівнюємо дробову частину до нуля

jnz a4 mov al, '0'; якщо рівна нулю

stos b

; множення

A2: mov ax, 3;

int 10h

mov ah, 9

mov dx, offset string1

int 21h

mov string2+30,'A'

mov string3+33,'A'

mov di, offset A

call input

inc string2+30; міняю A на B в повідомленні 'Vvedit chyslo A»

mov di, offset B

call input_integral_part

call input_fractional_part

xor bx, bx

finit; ініціалізація FPU

fild A; завантажили число А

fild B; завантажили число В

fmul st(1), st; множимо А і В

fst С; результат додавання в змінну С

mov di, offset string5

fldz; загрузили в FPU ноль

db 0DFh, 0F1h; fcomip st, st(1); порівняння числа з нулем

jnz a3 mov byte ptr [di], '0'; Якщо ціла частина рівна 0

inc edi jmp b01

a3: fstcw control; Заокруглюємо до нуля

or control, 0C00h

fldcw control

fld st; дублюємо вміст st(0) в st(1)

frndint;

fsub st(1),

fldz db 0DFh, 0F1h; fcomip st, st(1); прирівнюємо дробову частину до нуля

jnz a4 mov al, '0'; якщо рівна нулю

stos b

@0: mov ah, 9;

mov dx, offset string2; «ввести числа A»

int 21h

i1: mov ah, 0Ah; функция 0Ah прерывания 21h для ввода строки с клавиатуры

mov dx, offset buffer; сюда пойдет ввод - > buffer db 7,?, 7 dup(?)

int 21h mov ch, 0

mov cl, buffer+1;

mov si, offset buffer+2;

cmp cl, 6 ja @3er

loop @1 retn;

@4: mov ah, 9

int 21h mov ah, 0Ah

mov dx, offset buffer

int 21h mov ch, 0

mov cl, buffer+1

mov si, offset buffer+2

cmp cl, 6 ja @6er

test cx, 1 jz @5

mov bx, offset buffer+2 add bx, cx

mov byte ptr [bx], '0'

inc cx @5: lodsb

sub al, '0' cmp al, 9

ja @6; Якщо не цифра то помилка

mov ah, al lodsb

sub al, '0' cmp al, 9

ja @6; Якщо не цифра то помилка

shl al, 4;

db 0Dh, 0Ah, 'Natysnit 1, shob dodatu

db 0Dh, 0Ah, 'Natysnit 2, shob pomnozhutu

string2 db 0Dh, 0Ah, 'Vvedit chyslo A', 0Dh, 0Ah, '$'

string6 db 0Dh, 0Ah, 'Rezultat '

string5 db 50 dup ('$')

Размещено на Allbest.ru


Подобные документы

  • Загальна характеристика алгоритму та опис програми. Керівництво системного програміста. Особливості запуску програми в Linux, FreeBSD, Windows. Аналіз результатів тестування програми, що проектується, вивчення та оцінка її практичної ефективності.

    курсовая работа [91,4 K], добавлен 13.06.2014

  • Розробка машинного алгоритму операції множення в доповняльному коді з пропуском тактів додавання в двійковій системі числення з старших розрядів чисел, представлених у формі з плаваючою комою та операційний автомат. Контроль операції віднімання.

    курсовая работа [45,5 K], добавлен 14.03.2013

  • Розробка програми для вирішення графічної задачі. При вирішенні задачі необхідно cтворювати програму у середовищі програмування Turbo Pascal. Розробка алгоритму функціонування програми і надання блок-схеми алгоритму. Демонстрація роботи програми.

    курсовая работа [1,3 M], добавлен 23.06.2010

  • Теоретичні відомості про язик С++. Розробка програми, що виконує основні арифметичні дії над простими та складними числами на язику С++. Опис алгоритму програми та її код. Інструкція по користуванню. Обгрунтовування вибору та складу технічних засобів.

    курсовая работа [852,8 K], добавлен 30.11.2011

  • Створення програми для роботи з веб-камерою з автоматичним визначенням встановленої камери на комп'ютері. Характеристика апаратної конфігурації програми. Опис мови і середовища програмування. Розробка алгоритму, інструкції для програміста та користувача.

    курсовая работа [1,2 M], добавлен 26.07.2013

  • Синтез цифрового автомата для виконання операції множення в оберненому коді двох двійкових чисел з фіксованою комою. Будування керуючого автомату з жорсткою логікою по принципу Мілі. Використання алгоритму множення з пропусканням тактів додавання.

    курсовая работа [279,6 K], добавлен 14.03.2013

  • Розробка алгоритму множення чисел у прямому коді з молодших розрядів із пропусканням тактів сумування для двійкових чисел. Синтез операційного та керуючого автоматів з жорсткою логікою. Описання технології числового контролю операції додавання по модулю.

    курсовая работа [74,9 K], добавлен 14.03.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.