Qbasicnews.com

Full Version: "idiv"ing double words
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I'm stuck Sad

Awhile back I asked if there was a way to divide dx:ax by bx and get a double word anwer. (like FFFFFFFFh / Ah = 19999999h) and I got this peice of code.....

Code:
;*dx:ax/bx; dx:ax = answer, cx = remainder*
push ax            ;save ax (lower word)
mov ax,dx        ;higher word into ax so it can be divided
xor dx,dx        ;dx = 0
div bx            ;dx:ax/bx; ax = answer dx = remainder
mov cx,ax        ;save higher word
pop ax            ;get ax, the lower word
div bx            ;dx:ax/bx again
xchg dx,cx        ;extange;dx = higher word cx = remainder

I was wondering if anyone knew how to do the same thing with the "idiv" (divide with sign) function. Thanks.
If that code above is correct (too lazy to check it now), just replace div with idiv.
Sorry I took so long....
I got this piece of code to work most of the time but when I tried to divide 6 0000h by Ah or 6 0000h by FFF6 (-Ah) I get a divide overflow error.
Code:
;Register        Function
;dx:ax    dividend (number to be divided)
;bx        divisor (number dividend is divided by)
;
;dx:ax/bx     dx:ax = answer, cx = remainder
push ax        ;save ax (lower word)
mov ax,dx    ;higher word into ax so it can be divided
cwd              ;convert dx:ax to word
idiv bx          ;dx:ax/bx; ax = answer dx = remainder
mov cx,ax        ;save higher word
pop ax         ;get ax, the lower word
idiv bx          ;dx:ax/bx again
xchg dx,cx    ;extange;dx = higher word cx = remainder
Why not try to do a:

Code:
Cwde
Cdq
Movsx ebx, bx
idiv ebx

instead of a

Code:
cwd
idiv bx

Dunno if you can use extended regs though. :*)
I'm using DEBUG.exe I can't use double words... Sad