![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Для получения исполняемых файлов, исходные тексты которых приведены в методических указаниях, использовалась система программирования TASM 5.0. Тексты примеров написаны с учетом синтаксиса MASM.
Разработка программы состоит из этапов постановки задачи, выбора математической модели, разработки алгоритма, выбора языка программирования, написания программы на этом языке, трансляции и отладки. Задача будет решаться простейшая – вывод текста в окне консоли и графическом окне.
Подготовка исходного текста осуществляется в текстовом редакторе – встроенном в FAR Manager или в Блокноте.
Текст программы режима консоли:
.386
model flat,STDCALL
include wincon32.inc
extrn WriteConsoleA:PROC
extrn ReadConsoleA:PROC
extrn GetStdHandle:PROC
extrn ExitProcess:PROC
extrn FreeConsole:PROC
extrn AllocConsole:PROC
.data
num dd 0
buf db 'Привет из УФУ',0
sstr dd $-buf
.code
start: call FreeConsole
call AllocConsole
;-----------------------------------------------
call GetStdHandle,STD_OUTPUT_HANDLE
;------------------------------------------------
call WriteConsoleA,eax,offset buf,sstr,offset num,0
;-------------------------------------------------
call GetStdHandle,STD_INPUT_HANDLE
call ReadConsoleA,eax,offset buf,sstr,offset num,0
call ExitProcess,0
end start
Назначение любой строки программы очевидно, если учесть сведения, приведенные в п.1.3.1, п.2.6.1, п.2.6.2. Результат работы программы представлен на рис.3.1
Рис.3.1. Результат работы консольной программы
Текст графического приложения, выполняющий ту же задачу приведен ниже. Результат выполнения представлен на рис.3.2.
Из описания внешних процедур следует, что эта программа отличается от программы 2, демонстрирующей основные элементы графического интерфейса, наличием функций API, обеспечивающих вывод строки текста на экран. Это функции BeginPaint, EndPaint, TextOutA. Справочные сведения о них и о структурах, используемых приложением при регистрации класса, создании окна и вывода строки в клиентскую часть окна приведены в приложении 3, 4.
.386
model flat,STDCALL
include win32.inc;Файл, содержащий описания структур данных и \
констант
extrn BeginPaint:PROC
extrn CreateWindowExA:PROC
extrn DefWindowProcA:PROC
extrn DispatchMessageA:PROC
extrn EndPaint:PROC
extrn ExitProcess:PROC
extrn GetMessageA:PROC
extrn GetModuleHandleA:PROC
extrn LoadCursorA:PROC
extrn LoadIconA:PROC
extrn PostQuitMessage:PROC
extrn RegisterClassA:PROC
extrn ShowWindow:PROC
extrn TextOutA:PROC
extrn UpdateWindow:PROC
.data
newhwnd dd 0
wc WNDCLASS <?>
lppaint PAINTSTRUCT <?>
msg MSGSTRUCT <?>
hInst dd 0
fl dw 0
szTitleName db 'Это наше окно',0
szClassName db 'ASMCLASS32',0
Buffer db 'Привет из УФУ!',0
MSG_L EQU ($-offset Buffer-1)
.code
start:
call GetModuleHandleA,0
mov [hInst], eax
reg_class:
mov [wc.clsStyle], CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS
mov [wc.clsLpfnWndProc], offset WndProc
mov [wc.clsCbClsExtra], 0
mov [wc.clsCbWndExtra], 0
mov eax, [hInst]
mov [wc.clsHInstance], eax
call LoadIconA,0,IDI_APPLICATION
mov [wc.clsHIcon], eax
call LoadCursorA,0,IDC_ARROW
mov [wc.clsHCursor], eax
mov [wc.clsHbrBackground], COLOR_WINDOW + 1
mov dword ptr [wc.clsLpszMenuName], 0
mov dword ptr [wc.clsLpszClassName], offset szClassName
push offset wc
call RegisterClassA
call CreateWindowExA,0,offset szClassName,offset szTitleName,\
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,\
CW_USEDEFAULT,0,0,[hInst],0
mov [newhwnd], eax
call ShowWindow,[newhwnd],SW_SHOWNORMAL
call UpdateWindow,[newhwnd]
msg_loop:
call GetMessageA,offset msg,0,0,0
cmp ax, 0
je end_loop
call DispatchMessageA,offset msg
jmp msg_loop
end_loop:
call ExitProcess,0
;-----------------------------------------------------------------------------
WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD,\
wparam:DWORD, lparam:DWORD
LOCAL hDC:DWORD
cmp [wmsg], WM_DESTROY
je wmdestroy
cmp [wmsg],WM_PAINT
je wmpaint
jmp defwndproc
defwndproc:
call DefWindowProcA,[hwnd],[wmsg],[wparam],[lparam]
jmp finish
wmdestroy:
push 0
call PostQuitMessage
mov eax, 0
jmp finish
wmpaint:
call BeginPaint,[hwnd],offset lppaint
mov [hDC],eax
call TextOutA,[hDC],5,5,offset Buffer,MSG_L
call EndPaint,[hwnd],offset lppaint
mov eax,0
finish:
ret
WndProc endp
;-----------------------------------------------------------------------------
public WndProc
end start
Рис.3.2. Результат работы графического приложения
Дата публикования: 2015-10-09; Прочитано: 364 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!