"Fossies" - the Fresh Open Source Software Archive 
Member "fasm/source/Win32/fasm.asm" (21 Feb 2022, 8205 Bytes) of package /linux/misc/fasm-1.73.30.tgz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Generic Assembler source code syntax highlighting (style:
standard) with prefixed line numbers.
Alternatively you can here
view or
download the uninterpreted source code file.
See also the latest
Fossies "Diffs" side-by-side code changes report for "fasm.asm":
1.73.29_vs_1.73.30.
1
2 ; flat assembler interface for Win32
3 ; Copyright (c) 1999-2022, Tomasz Grysztar.
4 ; All rights reserved.
5
6 format PE console
7
8 section '.text' code readable executable
9
10 start:
11
12 mov [con_handle],STD_OUTPUT_HANDLE
13 mov esi,_logo
14 call display_string
15
16 call get_params
17 jc information
18
19 call init_memory
20
21 mov esi,_memory_prefix
22 call display_string
23 mov eax,[memory_end]
24 sub eax,[memory_start]
25 add eax,[additional_memory_end]
26 sub eax,[additional_memory]
27 shr eax,10
28 call display_number
29 mov esi,_memory_suffix
30 call display_string
31
32 call [GetTickCount]
33 mov [start_time],eax
34
35 and [preprocessing_done],0
36 call preprocessor
37 or [preprocessing_done],-1
38 call parser
39 call assembler
40 call formatter
41
42 call display_user_messages
43 movzx eax,[current_pass]
44 inc eax
45 call display_number
46 mov esi,_passes_suffix
47 call display_string
48 call [GetTickCount]
49 sub eax,[start_time]
50 xor edx,edx
51 mov ebx,100
52 div ebx
53 or eax,eax
54 jz display_bytes_count
55 xor edx,edx
56 mov ebx,10
57 div ebx
58 push edx
59 call display_number
60 mov dl,'.'
61 call display_character
62 pop eax
63 call display_number
64 mov esi,_seconds_suffix
65 call display_string
66 display_bytes_count:
67 mov eax,[written_size]
68 call display_number
69 mov esi,_bytes_suffix
70 call display_string
71 xor al,al
72 jmp exit_program
73
74 information:
75 mov esi,_usage
76 call display_string
77 mov al,1
78 jmp exit_program
79
80 get_params:
81 mov [input_file],0
82 mov [output_file],0
83 mov [symbols_file],0
84 mov [memory_setting],0
85 mov [passes_limit],100
86 call [GetCommandLine]
87 mov [definitions_pointer],predefinitions
88 mov esi,eax
89 mov edi,params
90 find_command_start:
91 lodsb
92 cmp al,20h
93 je find_command_start
94 cmp al,22h
95 je skip_quoted_name
96 skip_name:
97 lodsb
98 cmp al,20h
99 je find_param
100 or al,al
101 jz all_params
102 jmp skip_name
103 skip_quoted_name:
104 lodsb
105 cmp al,22h
106 je find_param
107 or al,al
108 jz all_params
109 jmp skip_quoted_name
110 find_param:
111 lodsb
112 cmp al,20h
113 je find_param
114 cmp al,'-'
115 je option_param
116 cmp al,0Dh
117 je all_params
118 or al,al
119 jz all_params
120 cmp [input_file],0
121 jne get_output_file
122 mov [input_file],edi
123 jmp process_param
124 get_output_file:
125 cmp [output_file],0
126 jne bad_params
127 mov [output_file],edi
128 process_param:
129 cmp al,22h
130 je string_param
131 copy_param:
132 cmp edi,params+1000h
133 jae bad_params
134 stosb
135 lodsb
136 cmp al,20h
137 je param_end
138 cmp al,0Dh
139 je param_end
140 or al,al
141 jz param_end
142 jmp copy_param
143 string_param:
144 lodsb
145 cmp al,22h
146 je string_param_end
147 cmp al,0Dh
148 je param_end
149 or al,al
150 jz param_end
151 cmp edi,params+1000h
152 jae bad_params
153 stosb
154 jmp string_param
155 option_param:
156 lodsb
157 cmp al,'m'
158 je memory_option
159 cmp al,'M'
160 je memory_option
161 cmp al,'p'
162 je passes_option
163 cmp al,'P'
164 je passes_option
165 cmp al,'d'
166 je definition_option
167 cmp al,'D'
168 je definition_option
169 cmp al,'s'
170 je symbols_option
171 cmp al,'S'
172 je symbols_option
173 bad_params:
174 stc
175 ret
176 get_option_value:
177 xor eax,eax
178 mov edx,eax
179 get_option_digit:
180 lodsb
181 cmp al,20h
182 je option_value_ok
183 cmp al,0Dh
184 je option_value_ok
185 or al,al
186 jz option_value_ok
187 sub al,30h
188 jc invalid_option_value
189 cmp al,9
190 ja invalid_option_value
191 imul edx,10
192 jo invalid_option_value
193 add edx,eax
194 jc invalid_option_value
195 jmp get_option_digit
196 option_value_ok:
197 dec esi
198 clc
199 ret
200 invalid_option_value:
201 stc
202 ret
203 memory_option:
204 lodsb
205 cmp al,20h
206 je memory_option
207 cmp al,0Dh
208 je bad_params
209 or al,al
210 jz bad_params
211 dec esi
212 call get_option_value
213 or edx,edx
214 jz bad_params
215 cmp edx,1 shl (32-10)
216 jae bad_params
217 mov [memory_setting],edx
218 jmp find_param
219 passes_option:
220 lodsb
221 cmp al,20h
222 je passes_option
223 cmp al,0Dh
224 je bad_params
225 or al,al
226 jz bad_params
227 dec esi
228 call get_option_value
229 or edx,edx
230 jz bad_params
231 cmp edx,10000h
232 ja bad_params
233 mov [passes_limit],dx
234 jmp find_param
235 definition_option:
236 lodsb
237 cmp al,20h
238 je definition_option
239 cmp al,0Dh
240 je bad_params
241 or al,al
242 jz bad_params
243 dec esi
244 push edi
245 mov edi,[definitions_pointer]
246 call convert_definition_option
247 mov [definitions_pointer],edi
248 pop edi
249 jc bad_params
250 jmp find_param
251 symbols_option:
252 mov [symbols_file],edi
253 find_symbols_file_name:
254 lodsb
255 cmp al,20h
256 jne process_param
257 jmp find_symbols_file_name
258 param_end:
259 dec esi
260 string_param_end:
261 cmp edi,params+1000h
262 jae bad_params
263 xor al,al
264 stosb
265 jmp find_param
266 all_params:
267 cmp [input_file],0
268 je bad_params
269 mov eax,[definitions_pointer]
270 mov byte [eax],0
271 mov [initial_definitions],predefinitions
272 clc
273 ret
274 convert_definition_option:
275 mov ecx,edi
276 cmp edi,predefinitions+1000h
277 jae bad_definition_option
278 xor al,al
279 stosb
280 copy_definition_name:
281 lodsb
282 cmp al,'='
283 je copy_definition_value
284 cmp al,20h
285 je bad_definition_option
286 cmp al,0Dh
287 je bad_definition_option
288 or al,al
289 jz bad_definition_option
290 cmp edi,predefinitions+1000h
291 jae bad_definition_option
292 stosb
293 inc byte [ecx]
294 jnz copy_definition_name
295 bad_definition_option:
296 stc
297 ret
298 copy_definition_value:
299 lodsb
300 cmp al,20h
301 je definition_value_end
302 cmp al,0Dh
303 je definition_value_end
304 or al,al
305 jz definition_value_end
306 cmp al,'\'
307 jne definition_value_character
308 cmp byte [esi],20h
309 jne definition_value_character
310 lodsb
311 definition_value_character:
312 cmp edi,predefinitions+1000h
313 jae bad_definition_option
314 stosb
315 jmp copy_definition_value
316 definition_value_end:
317 dec esi
318 cmp edi,predefinitions+1000h
319 jae bad_definition_option
320 xor al,al
321 stosb
322 clc
323 ret
324
325 include 'system.inc'
326
327 include '..\errors.inc'
328 include '..\symbdump.inc'
329 include '..\preproce.inc'
330 include '..\parser.inc'
331 include '..\exprpars.inc'
332 include '..\assemble.inc'
333 include '..\exprcalc.inc'
334 include '..\formats.inc'
335 include '..\x86_64.inc'
336 include '..\avx.inc'
337
338 include '..\tables.inc'
339 include '..\messages.inc'
340
341 section '.data' data readable writeable
342
343 include '..\version.inc'
344
345 _copyright db 'Copyright (c) 1999-2022, Tomasz Grysztar',0Dh,0Ah,0
346
347 _logo db 'flat assembler version ',VERSION_STRING,0
348 _usage db 0Dh,0Ah
349 db 'usage: fasm <source> [output]',0Dh,0Ah
350 db 'optional settings:',0Dh,0Ah
351 db ' -m <limit> set the limit in kilobytes for the available memory',0Dh,0Ah
352 db ' -p <limit> set the maximum allowed number of passes',0Dh,0Ah
353 db ' -d <name>=<value> define symbolic variable',0Dh,0Ah
354 db ' -s <file> dump symbolic information for debugging',0Dh,0Ah
355 db 0
356 _memory_prefix db ' (',0
357 _memory_suffix db ' kilobytes memory)',0Dh,0Ah,0
358 _passes_suffix db ' passes, ',0
359 _seconds_suffix db ' seconds, ',0
360 _bytes_suffix db ' bytes.',0Dh,0Ah,0
361
362 align 4
363
364 include '..\variable.inc'
365
366 con_handle dd ?
367 memory_setting dd ?
368 start_time dd ?
369 definitions_pointer dd ?
370 bytes_count dd ?
371 displayed_count dd ?
372 character db ?
373 last_displayed rb 2
374 preprocessing_done db ?
375
376 params rb 1000h
377 options rb 1000h
378 predefinitions rb 1000h
379 buffer rb 4000h
380
381 stack 10000h
382
383 section '.idata' import data readable writeable
384
385 dd 0,0,0,rva kernel_name,rva kernel_table
386 dd 0,0,0,0,0
387
388 kernel_table:
389 ExitProcess dd rva _ExitProcess
390 CreateFile dd rva _CreateFileA
391 ReadFile dd rva _ReadFile
392 WriteFile dd rva _WriteFile
393 CloseHandle dd rva _CloseHandle
394 SetFilePointer dd rva _SetFilePointer
395 GetCommandLine dd rva _GetCommandLineA
396 GetEnvironmentVariable dd rva _GetEnvironmentVariable
397 GetStdHandle dd rva _GetStdHandle
398 VirtualAlloc dd rva _VirtualAlloc
399 VirtualFree dd rva _VirtualFree
400 GetTickCount dd rva _GetTickCount
401 GetSystemTime dd rva _GetSystemTime
402 GlobalMemoryStatus dd rva _GlobalMemoryStatus
403 dd 0
404
405 kernel_name db 'KERNEL32.DLL',0
406
407 _ExitProcess dw 0
408 db 'ExitProcess',0
409 _CreateFileA dw 0
410 db 'CreateFileA',0
411 _ReadFile dw 0
412 db 'ReadFile',0
413 _WriteFile dw 0
414 db 'WriteFile',0
415 _CloseHandle dw 0
416 db 'CloseHandle',0
417 _SetFilePointer dw 0
418 db 'SetFilePointer',0
419 _GetCommandLineA dw 0
420 db 'GetCommandLineA',0
421 _GetEnvironmentVariable dw 0
422 db 'GetEnvironmentVariableA',0
423 _GetStdHandle dw 0
424 db 'GetStdHandle',0
425 _VirtualAlloc dw 0
426 db 'VirtualAlloc',0
427 _VirtualFree dw 0
428 db 'VirtualFree',0
429 _GetTickCount dw 0
430 db 'GetTickCount',0
431 _GetSystemTime dw 0
432 db 'GetSystemTime',0
433 _GlobalMemoryStatus dw 0
434 db 'GlobalMemoryStatus',0
435
436 section '.reloc' fixups data readable discardable