Мегаобучалка Главная | О нас | Обратная связь


Демонстрационная программа



2020-03-17 145 Обсуждений (0)
Демонстрационная программа 0.00 из 5.00 0 оценок




Листинг

 

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

;

.model flat, stdcall ;casemap :none ;

; Подключаем файлы

; ~~~~~~~~~~~~~..\include\windows.inc..\include\user32.inc..\include\kernel32.inc..\macros\macros.asm..\include\masm32.inc

; Библиотеки

; ~~~~~~~~~..\lib\user32.lib..\lib\kernel32.lib..\lib\masm32.lib..\include\dialogs.inc

;   Описание прототиповPROTO :DWORD,:DWORD,:DWORD,:DWORD_caption PROTO :DWORD

;   Дата сегмент

.datadb "Потоков было запущенно",0

prog db "c:\windows\notepad.exe",0db "c:\windows\regedit.exe",0PROCESS_INFORMATION <>

.data?dd ?       dd ?dd ?DWORD ?dd ?dd ?db 20 dup(?)dd ?

;   Константы

.constequ 102equ 103equ 104equ 105equ 107_STOP_THREAD equ WM_USER+1_STOP_THREAD2 equ WM_USER+1

; ««««««««««««««««««««««««««««««КОД««««««««««««««««««««««««««««««««««

.code

:hInstance, FUNC(GetModuleHandle,NULL)

;Описываем диалог"Курсовая работа по ОС, выполнил Григорьев Ю.Н. 8-78-3", \ ;

"MS Sans Serif",10, \ ; Шрифт и его размер

WS_OVERLAPPED or \ ; Стиль_SYSMENU or DS_CENTER, \ ;     диалогового окна

7, \ ; Число элементов управляения

,50,200,100, \ ; x y координаты

; Размер буффера

;Описываем кнопки"Start thread",WS_TABSTOP,150,5,40,13,IDOK

DlgButton "End thread",WS_TABSTOP,100,5,50,13,IDOK1"End thread2",WS_TABSTOP,100,20,50,13,IDOK2"Thr. started", WS_TABSTOP, 150,20,40,13,IDSTOP"Start note", WS_TABSTOP, 150,35,40,13,IDPROC"Start regedit", WS_TABSTOP, 150,50,40,13,IDPROC1"Cancel", WS_TABSTOP,150,65,40,13,IDCANCEL

 

;Вызов окнаhInstance,0,DlgProc,NULL

 

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

;Процедура обработчика диалогового окнаproc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

;Разбор сообщенияuMsgWM_INITDIALOG ; на созданииm hWnd, hWin ; копируем дескрипторthreadCount, 0 ;счетчик потоков = 0

Case WM_COMMAND ; разбор сообщений кнопокwParamIDOKthreadSwitch,0 ; маска для работы потоков

;Если = 0 то работа разрешенаeax,OFFSET thread_proc1 ; в регистр адрес процедуры потока

invoke CreateThread,NULL,NULL,eax,NULL,NULL,ADDR ThreadID ; вызываем поток

 

;;;IDOK1eax,OFFSET thread_proc3 ; вызов второго вида потокаCreateThread,NULL,NULL,eax,NULL,NULL,ADDR ThreadIDIDOK2eax,OFFSET thread_proc4 ; вызов второго вида потокаCreateThread,NULL,NULL,eax,NULL,NULL,ADDR ThreadID

;;;IDCANCEL ;quit_dialog ; закрыть диалогIDSTOP ;остановка потоковeax,OFFSET thread_proc2 ; вызов второго вида потокаCreateThread,NULL,NULL,eax,NULL,NULL,ADDR ThreadIDIDPROC ; создание процессаGetStartupInfo,ADDR startInfo ; получаем информацию

;вызываем процессCreateProcess,NULL,offset prog,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,ADDR startInfo,ADDR processInfoIDPROC1; создание процессаGetStartupInfo,ADDR startInfo ; получаем информацию

;вызываем процессCreateProcess,NULL,offset prog1,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,ADDR startInfo,ADDR processInfo

EndSwWM_STOP_THREADthreadSwitch,1 ; по данному сообщению маска для потоков = 1

Case WM_STOP_THREAD2TerminateThread,IDOK,12 ; завершаем потоки 2 методомWM_CLOSE_dialog:EndDialog,hWin,0 ; закрываем диалог

 

return 0

endp

; процедура первого вида потока

; она будет крутить (скроллить) заголовок_proc1 proc

;локальные переменныеtlen :DWORDbuffer[128]:BYTEpbuf :DWORDcharCount :DWORDcharCount,0pbuf, ptr$(buffer)threadCount, 1

@loop:GetWindowText,hWnd,pbuf,128 ; берем текстrotate_caption,pbuf;крутим на 1 символSetWindowText,hWnd,pbuf;обновляем текстSleep, 50;заддержка

.if threadSwitch == 1;если запрет

jmp @stopThread;выход из цикла

.endif

jmp @loop

@stopThread:_proc1 endp

; процедура второго вида потока_proc2 proc

invoke dwtoa,threadCount,ADDR textBuffer ; число в строкуMessageBox,hWnd,ADDR textBuffer,ADDR textBufferCaption,MB_OK ; выводим сколько потоков запущенноSendMessage,hWnd,NULL,NULL,NULL ;_proc2 endp

;_proc3 procSendMessage,hWnd,WM_STOP_THREAD,NULL,NULL ; отсылаем сообщениеthreadCount,0 ; вычитаем_proc3 endp

_proc4 procSendMessage,hWnd,WM_STOP_THREAD2,NULL,NULLthreadCount,0 ; вычитаем_proc4 endp

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

PROLOGUE:NONEEPILOGUE:NONE

; процедура прокрутки на 1 символ_caption proc pbuf:DWORD

edx, [esp+4] ; грузим строкуcl, [edx] ; первый байтedx, 1 ; переходим к следующему

 

@rewrite:al, [edx] ; читаем символedx, 1 ; увеличиваем аддресal, al ; проверяем на 0@last_rewrite ; если конец строки то на выход[edx-2], al ; запись символа@rewrite

 

@last_rewrite:[edx-2], cl ; запись последнего символаBYTE PTR [edx-1], 0 ; нуль терминатор

 

ret 4 ; баланс стека

_caption endp

PROLOGUE:PrologueDefEPILOGUE:EpilogueDef

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««start

секция функция идентификатор windows

Демонстрация работы

 

 


Вывод

 

В ходе данной курсовой работы были освещены основы программирования для WINDOWS. Также были изучены методы и средства многозадачного программирования в WINDOWS. Для реализации программы, иллюстрирующей теоретическую информацию был использован 32-битный ассемблер.



2020-03-17 145 Обсуждений (0)
Демонстрационная программа 0.00 из 5.00 0 оценок









Обсуждение в статье: Демонстрационная программа

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (145)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)