.text .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 2f cmpl %ecx, %ebx /* divisor == 1 */ je 2f divl %ebx /* AX = DX:AX/BX */ movl %eax, (%ebp) 1: /* Postlude */ popl %ebx popl %ebp ret /* return all 1's */ 2: notl %ecx movl %ecx, (%ebp) jmp 1b