;; Copyright (c) 1992,1993-1995 Argonaut Technologies Limited. All rights reserved. ;; ;; $Id: SAFEDIV.ASM 1.1 1996/09/26 19:04:00 JOHNG Exp $ ;; $Locker: $ ;; ;; .386p .model flat,c .data db '$Id: SAFEDIV.ASM 1.1 1996/09/26 19:04:00 JOHNG Exp $',0 align 4 .code ; result = edx:eax/divisor (0 on overflow) ; safediv macro divisor local pos1,pos2,zero,nzero; ; Get sign of result into ebx mov ecx,divisor mov ebx,ecx xor ebx,edx ; Make divisor and dividend positive test edx,edx jns pos1 neg edx neg eax sbb edx,0 pos1: ; edx:eax now positive test ecx,ecx jz zero jns pos2 neg ecx pos2: ; Compare for overflow cmp edx,ecx jae zero ; edx