symbol_dump:

	push	edi
	mov	edx,[memory_end]
      symb_dump:
	cmp	edx,[labels_list]
	jbe	symbols_dumped
	sub	edx,LABEL_STRUCTURE_SIZE
	cmp	dword [edx+24],0
	je	symb_dump	; do not dump anonymous symbols
	test	byte [edx+8],1
	jz	symb_dump	; do not dump symbols that didn't get defined
	mov	ax,[current_pass]
	cmp	ax,[edx+16]
	jne	symb_dump
	test	byte [edx+8],4 or 2
	jnz	symb_dump	; do not dump assembly-time variables
				; do not dump variables defined with '='
	cmp	word [edx+12], 0
	jnz	symb_dump	; do not dump register-based variables

	mov	al, '0'
	stosb
	mov	al, 'x'
	stosb
	mov	eax, [edx+4]
	mov	ecx, 8
@@:
	rol	eax, 4
	test	al, 0xF
	loopz	@b
	jz	.nohigh
	inc	ecx
@@:
	push	eax
	and	al, 0xF
	cmp	al, 10
	sbb	al, 69h
	das
	stosb
	pop	eax
	rol	eax, 4
	loop	@b
	mov	eax, [edx]
	mov	ecx, 8
	jmp	.low
.nohigh:
	mov	eax, [edx]
	mov	ecx, 8
@@:
	rol	eax, 4
	test	al, 0xF
	loopz	@b
	inc	ecx
.low:
	push	eax
	and	al, 0xF
	cmp	al, 10
	sbb	al, 69h
	das
	stosb
	pop	eax
	rol	eax, 4
	loop	.low

	mov	al, ' '
	stosb

	mov	esi,[edx+24]
	movzx	ecx,byte [esi-1]
	rep	movsb

	mov	ax,0A0Dh
	stosw

	jmp	symb_dump

      symbols_dumped:
	mov	edx,dbgfilename
        push    esi edi
	mov     esi, outfile
	mov     edi, edx
@@:
	lodsb
	stosb
	test	al, al
	jnz	@b
	lea	ecx, [edi-1]
@@:
	dec	edi
	cmp	edi, edx
	jb	@f
	cmp	byte [edi], '/'
	jz	@f
	cmp	byte [edi], '.'
	jnz	@b
	mov	ecx, edi
@@:
	mov	dword [ecx], '.dbg'
	mov     byte [ecx+4], 0
	pop	edi esi
	call	create
	mov	edx,[esp]
	mov	ecx,edi
	sub	ecx,edx
	call	write
	call	close
	pop	edi

	ret
