public	isqrt

assume	cs:cseg,ds:cseg

cseg	segment

isqrt	proc

		mov	edx,[esp+4]
		mov	ecx,040000000h
		xor	eax,eax
l1:
		add	eax,ecx
		cmp	edx,eax
		jb	j1
		sub	edx,eax
		add	eax,ecx
		add	eax,ecx
j1:
		sub	eax,ecx
		shr	eax,1
		shr	ecx,2
		jnz	l1
	
		shl	edx,10
		shl	eax,10
		mov	ecx,0100h
l2:
		add	eax,ecx
		cmp	edx,eax
		jb	j2
		sub	edx,eax
		add	eax,ecx
		add	eax,ecx
j2:
		sub	eax,ecx
		shr	eax,1
		shr	ecx,2
		jnz	l2
		ret
isqrt	endp

cseg	ends

end
