Professional Documents
Culture Documents
Лабораторна робота №2
Лабораторна робота №2
2
Коли Windows вперше створює процес, то створюється тільки один потік для
процесу.
1.3 Створення потоку
2. Хід роботи
3
3. Зміст звіту Звіт
повинен містити:
- титульну сторінку; - мету роботи;
- завдання, робочий варіант тексту програми, результат виконання
програми;
- короткі висновки по проведеній роботі.
4. Завдання
4
1 WORD
3 EXCEL
5 ACCESS
7 WORDPAD
9 NONEPAD
11 REGEDIT
13 PAINT
15 CALC
17 FAR
19 IEXPLORE
21 ICHAT
23 WINRAR
25 MSIMN
27 COMMAND.COM
3.
1. Написати програму, яка створює новий процес. Процес повинен
рекурсивно обчислювати факторіал.
2. Написати програму, яка створює новий процес, котрий сортує масив
методом бульбашки.
3. Написати програму, яка створює новий процес, що генерує ряд Фібіоначчі1
з 10-ти членів, використовуючи рекурсивний алгоритм.
4. Написати програму, яка створює новий потік, що сортує слова у стрічці у
алфавітному порядку. Стрічка задається у файлі.
5. Написати програму, яка створює новий процес, котрий сортує слова у
стрічці у порядку збільшення довжини слова. Стрічка задається у файлі.
Відсортована стрічка записується у файл.
6. Написати програму, яка створює новий потік, що рекурсивно обчислює
факторіал.
7. Написати програму, яка створює новий потік. Потік повинен генерувати
ряд Фібіоначчі з 10-ти членів, використовуючи ітераційний алгоритм.
8. Написати програму, яка створює новий потік, котрий сортує слова у
стрічці у порядку зменшення довжини слова. Відсортована стрічка
записується у файл.
9. Написати програму, яка створює новий процес, котрий ітераційно
обчислює факторіал.
1
Ряд Фібіоначчі це така послідовність цифр в якій наступний член рахується як сума двох попередніх.
Наприклад: 0 1 1 2 3 5 8 13 21 34 ...
5
10.Написати програму, яка створює новий процес, котрий сортує масив
методом бульбашки.
11.Написати програму, яка створює новий процес, що генерує ряд випадкових
чисел. Результат записується у файл.
12.Написати програму, яка створює новий потік, котрий ітераційно обчислює
факторіал.
13.Написати програму, яка створює новий процес, що сортує слова у стрічці
у алфавітному порядку. Стрічка задається у файлі.
14.Написати програму, яка створює новий потік, що генерує ряд з 0 і 1 на
основі базису Галуа.
15.Написати програму, яка створює потік, що сортує маcив методом
послідовного перебору.
16.Написати програму, яка створює новий потік, котрий сортує слова у
стрічці у порядку збільшення довжини слова. Стрічка задається у файлі.
Відсортована стрічка записується у файл.
17.Написати програму, яка створює новий процес. Процес повинен
генерувати ряд Фібіоначчі з 10-ти членів, використовуючи ітераційний
алгоритм.
18.Написати програму, яка створює новий потік, котрий сортує масив
методом бульбашки.
19.Написати програму, яка створює новий потік, що генерує ряд Фібіоначчі з
10-ти членів, використовуючи рекурсивний алгоритм.
20.Написати програму, яка створює новий процес, котрий сортує слова у
стрічці у порядку зменшення довжини слова. Відсортована стрічка
записується у файл.
21.Написати програму, яка створює новий процес. Процес повинен
генерувати ряд з 0 і 1 на основі базису Галуа.
22.Написати програму, яка створює новий потік, що генерує ряд випадкових
чисел. Результат записується у файл.
5. Контрольні запитання
6
5. Як створити процес?
6. Що таке потік?
7. Як створити потік?
8. Як компонувати та транслювати в MASM32?
Додаток 1
Текст простої програми виводу повідомлення на екран.
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
MsgCaption db "Повiдомлення!",0
MsgBoxText db "Привiт Win32!",0
.code
start
:
invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption,
MB_OK invoke ExitProcess,NULL end start
Опис програми:
.386 – директива, яка говорить асемблеру використовувати набір операцій для
процесора 80386.
MODEL FLAT, STDCALL - .MODEL – директива, яка визначає модель пам’яті
програми. Під WIN32 існує тільки одна модель – плоска. .STDCALL – говорить
асемблеру про порядок передачі параметрів: зліва направо чи справа наліво.
option casemap:none – Робить асемблер чутливим до регістру символів.
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc include
\masm32\include\user32.inc includelib
\masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib
.DATA – В цій частині знаходяться ініціалізовані дані програми.
invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK -
виклик функції MessageBox, яка виводить діалогове вікно. Параметрами цієї
функції є: дескриптор вікна, адреса тексту, який виведеться у діалоговому вікні,
7
адреса тексту, який виведеться у заголовку діалогового вікна, прапорець.
Прапорець може мати різні значення: MB_ABORTRETRYIGNORE (тоді діалогове
вікно буде мати три кнопки: Abort, Retry і Ignore), MB_OK, MB_OKCANCEL,
MB_RETRYCANCEL, MB_YESNO,MB_YESNOCANCEL і багато інших.
invoke ExitProcess,NULL - Функція завершує всі породжені процеси і потоки.
8
Додаток
2
Текст програми створення процесу.
.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\user32.lib
includelib \masm32\lib\kernel32.lib
.data
MsgBoxText db "Ця програма запустить новий
процес!",0 MsgCaption db "Повiдомлення!",0
processInfo PROCESS_INFORMATION <> programname db
"Hello.exe",0 startInfo STARTUPINFO <>
.code
main:
invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
invoke CreateProcess,ADDR
programname,NULL,NULL,NULL,FALSE,\
NORMAL_PRIORITY_CLASS,\ NULL,NULL,ADDR
startInfo,ADDR processInfo
Опис програми :
processInfo PROCESS_INFORMATION <> - Оголошується структура
processInfo, яка має тип структури PROCESS_INFORMATION. Цю структуру
заповнює даними, які містять інформацію про новостворений процес і його
головний потік, функція CreateProcess.
PROCESS_INFORMATION STRUCT
hProcess DWORD ? ;Дескриптор створеного процесу hThread
DWORD ? ;Дескриптор головного потоку створеного процесу
dwProcessId DWORD ? ;Ідентифікатор процесу dwThreadId DWORD ?
;Ідентифікатор основного потоку
PROCESS_INFORMATION ENDS
startInfo STARTUPINFO <> - Оголошується структура startInfo, котра визначає
властивості створеного процесом вікна.
Дескриптор процесу - це значення, яке повертає Windows для використання
іншими АРІ - функціями, зв’язаними з процесами. Дескриптор процесу не може
використовуватися для ідентифікації процесу, так як він не унікальний. Процес
можна примусово зупинити функцією TerminateProcess.
9
Додаток
Додаток 3
Детальний опис функції CreateProcess.
invoke CreateProcess,ADDR programname,NULL,NULL,NULL,FALSE,\
NORMAL_PRIORITY_CLASS,NULL,NULL,\
ADDR startInfo,ADDR processInfo
Функція CreateProcess створює новий процес.
CreateProcess PROTO lpApplicationName:DWORD, lpCommandLine:DWORD,\
lpProcessAttributes:DWORD,lpThreadAttributes:DWORD,
\ bInheritHandles:DWORD,dwCreationFlags:DWORD,\
lpEnvironment:DWORD,lpCurrentDirectory:DWORD,\
lpStartupInfo:DWORD,lpProcessInformation:DWORD
10
Додаток
• lpProcessInformation --> Вказує на структуру
PROCESS_INFORMATION, яка дістає ідентифікаційну інформацію про новий
процес. Структура
PROCESS_INFORMATION.
4
Текст програми створення потоку
.386
.model flat, stdcall option
casemap:none
include \masm32\include\windows.inc
include
\masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data?
ThreadID DWORD ?
.data
MsgCaption db "Привiт!",0
MsgBoxText db "В цiй програмi створюється новий потік",0
MsgBoxText2 db "Це повiдомлення нового потоку",0
MsgBoxText3 db "Завершення програми, яка створює новий потік",0
.code
11
Додаток
Дана програма виводить повідомлення “Привіт!”, після натиску кнопки
“ОК”, створюється новий потік, котрий виводить своє повідомлення “Привіт!”.
Одночасно з викликом повідомлення потоку викликається повідомлення
батьківської програми (процесу) про завершення програми. Одночасно із
завершенням батьківської програми (після натиску “ОК”) завершується
повідомлення потоку.
12
Додаток
5
Детальний опис функції CreateThread.
Додаток 6
Опис параметрів командної стрічки.
Для транслювання і компонування даного .ASM файлу ми
використовуємо пакет MASM32. Для того щоб відтранслювати (ML.EXE) та
скомпонувати (злінкувати) (LINK.EXE) даний .ASM код, потрібно вказати в
командній стрічці такі параметри:
Опис параметрів:
/c – говорить MASM’у створити .obj файл формату COFF (Common Object
File), який використовується в ОС UNIX як його власний обєктний і
виконуваний формат файлів.
/Cp – говорить MASM’у зберігати регістр назв, заданих програмістом.
Можна також вставити в код програми (після директиви .model) стрічку
13
Додаток
:option casemap:none, щоб одержати такий самий ефект, тобто, щоб MASM
розрізняв великі і малі символи.
/SUBSYSTEM:WINDOWS – говорить link’еру якого виду буде виконуваний
модуль.
/LIBPATH – говорить link’еру де знаходяться бібліотеки імпорту.
7
Перетворення символів типу int в тип char.
Для того, щоб вивести результати обчислень, потрібно перетворити їх з
типу int в char.Це можна зробити за допомогою функції wsprintf().
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
.data
MsgBoxCaption db "Повідомлення",0
buffer db 50 dup(?)
parametr db "%u",0 ;unsigned int
.co
de
sta
rt:
mov eax,10
add eax,10
14