Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Трансляция программ



Для получения исполняемых файлов, исходные тексты которых приведены в методических указаниях, использовалась система программирования 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; Прочитано: 353 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...