Структура программы на ассемблере


            

Структура программы на ассемблере

Степень завершённости урока: 65%   

Статистика урока:

Программа на ассемблере состоит из нескольких секций:

Ниже - пример кода на FASM, который создаёт пустое окно.

format PE GUI 4.0
entry start
include '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]
ret
endp
section '.data' data readable writeable
className db 'SimpleClass',0
windowTitle db 'Пустое окно',0
hInstance dd 0
hCursor dd 0
hWnd dd 0
wc WNDCLASS
msg 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 года.