|  | .text | 
|  | .p2align 2,0x90 | 
|  | .globl mpdigdiv | 
|  | mpdigdiv: | 
|  | /* Prelude */ | 
|  | pushl %ebp		/* save on stack */ | 
|  | pushl %ebx | 
|  |  | 
|  | leal 12(%esp), %ebp	/* %ebp = FP for now */ | 
|  | movl 0(%ebp), %ebx	/* dividend */ | 
|  | movl 0(%ebx), %eax | 
|  | movl 4(%ebx), %edx | 
|  | movl 4(%ebp), %ebx	/* divisor */ | 
|  | movl 8(%ebp), %ebp	/* quotient */ | 
|  |  | 
|  | xorl	%ecx, %ecx | 
|  | cmpl	%ebx, %edx		/* dividend >= 2^32 * divisor */ | 
|  | jae	divovfl | 
|  | cmpl	%ecx, %ebx		/* divisor == 1 */ | 
|  | je	divovfl | 
|  | divl	%ebx		/* AX = DX:AX/BX */ | 
|  | movl	%eax, (%ebp) | 
|  | done: | 
|  | /* Postlude */ | 
|  | popl %ebx | 
|  | popl %ebp | 
|  | ret | 
|  |  | 
|  | /* return all 1's */ | 
|  | divovfl: | 
|  | notl	%ecx | 
|  | movl	%ecx, (%ebp) | 
|  | jmp done |