Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
"idiv"ing double words
#1
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.
Reply
#2
If that code above is correct (too lazy to check it now), just replace div with idiv.
Reply
#3
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
Reply
#4
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. :*)
y smiley is 24 bit.
[Image: anya2.jpg]

Genso's Junkyard:
http://rel.betterwebber.com/
Reply
#5
I'm using DEBUG.exe I can't use double words... Sad
Reply
#6
http://www.aogosoft.com/download/debug32.rar
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)