	SECTION _TEXT CLASS=CODE USE32
	SECTION _DATA CLASS=DATA USE32
	SECTION _BSS  CLASS=BSS USE32
	SECTION _CONST  CLASS=CONST USE32
	SECTION _STRING  CLASS=STRING USE32
	SECTION cstartup CLASS=INITDATA USE32
	SECTION crundown CLASS=EXITDATA USE32
	SECTION cppinit  CLASS=CPPINIT USE32
	SECTION cppexit  CLASS=CPPEXIT USE32
	GROUP DGROUP _DATA _BSS _CONST _STRING

SECTION _TEXT
[GLOBAL	_free]
;
; Line 10:	{
;
_free:
	PUSH	EBP
	MOV	EBP,ESP
	SUB	ESP,BYTE 04H
	PUSH	EBX
	PUSH	ESI
	PUSH	EDI
	MOV	EBX,DWORD [EBP+08H]
;
; Line 13:		if (!buf)
;
	TEST	EBX,EBX
	JE	NEAR	L_3
;
; Line 14:			return;
;
L_1:
;
; Line 15:		p = buf;
;
	MOV	ESI,EBX
;
; Line 16:		p-- ;
;
	SUB	ESI,BYTE 08H
;
; Line 17:		c = &_mallocchains[(p->size>>2) % 32		 ];
;
	MOV	EAX,DWORD [ESI+00H]
	SAR	EAX,02H
	AND	EAX,BYTE 01FH
	SHL	EAX,02H
	MOV	EDI,DWORD __mallocchains
	ADD	EDI,EAX
;
; Line 18:		p->next = *c;
;
	MOV	EAX,DWORD [EDI+00H]
	MOV	DWORD [ESI+04H],EAX
;
; Line 19:		(*c) = p;
;
	MOV	DWORD [EDI+00H],ESI
;
; Line 20:	}
;
L_3:
	POP	EDI
	POP	ESI
	POP	EBX
	MOV	ESP,EBP
	POP	EBP
	RET


SECTION _DATA
[EXTERN	__mallocchains]
