DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

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

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

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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