.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