Команди передачі управління | командні переривання | Команди для роботи зі стеком | Ключові слова | імена користувача | Директива MODEL | Директиви спрощеного визначення сегментів | Директиви визначення сегментів і груп | Директиви опису процедури | макрозасоби |

загрузка...
загрузка...
На головну

ТРАНСЛЯЦІЯ програм

  1. I. ПРОГРАМА приймально-здавальних випробувань ЕЛЕКТРОУСТАНОВКИ БУДІВЛІ
  2. I. Програма підсумкового іспиту.
  3. I. Цілі і завдання робочої програми
  4. II. ПРОГРАМА ВИПРОБУВАНЬ ЕЛЕКТРОУСТАНОВКИ БУДІВЛІ ДЛЯ ПРОДАЖУ ТА ВИКОРИСТАННЯ СЕРТИФІКАЦІЇ
  5. II. Порядок реалізації основних освітніх програм за спеціальностями інтернатури і ординатури.
  6. II. Характеристика основних заходів підпрограми

Для отримання виконуваних файлів, вихідні тексти яких наведені в методичних вказівках, використовувалася система програмування 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. Результат роботи графічного додатку

 



ОПЕРАЦІЇ В вираженні | компіляція
загрузка...
© um.co.ua - учбові матеріали та реферати