Cтворення dll та їх використання при явному зв’язуванні на мові Assembler

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

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

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

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

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

Міністерство освіти і науки Національний університет «Львівська політехніка» Кафедра ЕОМ  Звіт до лабораторної роботи № 7 з дисципліни: “Системне програмування” на тему: Cтворення dll та їх використання при явному зв’язуванні на мові Assembler Варіант - 19 Львів – 2016 СТВОРЕННЯ DLL ТА ЇХ ВИКОРИСТАННЯ ПРИ ЯВНОМУ ЗВ’ЯЗУВАННІ НА МОВІ АСЕМБЛЕР Мета: Ознайомитись з технологією та оволодіти навиками створення та використання бібліотек динамічного компонування з використанням явного зв’язування на мові Асемблера. ТЕОРИТИЧНІ ВІДОМОСТІ: Динамічне компонування образу задачі в процесі її виконання надає ряд переваг розробникам програмного забезпечення в порівнянні зі статичним копонуванням. До переваг відносяться: - зменшується розмір виконуваного файлу; - у пам’ять завантажують лише одну копію динамічної бібліотеки; - оновлення бібліотек не веде до перекомпонування застосування; - реалізовується динамічне завантаження модулів на вимогу; - можливість спільно використовувати ресурси застосування; - можна організувати спільну роботу бібліотек, розроблених із використанням різних мов програмування. Однак воно не позбавлене недоліків: - сповільнює завантаження застосування; - не ефективно використовуватися зовнішня пам’ять; - проблема є зворотної сумісності; - ускладнюється процес інсталювання програмного застосування. Однак грамонто володіючи технологією створення та підтримки динамічних бібліотек можне зменшити вплив деяких з цих недоліків на програмний продукт, а деякі подолати. Можливі 2 способи використання динамічних бібліотек. Вони називаються “явним” та “неявним” зв’язуванням. “Явне” та “неявне” зв’язування бібліотеки з програмою мають суттєві відмінності в процесі написання та компіляції програми. ЗАВДАННЯ Створити функцію в бібліотеці DLL на мові Assembler, яка виконуватиме завдання відповідно до варіанту. ВАРІАНТИ ЗАВДАННЯ: Підрахувати кількість слів у заданому рядку тексту. КОД ВИКОНАВЧОЇ ПРОГРАМИ: Файл(main.asm) .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib .data LibName db "dllPart.dll", 0 FunctionName db "WordCounter", 0 DllNotFound db "Cannot load library", 0 AppName db "Load explisit Library", 0 NotFound db "WordCounter function not found", 0 .data? hLib dd ? WordCounterAddr dd ? .code start : invoke LoadLibrary, addr LibName ; завантаження бібліотеки ;-------------------------------------------------------------- .if eax == NULL ; якщо завантаження не вдалося invoke MessageBox, NULL, addr DllNotFound, addr AppName, MB_OK ; вивести повідомлення про відсутність бібліотеки .else mov hLib, eax ; збереження заголовку бібліотеки ;-------------------------------------------------------------- invoke GetProcAddress, hLib, addr FunctionName ; визначення адреси функції .if eax == NULL ; якщо не вдалося взяти адресу invoke MessageBox, NULL, addr NotFound, addr AppName, MB_OK ; вивести повідомлення про відсутність потрібної функції .else mov WordCounterAddr, eax call[WordCounterAddr] ; виклик функції .endif ;-------------------------------------------------------------- invoke FreeLibrary, hLib ; вивантаження бібліотеки .endif ;-------------------------------------------------------------- invoke ExitProcess, NULL end start ;-------------------------------------------------------------- КОД БІБЛІОТЕКИ DLL: Заголовочний файл(dllPart.def) LIBRARY dllPart ; назва бібліотеки EXPORTS WordCounter ; назва функцій її інтерфейсу Реалізація бібліотеки(dllPart.asm) .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\msvcrt.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\msvcrt.lib .data dfmt db "%d",0 sfmt db "%s",0 ukr db "Добрий день, Василь Степанович ",13,10,0 vvid db "Enter text: ",0 res db "Number words: ",0 .data? Buffer db 100 dup (?) .code ;-------------------- Стартова функція -------------------------- DllEntry proc hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD mov eax,TRUE ret DllEntry Endp ;-------------------- Функція підрахунку кількості слів в тексті-------------- WordCounter PROC msg:DWORD invoke crt_printf, addr sfmt, addr ukr invoke crt_printf, addr sfmt, addr vvid mov esi, 0 mov ebx, 0 ; лічильник слів invoke crt_gets, addr Buffer ; ввід тексту func: .if Buffer[esi] == ' ' .if Buffer[esi + 1] != ' ' inc ebx .endif .endif inc esi .if Buffer[esi] != '0' jmp func .endif invoke crt_printf, addr sfmt, addr res invoke crt_printf, addr dfmt, ebx ; вивід результату invoke crt_getchar ret WordCounter ENDP End DllEntry РЕЗУЛЬТАТ ВИКОНАННЯ: / Рис.1 Вміст консолі після виконання програми ВИСНОВОК: На даній лабораторній роботі я оволодів навиками створення та використання бібліотек динамічного компонування на мові програмування Assembler з використанням явного зв’язування.
Антиботан аватар за замовчуванням

10.02.2017 12:02-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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