- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
format pe gui 5.0
include 'win32ax.inc'
_title db 'stackvar',0
_class db '#32770',0
entry $
sub esp,32
mov esi,esp
xor edi,edi
mov ecx,$80000000
mov eax,WS_VISIBLE+WS_OVERLAPPEDWINDOW
invoke CreateWindowEx,edi,_class,edi,eax,ecx,ecx,ecx,ecx,edi,edi,edi,edi
mov ebx,eax
invoke SetWindowLong,ebx,GWL_WNDPROC,wnd_proc
mov [esi],eax
invoke SetWindowLong,ebx,GWL_USERDATA,esi
invoke SendMessage,ebx,WM_INITDIALOG,edi,edi
sub esp,32
mov ebx,esp
msg_loop:
invoke GetMessage,ebx,edi,edi,edi
cmp eax,1
jb app_exit
jne msg_loop
invoke DispatchMessage,ebx
jmp msg_loop
wnd_proc:
mov eax,[esp+8]
cmp eax,WM_INITDIALOG
je app_init
cmp eax,WM_CLOSE
je app_exit
mov eax,[esp+4]
invoke GetWindowLong,eax,GWL_USERDATA
pop edx
push dword [eax]
push edx
jmp [CallWindowProc]
app_init:
mov eax,[esp+4]
invoke SendMessage,eax,WM_SETTEXT,0,_title
xor eax,eax
ret
app_exit:
invoke ExitProcess,edi
data import
library\
kernel32,'kernel32.dll',\
user32,'user32.dll'
include 'api\kernel32.inc'
include 'api\user32.inc'
end data
Какая суть требуется? Можно делать то что на более высоком уровне не доступно. Даже при использование вставок асма конструкция подпрограмм неизменна.
А ну да, 32-битка же.
> какая суть требуется
Делать то, что на более высоком уровне недоступно и/или медленно. А для окошек есть всякие C#.
Именно поэтому я за "fastcall".
Прямо как у взрослых конпеляторов!