.sect .text; .sect .rom; .sect .data; .sect .bss
.sect .text
.define .set

	! #bytes in ecx
	! bit # in eax
.set:
	pop     ebx              ! return address
	xor     edx,edx
!ifdef create set
	sub	esp,ecx
	push	ebx
	push	edi
	mov     ebx,esp
	xor	edi,edi
	sar	ecx,2
1:
	mov     8(ebx)(edi),edx
	add	edi,4
	loop	1b
!endif
	mov     ebx,8
	div     ebx
	cmp     eax,edi
	jae     2f
	mov	edi,edx
	movb	dl,bits(edi)
	mov     edi,esp
	add     edi,eax
	orb     8(edi),dl
	pop	edi
	ret
2:
.extern ESET
.extern .trp
	pop	edi
	mov     eax,ESET
	jmp     .trp

	.sect .rom
bits:
	.data1   1,2,4,8,16,32,64,128