Структура программы на ассемблере
Степень завершённости урока: 65%
Статистика урока:
Программа на ассемблере состоит из нескольких секций:
Пример:
section '.idata' import data readable writeable library kernel,'KERNEL32.DLL',\ user,'USER32.DLL'
Ниже - пример кода на FASM, который создаёт пустое окно.
format PE GUI 4.0entry startinclude 'win32a.inc'
section '.code' code readable executable
start: push 0 call [GetModuleHandle] mov [hInstance], eax push 32512 push 0 call [LoadCursor] mov [hCursor], eax mov [wc.style], CS_HREDRAW or CS_VREDRAW mov [wc.lpfnWndProc], WindowProc mov [wc.cbClsExtra], 0 mov [wc.cbWndExtra], 0 mov eax, [hInstance] mov [wc.hInstance], eax mov eax, [hCursor] mov [wc.hCursor], eax mov [wc.hbrBackground], COLOR_WINDOW + 1 mov [wc.lpszMenuName], 0 mov [wc.lpszClassName], className mov [wc.hIcon], 0
push wc call [RegisterClass] test eax, eax jz exit
push 0 push [hInstance] push 0 push 0 push 600 push 800 push 0x80000000 push 0x80000000 push WS_OVERLAPPEDWINDOW push windowTitle push className push 0 call [CreateWindowEx] test eax, eax jz exit mov [hWnd], eax
push SW_SHOW push [hWnd] call [ShowWindow]
push [hWnd] call [UpdateWindow]
msg_loop: lea eax, [msg] push 0 push 0 push 0 push eax call [GetMessage] test eax, eax jz exit
lea eax, [msg] push eax call [TranslateMessage]
lea eax, [msg] push eax call [DispatchMessage] jmp msg_loop
exit: push [msg.wParam] call [ExitProcess]
proc WindowProc hWnd, uMsg, wParam, lParam cmp [uMsg], WM_DESTROY jne .default push 0 call [PostQuitMessage] xor eax, eax ret .default: push [lParam] push [wParam] push [uMsg] push [hWnd] call [DefWindowProc] retendp
section '.data' data readable writeable
className db 'SimpleClass',0windowTitle db 'Пустое окно',0
hInstance dd 0hCursor dd 0hWnd dd 0wc WNDCLASSmsg MSG
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL'
import kernel32,\ GetModuleHandle,'GetModuleHandleA',\ ExitProcess,'ExitProcess'
import user32,\ RegisterClass,'RegisterClassA',\ CreateWindowEx,'CreateWindowExA',\ ShowWindow,'ShowWindow',\ UpdateWindow,'UpdateWindow',\ GetMessage,'GetMessageA',\ TranslateMessage,'TranslateMessage',\ DispatchMessage,'DispatchMessageA',\ DefWindowProc,'DefWindowProcA',\ PostQuitMessage,'PostQuitMessage',\ LoadCursor,'LoadCursorA'
Страница обновлена 23 ноября 2025 года.