1+ ; -----------------------------------------------------------------------------
2+ ; \file code64.asm
3+ ; \note (c) 2025 by Jens Kallup - paule32
4+ ; all rights reserved.
5+ ;
6+ ; \desc Create a dBASE MS-Windows 11 64-bit Pro EXE.
7+ ; -----------------------------------------------------------------------------
18bits 64
29
310_start:
@@ -36,9 +43,6 @@ _start:
3643 xor eax , eax ; rax = 0
3744 mov ecx , 10 ; 10 qwords
3845 rep stosq
39- ;.fillwc:
40- ; mov [rdi + ((rcx*8) - 8)], rax
41- ; loop .fillwc
4246
4347 mov dword [ rdi + 0 ], 80 ; cbSize
4448 mov dword [ rdi + 4 ], CS_HREDRAW | CS_VREDRAW ; style
@@ -48,10 +52,6 @@ _start:
4852 add rax , RVA_TEXT(WndProc)
4953 mov [ rdi + 8 ], rax
5054
51- ; cbClsExtra/cbWndExtra = 0
52- ;mov dword [rdi + 16], 0
53- ;mov dword [rdi + 20], 0
54-
5555 ; hInstance
5656 mov [ rdi + 24 ], r14
5757
@@ -79,8 +79,7 @@ _start:
7979 mov qword [ rdi + 56 ], 0
8080
8181 ; lpszClassName = &winclassW (UTF-16)
82- mov rax , IMAGE_BASE
83- add rax , RVA_DATA(winclassW)
82+ GETEXT rax , winclassW
8483 mov [ rdi + 64 ], rax
8584
8685 ; hIconSm = NULL
@@ -97,20 +96,18 @@ _start:
9796 test eax , eax
9897 jz .reg_fail
9998
100- .class_ok:
101- ;ShowMessageW ClassOkW,capW
99+ .class_ok:
100+ ;ShowMessageW ClassOkW,capW
102101 ; ------------------------------------------------------------------------
103102 ; CreateWindowExW(
104103 ; 0, class, title, WS_OVERLAPPEDWINDOW,
105104 ; CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
106105 ; NULL, NULL, hInstance, NULL)
107106 ; ------------------------------------------------------------------------
108- ;AddShadow 32 + 8*8 ; 32 Shadow + 8 Args
107+ ;AddShadow 32 + 8*8 ; 32 Shadow + 8 Args
109108 xor ecx , ecx ; 1. dwExStyle = 0
110- mov rdx , IMAGE_BASE
111- add rdx , RVA_DATA(winclassW) ; 2. lpClassName
112- mov r8 , IMAGE_BASE
113- add r8 , RVA_DATA(titleW) ; 3. lpWindowName
109+ GETEXT rdx , winclassW ; 2. lpClassName
110+ GETEXT r8 , titleW ; 3. lpWindowName
114111 mov r9d , WS_OVERLAPPEDWINDOW ; 4. dwStyle
115112
116113 ; 5.–12. Parameter auf den Stack (in der Reihenfolge!)
@@ -136,80 +133,81 @@ _start:
136133
137134 mov rsi , rax
138135
139- ; Show / Update
140- mov rcx , rsi
141- mov edx , 5 ; SW_SHOW
142- sub rsp , 32
143- mov rax , IMAGE_BASE
144- add rax , RVA_IDATA(IAT_win32_ShowWindow)
145- call [ rax ]
146- add rsp , 32
147-
148- mov rcx , rsi
149- sub rsp , 32
150- mov rax , IMAGE_BASE
151- add rax , RVA_IDATA(IAT_win32_UpdateWindow)
152- call [ rax ]
153- add rsp , 32
154-
155- ; --- Message loop (MSG=48B) ---
156- sub rsp , 48
157- mov rbx , rsp
158- .msg:
159- mov rcx , rbx
160- xor edx , edx
161- xor r8d , r8d
162- xor r9d , r9d
163- sub rsp , 32
164- mov rax , IMAGE_BASE
165- add rax , RVA_IDATA(IAT_win32_GetMessageW)
166- call [ rax ]
167- add rsp , 32
168- test eax , eax
169- jz .quit
170-
171- mov rcx , rbx
136+ ; Show / Update
137+ mov rcx , rsi
138+ mov edx , 5 ; SW_SHOW
172139 sub rsp , 32
173140 mov rax , IMAGE_BASE
174- add rax , RVA_IDATA(IAT_win32_TranslateMessage )
141+ add rax , RVA_IDATA(IAT_win32_ShowWindow )
175142 call [ rax ]
176143 add rsp , 32
177144
178- mov rcx , rbx
145+ mov rcx , rsi
179146 sub rsp , 32
180147 mov rax , IMAGE_BASE
181- add rax , RVA_IDATA(IAT_win32_DispatchMessageW )
148+ add rax , RVA_IDATA(IAT_win32_UpdateWindow )
182149 call [ rax ]
183150 add rsp , 32
184- jmp .msg
185- .quit:
186- add rsp , 48
187151
188- ; Aufräumen WNDCLASSEXW-Reserve
189- add rsp , 80
190- jmp .ok
191-
192- .reg_fail:
193- ; GetLastError + anzeigen (du hast die Routine schon)
194- sub rsp , 32
195- mov rax , IMAGE_BASE
196- add rax , RVA_IDATA(IAT_win32_GetLastError)
197- call [ rax ]
198- add rsp , 32
199- ; eax -> deine Fehleranzeige
200- add rsp , 80
201- jmp .done
202-
203- .cw_fail:
204- sub rsp , 32
205- mov rax , IMAGE_BASE
206- add rax , RVA_IDATA(IAT_win32_GetLastError)
207- call [ rax ]
208- add rsp , 32
209- ; eax -> deine Fehleranzeige
152+ ; --- Message loop (MSG=48B) ---
153+ sub rsp , 48
154+ mov rbx , rsp
155+ .msg:
156+ mov rcx , rbx
157+ xor edx , edx
158+ xor r8d , r8d
159+ xor r9d , r9d
160+ sub rsp , 32
161+ mov rax , IMAGE_BASE
162+ add rax , RVA_IDATA(IAT_win32_GetMessageW)
163+ call [ rax ]
164+ add rsp , 32
165+ test eax , eax
166+ jz .quit
167+
168+ mov rcx , rbx
169+ sub rsp , 32
170+ mov rax , IMAGE_BASE
171+ add rax , RVA_IDATA(IAT_win32_TranslateMessage)
172+ call [ rax ]
173+ add rsp , 32
174+
175+ mov rcx , rbx
176+ sub rsp , 32
177+ mov rax , IMAGE_BASE
178+ add rax , RVA_IDATA(IAT_win32_DispatchMessageW)
179+ call [ rax ]
180+ add rsp , 32
181+ jmp .msg
182+ .quit:
183+ add rsp , 48
184+
185+ ; Aufräumen WNDCLASSEXW-Reserve
210186 add rsp , 80
211- jmp .done
187+ jmp .ok
188+
189+ .reg_fail:
190+ ; GetLastError + anzeigen (du hast die Routine schon)
191+ sub rsp , 32
192+ mov rax , IMAGE_BASE
193+ add rax , RVA_IDATA(IAT_win32_GetLastError)
194+ call [ rax ]
195+ add rsp , 32
196+ ; eax -> deine Fehleranzeige
197+ add rsp , 80
198+ jmp .done
199+
200+ .cw_fail:
201+ sub rsp , 32
202+ mov rax , IMAGE_BASE
203+ add rax , RVA_IDATA(IAT_win32_GetLastError)
204+ call [ rax ]
205+ add rsp , 32
206+ ; eax -> deine Fehleranzeige
207+ add rsp , 80
208+ jmp .done
209+
210+ .ok:
211+ .done:
212212
213- .ok:
214- .done:
215213 call_ExitProcess 2
0 commit comments