This question has shown up several times recently. The algorithm is similar to doing division with pencil and paper, dividing a dividend of multiple digits by a single digit divisor. Here's a code snippet, with the 64 bit dividend kept in edi:esi. Note this same method could be extended to divide a very large dividend stored in memory to be divided by a 32 bit divisor.
.data
decstr db 24 dup (0)
pfstr db '%','s',0dh,0ah,0
.code
extrn _printf:NEAR
_main proc near
mov edi,000000002h ;edi = high order dvnd
mov esi,04CB016EAh ;esi = low order dvnd
lea ebx,decstr+23 ;ebx = ptr to end string
mov ecx,10 ;ecx = 10 (constant)
div0: xor edx,edx ;clear edx
mov eax,edi ;divide high order
div ecx
mov edi,eax
mov eax,esi ;divide low order
div ecx
mov esi,eax
add dl,'0' ;store ascii digit
dec ebx
mov [ebx],dl
mov eax,edi ;repeat till dvnd == 0
or eax,esi
jnz div0
push ebx ;display string
push offset pfstr
call _printf
add sp,8
xor eax,eax
ret
_main endp