mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Merge pull request #1268 from metopa/patch-1
Support of the .inc extension in Assembly group.
This commit is contained in:
		| @@ -157,6 +157,7 @@ Assembly: | ||||
|   - nasm | ||||
|   extensions: | ||||
|   - .asm | ||||
|   - .inc | ||||
|  | ||||
| Augeas: | ||||
|   type: programming | ||||
|   | ||||
							
								
								
									
										2048
									
								
								samples/Assembly/ASSEMBLE.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2048
									
								
								samples/Assembly/ASSEMBLE.inc
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										350
									
								
								samples/Assembly/FASM.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										350
									
								
								samples/Assembly/FASM.asm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,350 @@ | ||||
|  | ||||
| ; flat assembler interface for Win32 | ||||
| ; Copyright (c) 1999-2014, Tomasz Grysztar. | ||||
| ; All rights reserved. | ||||
|  | ||||
| 	format	PE console | ||||
|  | ||||
| section '.text' code readable executable | ||||
|  | ||||
| start: | ||||
|  | ||||
| 	mov	[con_handle],STD_OUTPUT_HANDLE | ||||
| 	mov	esi,_logo | ||||
| 	call	display_string | ||||
|  | ||||
| 	call	get_params | ||||
| 	jc	information | ||||
|  | ||||
| 	call	init_memory | ||||
|  | ||||
| 	mov	esi,_memory_prefix | ||||
| 	call	display_string | ||||
| 	mov	eax,[memory_end] | ||||
| 	sub	eax,[memory_start] | ||||
| 	add	eax,[additional_memory_end] | ||||
| 	sub	eax,[additional_memory] | ||||
| 	shr	eax,10 | ||||
| 	call	display_number | ||||
| 	mov	esi,_memory_suffix | ||||
| 	call	display_string | ||||
|  | ||||
| 	call	[GetTickCount] | ||||
| 	mov	[start_time],eax | ||||
|  | ||||
| 	call	preprocessor | ||||
| 	call	parser | ||||
| 	call	assembler | ||||
| 	call	formatter | ||||
|  | ||||
| 	call	display_user_messages | ||||
| 	movzx	eax,[current_pass] | ||||
| 	inc	eax | ||||
| 	call	display_number | ||||
| 	mov	esi,_passes_suffix | ||||
| 	call	display_string | ||||
| 	call	[GetTickCount] | ||||
| 	sub	eax,[start_time] | ||||
| 	xor	edx,edx | ||||
| 	mov	ebx,100 | ||||
| 	div	ebx | ||||
| 	or	eax,eax | ||||
| 	jz	display_bytes_count | ||||
| 	xor	edx,edx | ||||
| 	mov	ebx,10 | ||||
| 	div	ebx | ||||
| 	push	edx | ||||
| 	call	display_number | ||||
| 	mov	dl,'.' | ||||
| 	call	display_character | ||||
| 	pop	eax | ||||
| 	call	display_number | ||||
| 	mov	esi,_seconds_suffix | ||||
| 	call	display_string | ||||
|       display_bytes_count: | ||||
| 	mov	eax,[written_size] | ||||
| 	call	display_number | ||||
| 	mov	esi,_bytes_suffix | ||||
| 	call	display_string | ||||
| 	xor	al,al | ||||
| 	jmp	exit_program | ||||
|  | ||||
| information: | ||||
| 	mov	esi,_usage | ||||
| 	call	display_string | ||||
| 	mov	al,1 | ||||
| 	jmp	exit_program | ||||
|  | ||||
| get_params: | ||||
| 	mov	[input_file],0 | ||||
| 	mov	[output_file],0 | ||||
| 	mov	[symbols_file],0 | ||||
| 	mov	[memory_setting],0 | ||||
| 	mov	[passes_limit],100 | ||||
| 	call	[GetCommandLine] | ||||
| 	mov	esi,eax | ||||
| 	mov	edi,params | ||||
|     find_command_start: | ||||
| 	lodsb | ||||
| 	cmp	al,20h | ||||
| 	je	find_command_start | ||||
| 	cmp	al,22h | ||||
| 	je	skip_quoted_name | ||||
|     skip_name: | ||||
| 	lodsb | ||||
| 	cmp	al,20h | ||||
| 	je	find_param | ||||
| 	or	al,al | ||||
| 	jz	all_params | ||||
| 	jmp	skip_name | ||||
|     skip_quoted_name: | ||||
| 	lodsb | ||||
| 	cmp	al,22h | ||||
| 	je	find_param | ||||
| 	or	al,al | ||||
| 	jz	all_params | ||||
| 	jmp	skip_quoted_name | ||||
|     find_param: | ||||
| 	lodsb | ||||
| 	cmp	al,20h | ||||
| 	je	find_param | ||||
| 	cmp	al,'-' | ||||
| 	je	option_param | ||||
| 	cmp	al,0Dh | ||||
| 	je	all_params | ||||
| 	or	al,al | ||||
| 	jz	all_params | ||||
| 	cmp	[input_file],0 | ||||
| 	jne	get_output_file | ||||
| 	mov	[input_file],edi | ||||
| 	jmp	process_param | ||||
|       get_output_file: | ||||
| 	cmp	[output_file],0 | ||||
| 	jne	bad_params | ||||
| 	mov	[output_file],edi | ||||
|     process_param: | ||||
| 	cmp	al,22h | ||||
| 	je	string_param | ||||
|     copy_param: | ||||
| 	stosb | ||||
| 	lodsb | ||||
| 	cmp	al,20h | ||||
| 	je	param_end | ||||
| 	cmp	al,0Dh | ||||
| 	je	param_end | ||||
| 	or	al,al | ||||
| 	jz	param_end | ||||
| 	jmp	copy_param | ||||
|     string_param: | ||||
| 	lodsb | ||||
| 	cmp	al,22h | ||||
| 	je	string_param_end | ||||
| 	cmp	al,0Dh | ||||
| 	je	param_end | ||||
| 	or	al,al | ||||
| 	jz	param_end | ||||
| 	stosb | ||||
| 	jmp	string_param | ||||
|     option_param: | ||||
| 	lodsb | ||||
| 	cmp	al,'m' | ||||
| 	je	memory_option | ||||
| 	cmp	al,'M' | ||||
| 	je	memory_option | ||||
| 	cmp	al,'p' | ||||
| 	je	passes_option | ||||
| 	cmp	al,'P' | ||||
| 	je	passes_option | ||||
| 	cmp	al,'s' | ||||
| 	je	symbols_option | ||||
| 	cmp	al,'S' | ||||
| 	je	symbols_option | ||||
|     bad_params: | ||||
| 	stc | ||||
| 	ret | ||||
|     get_option_value: | ||||
| 	xor	eax,eax | ||||
| 	mov	edx,eax | ||||
|     get_option_digit: | ||||
| 	lodsb | ||||
| 	cmp	al,20h | ||||
| 	je	option_value_ok | ||||
| 	cmp	al,0Dh | ||||
| 	je	option_value_ok | ||||
| 	or	al,al | ||||
| 	jz	option_value_ok | ||||
| 	sub	al,30h | ||||
| 	jc	invalid_option_value | ||||
| 	cmp	al,9 | ||||
| 	ja	invalid_option_value | ||||
| 	imul	edx,10 | ||||
| 	jo	invalid_option_value | ||||
| 	add	edx,eax | ||||
| 	jc	invalid_option_value | ||||
| 	jmp	get_option_digit | ||||
|     option_value_ok: | ||||
| 	dec	esi | ||||
| 	clc | ||||
| 	ret | ||||
|     invalid_option_value: | ||||
| 	stc | ||||
| 	ret | ||||
|     memory_option: | ||||
| 	lodsb | ||||
| 	cmp	al,20h | ||||
| 	je	memory_option | ||||
| 	cmp	al,0Dh | ||||
| 	je	bad_params | ||||
| 	or	al,al | ||||
| 	jz	bad_params | ||||
| 	dec	esi | ||||
| 	call	get_option_value | ||||
| 	or	edx,edx | ||||
| 	jz	bad_params | ||||
| 	cmp	edx,1 shl (32-10) | ||||
| 	jae	bad_params | ||||
| 	mov	[memory_setting],edx | ||||
| 	jmp	find_param | ||||
|     passes_option: | ||||
| 	lodsb | ||||
| 	cmp	al,20h | ||||
| 	je	passes_option | ||||
| 	cmp	al,0Dh | ||||
| 	je	bad_params | ||||
| 	or	al,al | ||||
| 	jz	bad_params | ||||
| 	dec	esi | ||||
| 	call	get_option_value | ||||
| 	or	edx,edx | ||||
| 	jz	bad_params | ||||
| 	cmp	edx,10000h | ||||
| 	ja	bad_params | ||||
| 	mov	[passes_limit],dx | ||||
| 	jmp	find_param | ||||
|     symbols_option: | ||||
| 	mov	[symbols_file],edi | ||||
|       find_symbols_file_name: | ||||
| 	lodsb | ||||
| 	cmp	al,20h | ||||
| 	jne	process_param | ||||
| 	jmp	find_symbols_file_name | ||||
|     param_end: | ||||
| 	dec	esi | ||||
|     string_param_end: | ||||
| 	xor	al,al | ||||
| 	stosb | ||||
| 	jmp	find_param | ||||
|     all_params: | ||||
| 	cmp	[input_file],0 | ||||
| 	je	bad_params | ||||
| 	clc | ||||
| 	ret | ||||
|  | ||||
| include 'system.inc' | ||||
|  | ||||
| include '..\errors.inc' | ||||
| include '..\symbdump.inc' | ||||
| include '..\preproce.inc' | ||||
| include '..\parser.inc' | ||||
| include '..\exprpars.inc' | ||||
| include '..\assemble.inc' | ||||
| include '..\exprcalc.inc' | ||||
| include '..\formats.inc' | ||||
| include '..\x86_64.inc' | ||||
| include '..\avx.inc' | ||||
|  | ||||
| include '..\tables.inc' | ||||
| include '..\messages.inc' | ||||
|  | ||||
| section '.data' data readable writeable | ||||
|  | ||||
| include '..\version.inc' | ||||
|  | ||||
| _copyright db 'Copyright (c) 1999-2014, Tomasz Grysztar',0Dh,0Ah,0 | ||||
|  | ||||
| _logo db 'flat assembler  version ',VERSION_STRING,0 | ||||
| _usage db 0Dh,0Ah | ||||
|        db 'usage: fasm <source> [output]',0Dh,0Ah | ||||
|        db 'optional settings:',0Dh,0Ah | ||||
|        db ' -m <limit>    set the limit in kilobytes for the available memory',0Dh,0Ah | ||||
|        db ' -p <limit>    set the maximum allowed number of passes',0Dh,0Ah | ||||
|        db ' -s <file>     dump symbolic information for debugging',0Dh,0Ah | ||||
|        db 0 | ||||
| _memory_prefix db '  (',0 | ||||
| _memory_suffix db ' kilobytes memory)',0Dh,0Ah,0 | ||||
| _passes_suffix db ' passes, ',0 | ||||
| _seconds_suffix db ' seconds, ',0 | ||||
| _bytes_suffix db ' bytes.',0Dh,0Ah,0 | ||||
|  | ||||
| align 4 | ||||
|  | ||||
| include '..\variable.inc' | ||||
|  | ||||
| con_handle dd ? | ||||
| memory_setting dd ? | ||||
| start_time dd ? | ||||
| bytes_count dd ? | ||||
| displayed_count dd ? | ||||
| character db ? | ||||
| last_displayed rb 2 | ||||
|  | ||||
| params rb 1000h | ||||
| options rb 1000h | ||||
| buffer rb 4000h | ||||
|  | ||||
| stack 10000h | ||||
|  | ||||
| section '.idata' import data readable writeable | ||||
|  | ||||
|   dd 0,0,0,rva kernel_name,rva kernel_table | ||||
|   dd 0,0,0,0,0 | ||||
|  | ||||
|   kernel_table: | ||||
|     ExitProcess dd rva _ExitProcess | ||||
|     CreateFile dd rva _CreateFileA | ||||
|     ReadFile dd rva _ReadFile | ||||
|     WriteFile dd rva _WriteFile | ||||
|     CloseHandle dd rva _CloseHandle | ||||
|     SetFilePointer dd rva _SetFilePointer | ||||
|     GetCommandLine dd rva _GetCommandLineA | ||||
|     GetEnvironmentVariable dd rva _GetEnvironmentVariable | ||||
|     GetStdHandle dd rva _GetStdHandle | ||||
|     VirtualAlloc dd rva _VirtualAlloc | ||||
|     VirtualFree dd rva _VirtualFree | ||||
|     GetTickCount dd rva _GetTickCount | ||||
|     GetSystemTime dd rva _GetSystemTime | ||||
|     GlobalMemoryStatus dd rva _GlobalMemoryStatus | ||||
|     dd 0 | ||||
|  | ||||
|   kernel_name db 'KERNEL32.DLL',0 | ||||
|  | ||||
|   _ExitProcess dw 0 | ||||
|     db 'ExitProcess',0 | ||||
|   _CreateFileA dw 0 | ||||
|     db 'CreateFileA',0 | ||||
|   _ReadFile dw 0 | ||||
|     db 'ReadFile',0 | ||||
|   _WriteFile dw 0 | ||||
|     db 'WriteFile',0 | ||||
|   _CloseHandle dw 0 | ||||
|     db 'CloseHandle',0 | ||||
|   _SetFilePointer dw 0 | ||||
|     db 'SetFilePointer',0 | ||||
|   _GetCommandLineA dw 0 | ||||
|     db 'GetCommandLineA',0 | ||||
|   _GetEnvironmentVariable dw 0 | ||||
|     db 'GetEnvironmentVariableA',0 | ||||
|   _GetStdHandle dw 0 | ||||
|     db 'GetStdHandle',0 | ||||
|   _VirtualAlloc dw 0 | ||||
|     db 'VirtualAlloc',0 | ||||
|   _VirtualFree dw 0 | ||||
|     db 'VirtualFree',0 | ||||
|   _GetTickCount dw 0 | ||||
|     db 'GetTickCount',0 | ||||
|   _GetSystemTime dw 0 | ||||
|     db 'GetSystemTime',0 | ||||
|   _GlobalMemoryStatus dw 0 | ||||
|     db 'GlobalMemoryStatus',0 | ||||
|  | ||||
| section '.reloc' fixups data readable discardable | ||||
							
								
								
									
										503
									
								
								samples/Assembly/SYSTEM.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										503
									
								
								samples/Assembly/SYSTEM.inc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,503 @@ | ||||
|  | ||||
| ; flat assembler interface for Win32 | ||||
| ; Copyright (c) 1999-2014, Tomasz Grysztar. | ||||
| ; All rights reserved. | ||||
|  | ||||
| CREATE_NEW	       = 1 | ||||
| CREATE_ALWAYS	       = 2 | ||||
| OPEN_EXISTING	       = 3 | ||||
| OPEN_ALWAYS	       = 4 | ||||
| TRUNCATE_EXISTING      = 5 | ||||
|  | ||||
| FILE_SHARE_READ        = 1 | ||||
| FILE_SHARE_WRITE       = 2 | ||||
| FILE_SHARE_DELETE      = 4 | ||||
|  | ||||
| GENERIC_READ	       = 80000000h | ||||
| GENERIC_WRITE	       = 40000000h | ||||
|  | ||||
| STD_INPUT_HANDLE       = 0FFFFFFF6h | ||||
| STD_OUTPUT_HANDLE      = 0FFFFFFF5h | ||||
| STD_ERROR_HANDLE       = 0FFFFFFF4h | ||||
|  | ||||
| MEM_COMMIT	       = 1000h | ||||
| MEM_RESERVE	       = 2000h | ||||
| MEM_DECOMMIT	       = 4000h | ||||
| MEM_RELEASE	       = 8000h | ||||
| MEM_FREE	       = 10000h | ||||
| MEM_PRIVATE	       = 20000h | ||||
| MEM_MAPPED	       = 40000h | ||||
| MEM_RESET	       = 80000h | ||||
| MEM_TOP_DOWN	       = 100000h | ||||
|  | ||||
| PAGE_NOACCESS	       = 1 | ||||
| PAGE_READONLY	       = 2 | ||||
| PAGE_READWRITE	       = 4 | ||||
| PAGE_WRITECOPY	       = 8 | ||||
| PAGE_EXECUTE	       = 10h | ||||
| PAGE_EXECUTE_READ      = 20h | ||||
| PAGE_EXECUTE_READWRITE = 40h | ||||
| PAGE_EXECUTE_WRITECOPY = 80h | ||||
| PAGE_GUARD	       = 100h | ||||
| PAGE_NOCACHE	       = 200h | ||||
|  | ||||
| init_memory: | ||||
| 	xor	eax,eax | ||||
| 	mov	[memory_start],eax | ||||
| 	mov	eax,esp | ||||
| 	and	eax,not 0FFFh | ||||
| 	add	eax,1000h-10000h | ||||
| 	mov	[stack_limit],eax | ||||
| 	mov	eax,[memory_setting] | ||||
| 	shl	eax,10 | ||||
| 	jnz	allocate_memory | ||||
| 	push	buffer | ||||
| 	call	[GlobalMemoryStatus] | ||||
| 	mov	eax,dword [buffer+20] | ||||
| 	mov	edx,dword [buffer+12] | ||||
| 	cmp	eax,0 | ||||
| 	jl	large_memory | ||||
| 	cmp	edx,0 | ||||
| 	jl	large_memory | ||||
| 	shr	eax,2 | ||||
| 	add	eax,edx | ||||
| 	jmp	allocate_memory | ||||
|     large_memory: | ||||
| 	mov	eax,80000000h | ||||
|     allocate_memory: | ||||
| 	mov	edx,eax | ||||
| 	shr	edx,2 | ||||
| 	mov	ecx,eax | ||||
| 	sub	ecx,edx | ||||
| 	mov	[memory_end],ecx | ||||
| 	mov	[additional_memory_end],edx | ||||
| 	push	PAGE_READWRITE | ||||
| 	push	MEM_COMMIT | ||||
| 	push	eax | ||||
| 	push	0 | ||||
| 	call	[VirtualAlloc] | ||||
| 	or	eax,eax | ||||
| 	jz	not_enough_memory | ||||
| 	mov	[memory_start],eax | ||||
| 	add	eax,[memory_end] | ||||
| 	mov	[memory_end],eax | ||||
| 	mov	[additional_memory],eax | ||||
| 	add	[additional_memory_end],eax | ||||
| 	ret | ||||
|     not_enough_memory: | ||||
| 	mov	eax,[additional_memory_end] | ||||
| 	shl	eax,1 | ||||
| 	cmp	eax,4000h | ||||
| 	jb	out_of_memory | ||||
| 	jmp	allocate_memory | ||||
|  | ||||
| exit_program: | ||||
| 	movzx	eax,al | ||||
| 	push	eax | ||||
| 	mov	eax,[memory_start] | ||||
| 	test	eax,eax | ||||
| 	jz	do_exit | ||||
| 	push	MEM_RELEASE | ||||
| 	push	0 | ||||
| 	push	eax | ||||
| 	call	[VirtualFree] | ||||
|     do_exit: | ||||
| 	call	[ExitProcess] | ||||
|  | ||||
| get_environment_variable: | ||||
| 	mov	ecx,[memory_end] | ||||
| 	sub	ecx,edi | ||||
| 	cmp	ecx,4000h | ||||
| 	jbe	buffer_for_variable_ok | ||||
| 	mov	ecx,4000h | ||||
|     buffer_for_variable_ok: | ||||
| 	push	ecx | ||||
| 	push	edi | ||||
| 	push	esi | ||||
| 	call	[GetEnvironmentVariable] | ||||
| 	add	edi,eax | ||||
| 	cmp	edi,[memory_end] | ||||
| 	jae	out_of_memory | ||||
| 	ret | ||||
|  | ||||
| open: | ||||
| 	push	0 | ||||
| 	push	0 | ||||
| 	push	OPEN_EXISTING | ||||
| 	push	0 | ||||
| 	push	FILE_SHARE_READ | ||||
| 	push	GENERIC_READ | ||||
| 	push	edx | ||||
| 	call	[CreateFile] | ||||
| 	cmp	eax,-1 | ||||
| 	je	file_error | ||||
| 	mov	ebx,eax | ||||
| 	clc | ||||
| 	ret | ||||
|     file_error: | ||||
| 	stc | ||||
| 	ret | ||||
| create: | ||||
| 	push	0 | ||||
| 	push	0 | ||||
| 	push	CREATE_ALWAYS | ||||
| 	push	0 | ||||
| 	push	FILE_SHARE_READ | ||||
| 	push	GENERIC_WRITE | ||||
| 	push	edx | ||||
| 	call	[CreateFile] | ||||
| 	cmp	eax,-1 | ||||
| 	je	file_error | ||||
| 	mov	ebx,eax | ||||
| 	clc | ||||
| 	ret | ||||
| write: | ||||
| 	push	0 | ||||
| 	push	bytes_count | ||||
| 	push	ecx | ||||
| 	push	edx | ||||
| 	push	ebx | ||||
| 	call	[WriteFile] | ||||
| 	or	eax,eax | ||||
| 	jz	file_error | ||||
| 	clc | ||||
| 	ret | ||||
| read: | ||||
| 	mov	ebp,ecx | ||||
| 	push	0 | ||||
| 	push	bytes_count | ||||
| 	push	ecx | ||||
| 	push	edx | ||||
| 	push	ebx | ||||
| 	call	[ReadFile] | ||||
| 	or	eax,eax | ||||
| 	jz	file_error | ||||
| 	cmp	ebp,[bytes_count] | ||||
| 	jne	file_error | ||||
| 	clc | ||||
| 	ret | ||||
| close: | ||||
| 	push	ebx | ||||
| 	call	[CloseHandle] | ||||
| 	ret | ||||
| lseek: | ||||
| 	movzx	eax,al | ||||
| 	push	eax | ||||
| 	push	0 | ||||
| 	push	edx | ||||
| 	push	ebx | ||||
| 	call	[SetFilePointer] | ||||
| 	ret | ||||
|  | ||||
| display_string: | ||||
| 	push	[con_handle] | ||||
| 	call	[GetStdHandle] | ||||
| 	mov	ebp,eax | ||||
| 	mov	edi,esi | ||||
| 	or	ecx,-1 | ||||
| 	xor	al,al | ||||
| 	repne	scasb | ||||
| 	neg	ecx | ||||
| 	sub	ecx,2 | ||||
| 	push	0 | ||||
| 	push	bytes_count | ||||
| 	push	ecx | ||||
| 	push	esi | ||||
| 	push	ebp | ||||
| 	call	[WriteFile] | ||||
| 	ret | ||||
| display_character: | ||||
| 	push	ebx | ||||
| 	mov	[character],dl | ||||
| 	push	[con_handle] | ||||
| 	call	[GetStdHandle] | ||||
| 	mov	ebx,eax | ||||
| 	push	0 | ||||
| 	push	bytes_count | ||||
| 	push	1 | ||||
| 	push	character | ||||
| 	push	ebx | ||||
| 	call	[WriteFile] | ||||
| 	pop	ebx | ||||
| 	ret | ||||
| display_number: | ||||
| 	push	ebx | ||||
| 	mov	ecx,1000000000 | ||||
| 	xor	edx,edx | ||||
| 	xor	bl,bl | ||||
|       display_loop: | ||||
| 	div	ecx | ||||
| 	push	edx | ||||
| 	cmp	ecx,1 | ||||
| 	je	display_digit | ||||
| 	or	bl,bl | ||||
| 	jnz	display_digit | ||||
| 	or	al,al | ||||
| 	jz	digit_ok | ||||
| 	not	bl | ||||
|       display_digit: | ||||
| 	mov	dl,al | ||||
| 	add	dl,30h | ||||
| 	push	ecx | ||||
| 	call	display_character | ||||
| 	pop	ecx | ||||
|       digit_ok: | ||||
| 	mov	eax,ecx | ||||
| 	xor	edx,edx | ||||
| 	mov	ecx,10 | ||||
| 	div	ecx | ||||
| 	mov	ecx,eax | ||||
| 	pop	eax | ||||
| 	or	ecx,ecx | ||||
| 	jnz	display_loop | ||||
| 	pop	ebx | ||||
| 	ret | ||||
|  | ||||
| display_user_messages: | ||||
| 	mov	[displayed_count],0 | ||||
| 	call	show_display_buffer | ||||
| 	cmp	[displayed_count],1 | ||||
| 	jb	line_break_ok | ||||
| 	je	make_line_break | ||||
| 	mov	ax,word [last_displayed] | ||||
| 	cmp	ax,0A0Dh | ||||
| 	je	line_break_ok | ||||
| 	cmp	ax,0D0Ah | ||||
| 	je	line_break_ok | ||||
|       make_line_break: | ||||
| 	mov	word [buffer],0A0Dh | ||||
| 	push	[con_handle] | ||||
| 	call	[GetStdHandle] | ||||
| 	push	0 | ||||
| 	push	bytes_count | ||||
| 	push	2 | ||||
| 	push	buffer | ||||
| 	push	eax | ||||
| 	call	[WriteFile] | ||||
|       line_break_ok: | ||||
| 	ret | ||||
| display_block: | ||||
| 	add	[displayed_count],ecx | ||||
| 	cmp	ecx,1 | ||||
| 	ja	take_last_two_characters | ||||
| 	jb	block_displayed | ||||
| 	mov	al,[last_displayed+1] | ||||
| 	mov	ah,[esi] | ||||
| 	mov	word [last_displayed],ax | ||||
| 	jmp	block_ok | ||||
|       take_last_two_characters: | ||||
| 	mov	ax,[esi+ecx-2] | ||||
| 	mov	word [last_displayed],ax | ||||
|       block_ok: | ||||
| 	push	ecx | ||||
| 	push	[con_handle] | ||||
| 	call	[GetStdHandle] | ||||
| 	pop	ecx | ||||
| 	push	0 | ||||
| 	push	bytes_count | ||||
| 	push	ecx | ||||
| 	push	esi | ||||
| 	push	eax | ||||
| 	call	[WriteFile] | ||||
|       block_displayed: | ||||
| 	ret | ||||
|  | ||||
| fatal_error: | ||||
| 	mov	[con_handle],STD_ERROR_HANDLE | ||||
| 	mov	esi,error_prefix | ||||
| 	call	display_string | ||||
| 	pop	esi | ||||
| 	call	display_string | ||||
| 	mov	esi,error_suffix | ||||
| 	call	display_string | ||||
| 	mov	al,0FFh | ||||
| 	jmp	exit_program | ||||
| assembler_error: | ||||
| 	mov	[con_handle],STD_ERROR_HANDLE | ||||
| 	call	display_user_messages | ||||
| 	push	dword 0 | ||||
| 	mov	ebx,[current_line] | ||||
|       get_error_lines: | ||||
| 	mov	eax,[ebx] | ||||
| 	cmp	byte [eax],0 | ||||
| 	je	get_next_error_line | ||||
| 	push	ebx | ||||
| 	test	byte [ebx+7],80h | ||||
| 	jz	display_error_line | ||||
| 	mov	edx,ebx | ||||
|       find_definition_origin: | ||||
| 	mov	edx,[edx+12] | ||||
| 	test	byte [edx+7],80h | ||||
| 	jnz	find_definition_origin | ||||
| 	push	edx | ||||
|       get_next_error_line: | ||||
| 	mov	ebx,[ebx+8] | ||||
| 	jmp	get_error_lines | ||||
|       display_error_line: | ||||
| 	mov	esi,[ebx] | ||||
| 	call	display_string | ||||
| 	mov	esi,line_number_start | ||||
| 	call	display_string | ||||
| 	mov	eax,[ebx+4] | ||||
| 	and	eax,7FFFFFFFh | ||||
| 	call	display_number | ||||
| 	mov	dl,']' | ||||
| 	call	display_character | ||||
| 	pop	esi | ||||
| 	cmp	ebx,esi | ||||
| 	je	line_number_ok | ||||
| 	mov	dl,20h | ||||
| 	call	display_character | ||||
| 	push	esi | ||||
| 	mov	esi,[esi] | ||||
| 	movzx	ecx,byte [esi] | ||||
| 	inc	esi | ||||
| 	call	display_block | ||||
| 	mov	esi,line_number_start | ||||
| 	call	display_string | ||||
| 	pop	esi | ||||
| 	mov	eax,[esi+4] | ||||
| 	and	eax,7FFFFFFFh | ||||
| 	call	display_number | ||||
| 	mov	dl,']' | ||||
| 	call	display_character | ||||
|       line_number_ok: | ||||
| 	mov	esi,line_data_start | ||||
| 	call	display_string | ||||
| 	mov	esi,ebx | ||||
| 	mov	edx,[esi] | ||||
| 	call	open | ||||
| 	mov	al,2 | ||||
| 	xor	edx,edx | ||||
| 	call	lseek | ||||
| 	mov	edx,[esi+8] | ||||
| 	sub	eax,edx | ||||
| 	jz	line_data_displayed | ||||
| 	push	eax | ||||
| 	xor	al,al | ||||
| 	call	lseek | ||||
| 	mov	ecx,[esp] | ||||
| 	mov	edx,[additional_memory] | ||||
| 	lea	eax,[edx+ecx] | ||||
| 	cmp	eax,[additional_memory_end] | ||||
| 	ja	out_of_memory | ||||
| 	call	read | ||||
| 	call	close | ||||
| 	pop	ecx | ||||
| 	mov	esi,[additional_memory] | ||||
|       get_line_data: | ||||
| 	mov	al,[esi] | ||||
| 	cmp	al,0Ah | ||||
| 	je	display_line_data | ||||
| 	cmp	al,0Dh | ||||
| 	je	display_line_data | ||||
| 	cmp	al,1Ah | ||||
| 	je	display_line_data | ||||
| 	or	al,al | ||||
| 	jz	display_line_data | ||||
| 	inc	esi | ||||
| 	loop	get_line_data | ||||
|       display_line_data: | ||||
| 	mov	ecx,esi | ||||
| 	mov	esi,[additional_memory] | ||||
| 	sub	ecx,esi | ||||
| 	call	display_block | ||||
|       line_data_displayed: | ||||
| 	mov	esi,cr_lf | ||||
| 	call	display_string | ||||
| 	pop	ebx | ||||
| 	or	ebx,ebx | ||||
| 	jnz	display_error_line | ||||
| 	mov	esi,error_prefix | ||||
| 	call	display_string | ||||
| 	pop	esi | ||||
| 	call	display_string | ||||
| 	mov	esi,error_suffix | ||||
| 	call	display_string | ||||
| 	mov	al,2 | ||||
| 	jmp	exit_program | ||||
|  | ||||
| make_timestamp: | ||||
| 	push	buffer | ||||
| 	call	[GetSystemTime] | ||||
| 	movzx	ecx,word [buffer] | ||||
| 	mov	eax,ecx | ||||
| 	sub	eax,1970 | ||||
| 	mov	ebx,365 | ||||
| 	mul	ebx | ||||
| 	mov	ebp,eax | ||||
| 	mov	eax,ecx | ||||
| 	sub	eax,1969 | ||||
| 	shr	eax,2 | ||||
| 	add	ebp,eax | ||||
| 	mov	eax,ecx | ||||
| 	sub	eax,1901 | ||||
| 	mov	ebx,100 | ||||
| 	div	ebx | ||||
| 	sub	ebp,eax | ||||
| 	mov	eax,ecx | ||||
| 	xor	edx,edx | ||||
| 	sub	eax,1601 | ||||
| 	mov	ebx,400 | ||||
| 	div	ebx | ||||
| 	add	ebp,eax | ||||
| 	movzx	ecx,word [buffer+2] | ||||
| 	mov	eax,ecx | ||||
| 	dec	eax | ||||
| 	mov	ebx,30 | ||||
| 	mul	ebx | ||||
| 	add	ebp,eax | ||||
| 	cmp	ecx,8 | ||||
| 	jbe	months_correction | ||||
| 	mov	eax,ecx | ||||
| 	sub	eax,7 | ||||
| 	shr	eax,1 | ||||
| 	add	ebp,eax | ||||
| 	mov	ecx,8 | ||||
|       months_correction: | ||||
| 	mov	eax,ecx | ||||
| 	shr	eax,1 | ||||
| 	add	ebp,eax | ||||
| 	cmp	ecx,2 | ||||
| 	jbe	day_correction_ok | ||||
| 	sub	ebp,2 | ||||
| 	movzx	ecx,word [buffer] | ||||
| 	test	ecx,11b | ||||
| 	jnz	day_correction_ok | ||||
| 	xor	edx,edx | ||||
| 	mov	eax,ecx | ||||
| 	mov	ebx,100 | ||||
| 	div	ebx | ||||
| 	or	edx,edx | ||||
| 	jnz	day_correction | ||||
| 	mov	eax,ecx | ||||
| 	mov	ebx,400 | ||||
| 	div	ebx | ||||
| 	or	edx,edx | ||||
| 	jnz	day_correction_ok | ||||
|       day_correction: | ||||
| 	inc	ebp | ||||
|       day_correction_ok: | ||||
| 	movzx	eax,word [buffer+6] | ||||
| 	dec	eax | ||||
| 	add	eax,ebp | ||||
| 	mov	ebx,24 | ||||
| 	mul	ebx | ||||
| 	movzx	ecx,word [buffer+8] | ||||
| 	add	eax,ecx | ||||
| 	mov	ebx,60 | ||||
| 	mul	ebx | ||||
| 	movzx	ecx,word [buffer+10] | ||||
| 	add	eax,ecx | ||||
| 	mov	ebx,60 | ||||
| 	mul	ebx | ||||
| 	movzx	ecx,word [buffer+12] | ||||
| 	add	eax,ecx | ||||
| 	adc	edx,0 | ||||
| 	ret | ||||
|  | ||||
| error_prefix db 'error: ',0 | ||||
| error_suffix db '.' | ||||
| cr_lf db 0Dh,0Ah,0 | ||||
| line_number_start db ' [',0 | ||||
| line_data_start db ':',0Dh,0Ah,0 | ||||
							
								
								
									
										7060
									
								
								samples/Assembly/X86_64.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7060
									
								
								samples/Assembly/X86_64.inc
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user