
- •Анотація
- •1 Аналіз індивідуального завдання
- •2 Загальна структура програми
- •3 Розробка меню
- •4 Підключення панелі інструментів та рядку стану
- •4.1 Створення панелі інструментів
- •4.2 Створення рядку стану
- •5 Створення діалогових вікон
- •5.1 Основні етапи створення діалогу
- •5.2 Створення діалогу для введення змінних
- •6 Математичне обчислення
- •6.1 Мова assembler під Win32
- •6.2 Реалізація
- •7 Створення та підключення бібліотеки dll
- •8 Робота з файлами
- •8.1 Відкриття файлу
- •8.2 Збереження файлу
- •9 Керівництво системного програміста
- •10 Керівництво оператора
- •Висновки
- •Література
- •Додатки Додаток а
- •Додаток б
6 Математичне обчислення
6.1 Мова assembler під Win32
Мова «асемблер» – це низькорівнева мова, тобто мова, що містить методи, які дозволяють безпосередньо звертатись до функцій операційної системи, зокрема збудження переривань та виклик функцій, робота з периферійними пристроями через порти введення/виведення, а також звертання до конкретних комірок системної пам’яті та регістрів процесора.
При програмуванні математичного співпроцесора може бути використано або програмування співпроцесора для роботи з числами з фіксованою комою, або програмування співпроцесора – з числами з плаваючою комою. В даній програмі використовується програмування співпроцесора для роботи з плаваючою комою [8].
Взагалі написання програм під Win32 стало значно простіше і це обумовлено відсутністю startup коду, характерного для додатків і динамічних бібліотек написаних під Windows 3.x; гнучкою системою адресації до пам'яті: можливістю звертатися до пам'яті через будь-який регістр загального призначення; "відсутністю" сегментних регістрів; доступністю великих об'ємів віртуальної пам'яті; розвиненістю сервісу операційної системи, великою кількістю функцій, що полегшують розробку додатків; різноманіттям і доступністю засобів створення інтерфейсу з користувачем (діалоги, меню і т.п.). Сучасний асемблер розвив засоби виклику процедур, можливість введення шаблонів процедур (опис прототипів), об'єктно-орієнтовані розширення, макроозначення що вводяться користувачем.
Всі ці чинники дозволяють розглядати асемблер, як самостійний інструмент для написання додатків під платформи.
Програмування зі змішенням мов – це процес створення програм, що використовують дві або більш початкових мови. Microsoft Visual 2008 має вбудований асемблер, який викликається за допомогою _asm.
6.2 Реалізація
В даній програмі використовується програмування співпроцесора для роботи з плаваючою комою та фіксованою комою. Співпроцесора для роботи з плаваючою комою має вісім регістрів, які організовані у вигляді стека.
Основні команди, що використовуються при програмуванні з плаваючою комою:
Finit – команда ініціалізації;
Fld src – завантажити регістр;
Fst dst – зберегти значення у регістр;
Fadd dst, src – додати до першого регістра другий;
Fmul dst, src – помножити перший регістр на другий і зберегти результат в першому;
Fdiv dst, src – поділити перший регістр на другий і зберегти результат в першому.
В даній програмі обчислюється значення y відповідно умови x та заданої формули.
Отже, процедура для обчислення буде мати такий вигляд:
Спочатку порівнюємо умовну зміну x:
cmp x,0
je l1
jg l2
jl l3
Далі, відповідно до значення x переходимо на відповідну мітку. Якщо x=0:
Заносимо зміну b в регістр eax:
mov eax,b
Додаємо с до eax:
add eax,c
Результат множення зберігаємо в змінній tmp:
mov
tmp,eax
Заносимо зміну tmp до стеку FPU:
fild [tmp]
Заносимо до tmp 2
mov tmp,2
Ділимо вміст стека FPU на 2
fidiv tmp
Заносимо результат в зміну res
fst res
Решта обчислень проводиться за аналогією, повний лістинг asm-коду наведений в Додатку Б.