Contributor: SEAN PALMER { SEAN PALMER I'm using TP. Here are the fixed division routines I'm currently using (they are, as you can see, quite specialized) I had to abandon the original fixed division routines because I didn't know how to translate the 386-specific instructions using DB. (MOVSX, SHLD, etc) } type fixed = record f : word; i : integer; end; shortFixed = record f : byte; i : shortint; end; { this one divides a fixed by a fixed, result is fixed needs 386 } function fixedDiv(d1, d2 : longint) : longint; assembler; asm db $66; xor dx, dx mov cx, word ptr D1 + 2 or cx, cx jns @S db $66; dec dx @S: mov dx, cx mov ax, word ptr D1 db $66; shl ax, 16 db $66; idiv word ptr d2 db $66; mov dx, ax db $66; shr dx, 16 end; { this one divides a longint by a longint, result is fixed needs 386 } function div2Fixed(d1, d2 : longint) : longint; assembler; asm db $66; xor dx, dx db $66; mov ax, word ptr d1 db $66; shl ax, 16 jns @S; db $66; dec dx @S: db $66; idiv word ptr d2 db $66; mov dx, ax db $66; shr dx, 16 end; { this one divides an integer by and integer, result is shortFixed } function divfix(d1, d2 : integer) : integer; assembler; asm mov al, byte ptr d1 + 1 cbw mov dx, ax xor al, al mov ah, byte ptr d1 idiv d2 end;